报文是一比特一比特传输的,总是从最低位开始。
Preamble 代表前导数据,Access Address 代表接入地址,在这里我们主要关心的是 PDU 数据
部分。
以 BLE4.0 规范的 PDU 数据为例,PDU 包含了 16 位的报头,报头中的 PDU Type 为广播报文
的类型,一共有 7 种,每种类型都具有不同的 Payload 格式。
报头中的 TxAdd 位和 RxAdd 位分别代表了广播发送方和接收方使用的地址类型为公共地址
(TxAdd 或 RxAdd 为 0),还是随机地址(TxAdd 或 RxAdd 为 1)
可以看出一共有 4 种不同类型的广播,设备每次广播时,会在 3 个广播信道上发送相同的报
文,称为一个广播事件。
通用广播:可连接非定向广播(可接受扫描请求和连接请求)
定向广播:可连接定向广播(可接受扫描请求和连接请求)
不可连接广播:不可连接非定向广播(不接受扫描请求和连接请求)
可扫描广播:(接受扫描请求但是不接受连接请求)
1、ADV_IND:通用广播类型,我我们最常使用的一种类型,它的 Payload 格式如图,在 BLE4.0
规范中 PDU 最大为 39 个字节,在上面我们已经知道报头占用了 2 个字节,所以 Payload 只
有 37 个字节了,由于 Payload 需要加入广播者的地址 AdvA 占用了 6 个字节,所以 Payload
中的广播数据最大为 31 个字节。
而这 31 个字节也是需要遵循一定的格式的,下图就是 AdvData 的数据格式。有效的数据是
由若干段 AD Structure 构成的,每个 Structure 又是由[长度]+[类型]+[数据]构成,俗称 LTV 结
构(Length,Type,Value),多字节数据采用的小端模式。