本文是参考书籍 《BLE4.0 低功耗蓝牙 协议 总结 》整理的笔记,如有不适联系删除
1、主机连接参数更新
1.1、LL_CONNECTION_UPDATE_REQ
连接参数第一次是主机发送的 CONNECT_REQ 中传递的。 而这个命令的使用只限主机使用,也就是说主机根据需要随时都可以进行参数更新。从机接收到这个命令后要么使用参数,要么断开连接。
LL_CONNECTION_UPDATE_REQ包格式
Instant :
在连接更新参数时,并不是请求发送过去,这些参数就立刻生效,是在约定的时刻进行更新。BLE 的同步是通过一个连接事件计数器控制的。而这个数据包中的 Instant 参数就是一个未来的连接事件计数器的次数。 当目前的连接事件的次数等于
Instant 的值的时候,连接参数开始投入使用,而对于 Instant 这次的连接事件就相当于一个新的连接建立的过程,只是这个过程都是在数据通道中完成
2、从机连接参数更新
L2CAP Channel ID:通道 ID。 0x0004、 0x0005、 0x0006 三个可选
0x0005 它是低功耗信令信道的固定信道, 这个信道上传输的是命令包, 那么它的上层是谁呢?数据给谁又由谁提供数据呢?答案是通用访问规范 Generic Access Profile(GAP), 只是有意思的是,GAP 并没有具体的数据包的格式,它只提供数据,真正的组包是在别的层。
Code:操作码,即 GAP 发送的命令或者接收的命令,对于 BLE 来说其实只有 3 个可用的命令
- Command reject
- Connection parameter update request,更新连接参数,比如最小连接间隔,最大连接间隔,slave latency等 一般是从机发给主机
- Connection parameter update response,接受或者拒绝上面的请求 一般是 主机回应从机
LL 层就可实现连接参数更新,那么从机也有更新连接参数的权利, 通过这个命令即可,而且这个命令只能由从机发送给主机,如果从机接收到这个命令后,会回复命令拒绝。它的命令包格式如图 3-5 所示
这里注意哦!里面的 4 个参数都是给的范围,也就是说从机不能最终决定具体连接参数值,从机只能给主机提 出 自 己 的 想 法 , 如 果 主 机 同 意 更 新 , 那 么 需 要 主 机 发 送“ LL_CONNECTION_UPDATE_REQ”这个命令详细连接参数给从机,然后从机等到“瞬时”到后进行参数更新。
如果仅仅是从对等层来说, 当从机发送 Connection ParameterUpdate request 命令,主机需要发送 Connection Parameter Updateresponse 这个命令去回应。 如图 3-6 所示。 Result 为 2 个字节的结果代码。 当主机同意修改连接参数的时候, Result 为 0x0000, 也就是接受 参 数 更 新 的 建 议 。 当 主 机 不 同 意 修 改 连 接 参 数 的 时 候 ,Result=0x0001,拒绝参数更新
图解: