天天看点

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

基于 BLE 5.1 协议 Core Spec。

目录

1、CONNECT_IND

1.1、LLData

2、AUX_CONNECT_REQ

3、AUX_CONNECT_RSP

4、总结

发起态,是针对连接的。也就是这样一个应用流程:首先呢,你开启一个 Scan,让设备处于扫描状态,这个时候,扫描到一个你想要的 Advertising,然后关闭 Scan(当然,也可以不关),这个时候,你知道了这个 Advertising 的地址了,如果你想和这个设备进行连接,则需要让设备进入发起态,与这个 Advertising 进行一组交互,一旦交互成功,则双方进入连接态。

与 Scan 类似,Init 状态也分为了针对 Legacy 的和 Extended 的,一共有 3 中包:

• CONNECT_IND

• AUX_CONNECT_REQ

• AUX_CONNECT_RSP

注:这里我们只讨论 Payload 域,发起态的总体数据包组成也是和广播态一致,也是分为 Preamble + AA + PDU + CRC 的组成,而 PDU 的 Header 域的含义与 Advertising 含义一致,参考 《广播态数据包组成》

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

1、CONNECT_IND

这个是针对 Legacy 的链接建立交互。交互过程是,本机进入发起态(Initiating state),一旦在 Primary Advertising Physical Channel 上再次接收到期望连接的设备发来的可连接 Advertising,则立马回复 CONNECT_IND,本机立即进入连接态,成为 Master。

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

InitA:指的是本机发起态的地址,也就是本机地址

AdvA:指的是对端 Advertising 的地址

LLData :详见下面分析

1.1、LLData

连接建立,是一件大事,需要交互的信息非常之多,基本上全部包含在 CONNECT_IND 的 LLData 中:

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

LLData 包含信息非常丰富,我们逐个分析:

AA:这个指的是 Access Address,连接建立的接入地址,由 Master 生成,是一个随机数

CRCInit: CRC 计算的初始值

WinSize:这个应用于计算  transmitWindowSize ,这个  transmitWindowSize = WinSize * 1.25 ms.。在建立连接初期,需要计算第一个包交互的锚点,在时序分析的时候,会通过图解的方式来展示这个玩意的应用

WinOffset:这个应用于计算   transmitWindowOffset , transmitWindowOffset = WinOffset * 1.25 ms。和上面一个一样,计算第一个包的锚点。

Interval:连接间隔,每隔这个时间,来一次 Connection Event 交互。connInterval = Interval * 1.25 ms.

Latency:连接的 Latency,代表 Slave 并不是每个 connInterval 都需要回复包,而是可以间隔 Latency 个回复也可以。

Timeout: 也称 TO,用于表示超过这么长时间没有交互,就认为连接断开,connSupervisionTimeout = Timeout * 10 ms. 

ChM:全称是 Channel Map,5 个字节,表示了 40 个 bits 的 Bitmap(其实只有37个有用,因为 37、38、39只用于 Advertising 相关交互,不用于 Connection),告诉对方,我们在哪些频道上进行数据发送。对应频道为 1 代表有效,反之无效,不用。

Hop:跳频参数,代表了  hopIncrement ,因为连接的稳定性,需要不断的跳频后进行数据交互,那么下一次跳频的地点在哪个频道呢,事实上,并不是顺序的使用频率(1、2、3、4....),之所以叫跳频,其实是按照固定的一套跳频算法(后面章节会详细讲)双方同时跳跃,这个  hopIncrement  就是跳频计算算法的一个输入参数。

SCA:代表了 Master 的时钟精度,单位是 ppm,即百万分之一。

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

2、AUX_CONNECT_REQ

AUX_CONNECT_REQ 和 CONNECT_IND 的包组成完全一致,区别是,AUX_CONNECT_REQ 针对于 Extended 的,其实就是 Secondary Advertising Physical Channel 上的交互,不在多说。

3、AUX_CONNECT_RSP

与 Legacy 不一样的是,Extended 上建立连接上,还多了一个步骤。

Legacy 的是 Initiating 端直接发送 CONNECT_IND ,然后其进入 Connection 状态,其并不知道对端是否收到了这个 CONNECT_IND 。

Extended 在发送 AUX_CONNECT_REQ 后,还等待 Advertising 端回复一个 AUX_CONNECT_RSP 包,双方握手完成,正式进入 Connection 状态:

BLE(7)—— 发起态数据包组成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、总结

阅读了几个 Common Extended Advertising Payload Format ,这个肯定不在话下,只携带了 AdvA 和 TargetA,进行了一个简单的握手。

4、总结

看得出来,与针对 Scanning 类似,Initiating 的几个包,分为了针对 Legacy 和 Extended 的,REQ 的含义和包体都几乎一致。连接稍微复杂些,因为有很多参数需要确定,以保证连接的可靠性。

BLE