为了能够充分理解蓝牙的广播,我们先了解一下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.3
4、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的十六进制格式如下: