BLE 广播格式定义

低功耗蓝牙两类报文 : 广播报文 和 数据报文。
本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等

蓝牙设备通过广播表明自己的存在,等待被连接。
BLE 考虑功耗, 使用了3个广播信道,顺序广播。

两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。 从机广播中包含设备的相关信息,比如设备名称,设备具有的服务uuid 等。

广播包类型

  • 广播包 (Advertising Data)
  • 响应包 (Scan Response)
    主机主动扫描的情况下, 发送扫描请求给从机, 从机返回扫描响应数据。

 广播数据包格式

BLE 广播格式定义

 

每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。

  • 有效数据部分
    包含若干个广播数据单元,称为 AD Structure 。如图所示,AD Structure 的组成是:

    • 长度 Len ,表示这个 AD Structure 的长度(除去 len本身 1)
    • 类型 AD Type
      标记这段广播数据代表什么, 比如设备名, uuid 等。
    • 数据 AD data
  • 无效数据部分
    广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的。

Flags

对于低功耗蓝牙设备, 广播中需要包括的一个 Structure, 包含一个byte 的标记, 标记设备
Flags used over the LE physical channel are:

  • Limited Discoverable Mode
  • General Discoverable Mode
  • BR/EDR Not Supported
  • Simultaneous LE and BR/EDR to Same Device Capable (Controller)
  • Simultaneous LE and BR/EDR to Same Device Capable (Host)

广播设备的服务uuid

假如蓝牙设备有心率等profile, 可以在广播中添加那对应的服务uuid ,这样其他设备可以通过广播直接了解设备具备的功能。
GAP 和 GATT 服务的 UUID 不应该出现在广播中, 这对于每个设备都是具有的。
广播中包含服务uuid 包括六种类型, 对应不同程度 uuid 和列表完整性(complete 和 incomplete)

  • 16-bit Bluetooth Service UUIDs
  • 32-bit Bluetooth Service UUIDs
  • Global 128-bit Service UUIDs

complete 和 incomplete 的区别

比如, 我设备有两个服务对应的 16 bit uuid 分别是 0x1122 和 0x 2233。

  • 如果我只想广播其中一个BLE 广播格式定义

 

广播中的厂商信息

这个一段的广播标记时 0XFF, 对应用于标记设备的生产商和其他信息。
数据前两个字节时厂商ID, 其他自定义。

具体其他广播数据段类型详见 参考。

官方提供例子

BLE 广播格式定义

BLE 广播格式定义