在建立连接后,从机发送更新连接参数请求。这是L2CAP层干的事,因为LLID=10。什么是LLID?BLE包分两种,一种是广播包,一种是数据包,数据包结构如下:
数据报头包含以下信息
LLID:这个数据位表明了包所属的逻辑链接,以及有效数据部分是否包含链路层数据包或者链路层控制包。其中:
00 表示为保留。
01表示为链路层数据PDU,且L2CAP消息是连续分段或空的PDU。
10 表示为链路层数据PDU,且L2CAP消息的起始或未分段的完整I2CAP消息。
11表示为链路层控制包。
如果LLID=10,数据包头之后紧跟的是L2CAP层的数据
L2CAP的报头如下
L2CAP报头
低功耗信令通道信道ID,也叫信道标识符CID。
CID· 假设设备 A 向设备 B 发送一个 L2CAP 数据包,数据包包含有一个 CID(如 0x0040),表示这是一个特定的 L2CAP 信道。
· 设备 A 将这个 L2CAP 数据包通过物理信道上的一个数据信道(例如信道 37)发送。
· 设备 B 收到该数据后,根据 CID 信息,将数据传递给正确的应用层协议处理。
CID之后的数据再向上分到ATT层或其他层
其中CID=0x005,代表之后的数据规低功耗信令层管
低功耗信令有效数据结构
信令代码比如,如下数据,CID=0x0005属于低功耗信令层,对应的代码=0x12,信令是链接参数更新请求。
更新连接参数请求信令标识符:0x03。标识符域长为1B,用于请求与应答之间的匹配。请求方设备设置该域,而应答设备在应答中使用相同值。每个最初的指令必须用不同的标识符。信令长度:8链接事件间隔,从设备希望主设备允许从设备发送数据包的频率。从设备延迟,从设备能够忽略主设备的链接事件的最大值。
监控超时
更新连接参数应答主机更新连接参数应答:接受主机接受之后,会向从机发送一个链接更新指示。链路控制包LLID=11表示为链路控制层。
链路控制层的功能码有以下几种
控制代码
CONNECTION_UPDATE_REQ又叫CONNECTION_UPDATE_IND:更新连接指示,接着控制包类型后跟随以下数据:
Window Size: 5(即 6.25 ms)
每次连接事件的 传输窗口时间,主设备会在此时间内尝试与从设备通信。
Window Offset: 0(即 0 ms)
传输窗口的起始时间偏移量(从连接事件起点计算)。
Interval: 80(即 100 ms)
值越大越省电,但数据延迟越高。
连接事件间隔时间,影响 功耗 和 响应速度:
Latency: 0
0 表示从设备必须响应每一次连接事件(低延迟,但功耗较高)。
从设备可以跳过的连接事件次数。
Timeout: 400(即 4000 ms)
连接超时时间,若在此时间内无通信,则连接断开。
Instant: 2675
新参数将在第 2675 个连接事件 生效(用于同步主从设备)。
再来理解书中说的这段话是不是更清晰了
|