BLE学习(2):广播包报文格式详解

文章目录

  • 1 广播通道
  • 2 广播包

参考手册: Bluetooth Core Specification V5.0、 Supplement to the Bluetooth Core Specification V10

为了能够充分理解蓝牙的广播,我们先了解一下BLE架构的GAP(Generic Access Profile)层。BLE学习(2):广播包报文格式详解_第1张图片
GAP层提供决定蓝牙设备之间如何交互的框架,包括:

  • 蓝牙设备的角色(Client/Server)
  • 广播(广播advertising报文、广播数据、广播参数、搜寻广播)
  • 连接建立(初始化连接、接受连接、设置连接参数)
  • 安全

在一个BLE设备中GAP可以实现:发现蓝牙设备和广播报文并连接、广播并接受连接、发送广播报文、发现蓝牙设备和广播报文但不连接(仅扫描)。对于连接模式而言,两个设备之间可以双向传输数据;对于一个正在广播中的设备而言,无法接收数据(但有一个例外:可以接收和回复scan requests报文)。

1 广播通道

在广播状态下,设备发送一个有效数据包给其它设备,然后等待回复。这个数据包以一个固定的广播时间间隔进行发送。在蓝牙协议栈中,有40个通道,通道之间的中间间隔为2MHz。其中通道37~39称为主广播通道,而其余37个通道称为次广播通道(在连接期间也用于数据传输)。如果设备需要使用次广播通道,则需要在主广播通道中发送一个指向次广播通道的广播数据包。

2 广播包

如下图所示为广播包的格式,它最终会被封装在LL层packet中的PDU中。

  • LL层的packet format具体含义参考文档:BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B 2.1 PACKET FORMAT FOR THE LE UNCODED PHYS(有编码的和未编码的协议,编码的参考2.2)
    BLE学习(2):广播包报文格式详解_第2张图片

上图是针对无编码PHY层的,但有编码PHY的PDU与上图是相同的。

  • 有编码PHY:Bluetooth 5.0新引入的PHY,在远距离和噪声环境中通信很有用

现在来分析一下,PDU的各个字段:
1、PDU Type
PDU根据不同的用途分为了多个类别,该字段的长度为4位,可选的值如下:
BLE学习(2):广播包报文格式详解_第3张图片
在了解这些类别之前,我们需要先了解一些名词:
Directed和Undirected:Directed广播类型仅接收一个已知设备的请求,而Undirected广播可以接受任意设备的请求
Connectable和Non-Connectable:一个广播设备是否允许建立一个连接
Scannable和Non-Scannable:一个广播设备是否能够处理一个Scan Requset信息

  • Scan Request和Response是用来允许设备能够广播比广播报文允许的更长的数据

Extended advertising:扩展广播是一种可以广播更多数据(offloaded)的方式,它是通过广播一个主广播通道上指向次广播通道的辅助包实现的。

  • 对于Bluetooth 5.0以下的版本不支持

Periodic advertising:两台未连接的设备之间以指定的时间间隔向设备广播数据包,这意味着不止一台设备可以监听和收听这些周期性的广播。它们由以固定间隔发送的可变的广播数据组成。

  • 对于Bluetooth 5.0以下的版本不支持

下面来看看PDU的类型:
(1) Legacy Advertising PDUs
也就是兼容之前蓝牙版本的PDU类型,其含义对应上面的名词解释

  • ADV_IND: Connectable Scannable Undirected advertising.
  • ADV_DIRECT_IND: Connectable Directed advertising
  • ADV_NONCONN_IND: Non-Connectable Non-Scannable Undirected advertising
  • ADV_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帧格式如下
BLE学习(2):广播包报文格式详解_第4张图片
对于广播类型AD type来说,它有如下取值(具体定义参考官方文档Core Specification Supplement):

  • Service UUID: 包含一系列蓝牙服务UUID
  • Local Name: 设备名称
  • Flags: 当有一个可连接的广播包时,该位有效,Flags包括LE Limited Discoverable Mode, LE General Discoverable Mode, BR/EDR Not Supported, Simultaneous LEBR/EDR to Same Device Capable (Controller),Simultaneous LE and BR/EDR to Same Device Capable (Host)
  • Manufacturer Specific Data: 产商的唯一标识符
  • TX Power Level: 发送功率
  • Slave Connection Interval Range: 可通过广播数据包请求更改对方的默认连接间隔范围
  • Service Solicitation: 请求与一个或多个指定服务的广播设备连接
  • Service Data: 包含服务的UUID和该服务所对应的数据
  • Appearance: 根据standard Appearance assigned numbers定义的广播设备的类型
  • Public Target Address: 当使用公共地址绑定一个或多个设备时,定义广播的一个或多个接收者的地址。
  • Random Target Address: 当使用随机地址绑定一个或多个设备时,定义广播的一个或多个接收者的地址。
  • Advertising Interval: 广播间隔
  • Uniform Resource Identifier: 用于广播一个URL
  • LE Supported Features: 用于定义设备的低功耗特性,参考Core Specification (Vol. 6, Part B, Section 4.6

:设置FlagsLocal Name对应的AD Structure
对于Flags,它的AD Type为0x01,这里设置LE Limited Discoverable Mode标识,其对应的值如下图所示,第0位置1即设置,故将Flags设置为0x01;
BLE学习(2):广播包报文格式详解_第5张图片
对于Local Name,它包括两种:Shortened Local NameComplete Local Name,这里以Complete Local Name的设置为例,它的AD Type为0x09。
最终AD Structure的十六进制格式如下:
BLE学习(2):广播包报文格式详解_第6张图片

  • AD Type的值在官方的手册中没有说明,可以在官方SDK中查看

你可能感兴趣的:(BLE,网络协议)