蓝牙广播包,全名蓝牙广播通道(channel)空中包,即在蓝牙广播通道上传输的空中包,为两种空中包的一种,其具体格式如下所示:
编辑
Advertising Header即前述的LL header,长度为一个字节,其每bit定义如下所示:
编辑
- PDU Type为3bit,具体定义如下。可以看出扫描PDU和发起连接PDU都属于广播包。
编辑
注:CONNECT_REQ也可写作CONNECT_IND
- TxAdd/RxAdd,各占1bit,表示随后的Device Address字段代表的蓝牙MAC地址类型,值0代表Public地址,值1代表Random地址。
Payload length定义如下所示,所以广播包PDU最长37个字节。
编辑
Device Address ,广播包中的强制字段,俗称蓝牙MAC地址,如果是广播包,则是advertiser的MAC地址;如果是scan包或者连接请求包,则是scanner的MAC地址。
蓝牙device address为6个字节,这样Advertising data最长为:37-6 = 31B,这就是广播包数据最长只能31个字节的由来。如前所述,device address分public和random两种,定义如下所示:
编辑
Random device address又有三种类型,定义如下所示:
编辑
Advertising data我会另写一篇文章来详述,这里就不再介绍了。
如下为一个完整的真实的广播包示例,注意:Bluetooth LE空中包采用小端模式。
编辑
AAD6BE898E600E3B75AB2A02E102010504FF5900538EC7B2
- AA – 前导帧(preamble)
- D6BE898E – 访问地址(access address)
- 60 – LL帧头字段(LL header)
- 0E – 有效数据包长度(payload length)
- 3B75AB2A02E1 – 广播者设备地址(advertiser address)
- 02010504FF590053 – 广播数据
- 8EC7B2 – CRC24值
注:上述广播包是蓝牙4.x格式,蓝牙5.0广播包除了包含上述格式外(记住:蓝牙5是跟蓝牙4.x兼容的!),还有一些新的定义,以后我也会写一篇关于蓝牙5广播的文章来专门阐述蓝牙5扩展广播包。
|