为了能够充分理解蓝牙的广播,我们先了解一下BLE架构的GAP(Generic Access Profile)层。
GAP层提供决定蓝牙设备之间如何交互的框架,包括:
在一个BLE设备中GAP可以实现:发现蓝牙设备和广播报文并连接、广播并接受连接、发送广播报文、发现蓝牙设备和广播报文但不连接(仅扫描)。对于连接模式而言,两个设备之间可以双向传输数据;对于一个正在广播中的设备而言,无法接收数据(但有一个例外:可以接收和回复scan requests报文)。
在广播状态下,设备发送一个有效数据包给其它设备,然后等待回复。这个数据包以一个固定的广播时间间隔进行发送。在蓝牙协议栈中,有40个通道,通道之间的中间间隔为2MHz。其中通道37~39称为主广播通道,而其余37个通道称为次广播通道(在连接期间也用于数据传输)。如果设备需要使用次广播通道,则需要在主广播通道中发送一个指向次广播通道的广播数据包。
如下图所示为广播包的格式,它最终会被封装在LL层packet中的PDU中。
BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B 2.1 PACKET FORMAT FOR THE LE UNCODED PHYS(有编码的和未编码的协议,编码的参考2.2)
上图是针对无编码PHY层的,但有编码PHY的PDU与上图是相同的。
现在来分析一下,PDU的各个字段:
1、PDU Type
PDU根据不同的用途分为了多个类别,该字段的长度为4位,可选的值如下:

在了解这些类别之前,我们需要先了解一些名词:
①Directed和Undirected:Directed广播类型仅接收一个已知设备的请求,而Undirected广播可以接受任意设备的请求
②Connectable和Non-Connectable:一个广播设备是否允许建立一个连接
③Scannable和Non-Scannable:一个广播设备是否能够处理一个Scan Requset信息
④Extended advertising:扩展广播是一种可以广播更多数据(offloaded)的方式,它是通过广播一个主广播通道上指向次广播通道的辅助包实现的。
⑤Periodic advertising:两台未连接的设备之间以指定的时间间隔向设备广播数据包,这意味着不止一台设备可以监听和收听这些周期性的广播。它们由以固定间隔发送的可变的广播数据组成。
下面来看看PDU的类型:
(1) Legacy Advertising PDUs
也就是兼容之前蓝牙版本的PDU类型,其含义对应上面的名词解释
ADV_IND: Connectable Scannable Undirected advertising.ADV_DIRECT_IND: Connectable Directed advertisingADV_NONCONN_IND: Non-Connectable Non-Scannable Undirected advertisingADV_SCAN_IND: Scannable Undirected advertising(2) Extended Advertising PDUs
在Bluetooth 5.0版本引入的类型,它允许设备在次广播通道进行广播,它的作用是允许更多的广播内容。
ADV_EXT_IND: 在主广播通道发送的扩展广播 (Connectable Scannable Undirected广播类型不可用)AUX_ADV_IND: 在次广播通道发送的扩展广播 (Connectable Scannable Undirected广播类型不可用)AUX_SYNC_IND: 周期性广播AUX_CHAIN_IND: 与其他广播类型一起使用,以保存额外的广播数据(广播包的chain,即多个广播包之间由chain建立关系)(3) Scanning PDUs
Scan包使设备能够广播比单个广告包所允许的更多的广播数据。
SCAN_REQ: 用于主广播通道中发送的Scan Requset包SCAN_RSP: 用于主广播通道中发送的Scan Response包AUX_SCAN_REQ: 用于次广播通道中发送的Scan Requset包AUX_SCAN_RSP: 用于次广播通道中发送的Scan Response包(4) Initiating PDUs
该数据包用于在一个外围设备与广播设备之间建立连接。
CONNECT_IND: 在主广播通道上发送的连接请求包AUX_CONNECT_REQ: 在次广播通道上发送的连接请求包AUX_CONNECT_RSP: 在次广播通道上发送的连接响应包2、RFU(Reserved for future use):保留
3、ChSel
如果广播设备支持LE Channel Selection Algorithm #2算法,该位会被置1
Vol. 6, Part B, Section 4.5.8.34、TxAdd
如果广播设备的地址是随机的,该位置1;如果是公共的,该位置0
5、RxAdd
如果目标设备的地址是随机的,该位置1;如果是公共的,该位置0
6、Length
packet中有效数据的长度
7、PDU Payload
广播数据包的内容及其最大大小取决于PDU类型。包含广播数据的PDU类型有:ADV_IND,ADV_NONCONN_IND, ADV_SCAN_IND;ADV_EXT_IND, AUX_ADV_IND, AUX_SYNC_IND, AUX_CHAIN_IND
Advertising Data帧格式如下

对于广播类型AD type来说,它有如下取值(具体定义参考官方文档Core Specification Supplement):
LE Limited Discoverable Mode, LE General Discoverable Mode, BR/EDR Not Supported, Simultaneous LE、BR/EDR to Same Device Capable (Controller),Simultaneous LE and BR/EDR to Same Device Capable (Host)Core Specification (Vol. 6, Part B, Section 4.6例:设置Flags和Local Name对应的AD Structure
对于Flags,它的AD Type为0x01,这里设置LE Limited Discoverable Mode标识,其对应的值如下图所示,第0位置1即设置,故将Flags设置为0x01;

对于Local Name,它包括两种:Shortened Local Name和Complete Local Name,这里以Complete Local Name的设置为例,它的AD Type为0x09。
最终AD Structure的十六进制格式如下:
