BLE 广播格式定义

简介: BLE 广播格式定义

低功耗蓝牙两类报文 : 广播报文 和 数据报文。

本文讨论广播报文数据段,不包括完整报文其他部分,比如前导,接入地址等


蓝牙设备通过广播表明自己的存在,等待被连接。

BLE 考虑功耗, 使用了3个广播信道,顺序广播。


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


广播包类型

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


广播数据包格式


image.png



每个包都是 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。


  • 如果我只想广播其中一个

image.png

广播中的厂商信息

这个一段的广播标记时 0XFF, 对应用于标记设备的生产商和其他信息。

数据前两个字节时厂商ID, 其他自定义。

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


官方提供例子

image.png


广播数据格式

所有的 AD type 的定义在文档 Core Specification Supplement 中。 AD Type 包括如下类型:


Flags: TYPE = 0x01。这个数据用来标识设备 LE 物理连接的功能。DATA 是 0 到多个字节的 Flag 值,每个 bit 上用 0 或者 1 来表示是否为 True。如果有任何一个 bit 不为 0,并且广播包是可连接的,就必须包含此数据。各 bit 的定义如下:


  • bit 0: LE 有限发现模式
  • bit 1: LE 普通发现模式
  • bit 2: 不支持 BR/EDR
  • bit 3: 对 Same Device Capable(Controller) 同时支持 BLE 和 BR/EDR
  • bit 4: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
  • bit 5..7: 预留


Service UUID: 广播数据中一般都会把设备支持的 GATT Service 广播出来,用来告诉外面本设备所支持的 Service。有三种类型的 UUID:16 bit, 32bit, 128 bit。广播中,每种类型类型有有两个类别:完整和非完整的。这样就共有 6 种 AD Type。


  • 非完整的 16 bit UUID 列表: TYPE = 0x02;
  • 完整的 16 bit UUID 列表: TYPE = 0x03;
  • 非完整的 32 bit UUID 列表: TYPE = 0x04;
  • 完整的 32 bit UUID 列表: TYPE = 0x05;
  • 非完整的 128 bit UUID 列表: TYPE = 0x06;
  • 完整的 128 bit UUID 列表: TYPE = 0x07;


Local Name: 设备名字,DATA 是名字的字符串。 Local Name 可以是设备的全名,也可以是设备名字的缩写,其中缩写必须是全名的前面的若干字符。


  • 设备全名: TYPE = 0x08
  • 设备简称: TYPE = 0x09


TX Power Level: TYPE = 0x0A,表示设备发送广播包的信号强度。DATA 部分是一个字节,表示 -127 到 + 127 dBm。


带外安全管理(Security Manager Out of Band):TYPE = 0x11。DATA 也是 Flag,每个 bit 表示一个功能:


  • bit 0: OOB Flag,0 表示没有 OOB 数据,1 表示有
  • bit 1: 支持 LE
  • bit 2: 对 Same Device Capable(Host) 同时支持 BLE 和 BR/EDR
  • bit 3: 地址类型,0 表示公开地址,1 表示随机地址


外设(Slave)连接间隔范围:TYPE = 0x12。数据中定义了 Slave 最大和最小连接间隔,数据包含 4 个字节:


  • 前 2 字节:定义最小连接间隔,取值范围:0x0006 ~ 0x0C80,而 0xFFFF 表示未定义;
  • 后 2 字节:定义最大连接间隔,同上,不过需要保证最大连接间隔大于或者等于最小连接间隔。


服务搜寻:外围设备可以要请中心设备提供相应的 Service。其数据定义和前面的 Service UUID 类似:


  • 16 bit UUID 列表: TYPE = 0x14
  • 32 bit UUID 列表: TYPE = 0x??
  • 128 bit UUID 列表: TYPE = 0x15


Service Data: Service 对应的数据。


  • 16 bit UUID Service: TYPE = 0x16, 前 2 字节是 UUID,后面是 Service 的数据;
  • 32 bit UUID Service: TYPE = 0x??, 前 4 字节是 UUID,后面是 Service 的数据;
  • 128 bit UUID Service: TYPE = 0x??, 前 16 字节是 UUID,后面是 Service 的数据;


公开目标地址:TYPE = 0x17,表示希望这个广播包被指定的目标设备处理,此设备绑定了公开地址,DATA 是目标地址列表,每个地址 6 字节。


随机目标地址:TYPE = 0x18,定义和前一个类似,表示希望这个广播包被指定的目标设备处理,此设备绑定了随机地址,DATA 是目标地址列表,每个地址 6 字节。


Appearance:TYPE = 0x19,DATA 是表示了设备的外观。


厂商自定义数据: TYPE = 0xFF,厂商自定义的数据中,前两个字节表示厂商 ID,剩下的是厂商自己按照需求添加,里面的数据内容自己定义。


还有一些其他的数据,我这里就不一一列举了,有需要的可以从这个文档查阅 Core Specification Supplement 。

目录
相关文章
|
物联网
低功耗蓝牙(BLE)设备常用的4种角色
对于主从设备的其它说法,大家需要了解一下。对于Central和Peripheral有多种说法,上面我们说的是主从,还有客户端/服务端,中心设备/外围设备,我们这里简单介绍一下,客户端(Client)对应上面的Central,接收数据;服务端(Server)对应上面的额Peripheral,提供数据,这个需要和网站的服务器/客户端区别一下;中心设备(Central)和外围设备(Peripheral),其实上面叫中心设备和外围设备。上面主设备(Master)和从设备(Slave)应该对应主/从。这个根据个人习惯,主/从用的比较多,如果在蓝牙中提到这些知道就行了。
1306 0
|
传感器 数据采集 物联网
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
MQTT 的 QoS 等级:QoS 0、QoS 1、QoS 2
4341 0
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
|
编解码 安全 Android开发
低功耗蓝牙LE Audio Profile 详细介绍
2019年底,蓝牙官方组织SIG发布了蓝牙5.2版本的核心协议,其中增加了一个重要的特性---LE Audio。蓝牙的应用协议都是从应用层到物理层完整包含的协议,LE Audio也不例外。但蓝牙5.2核心协议仅仅定义了蓝牙LE的链路层传输Audio的方式,上层协议以及完整的LE Audio规范迟迟未出,近日,蓝牙官方组织释放了LE Audio较为完整的规范文档。
低功耗蓝牙LE Audio Profile 详细介绍
|
算法 网络协议 物联网
|
传感器 存储 Ubuntu
一步一步学会蓝牙开发之 ESP-IDF GATT Server 示例解析
学习蓝牙的 GATT 开发,我们从示例代码,一段代码一段代码进行详细分析说明
2744 1
一步一步学会蓝牙开发之 ESP-IDF GATT Server 示例解析
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
7617 4
一文带你认识蓝牙 GATT 协议
|
Ubuntu 安全 网络协议
|
Dragonfly 安全 算法
|
物联网 Android开发
【Android App】发送BLE广播及通过主从BLE实现聊天应用讲解及实战(附源码和演示 超详细)
【Android App】发送BLE广播及通过主从BLE实现聊天应用讲解及实战(附源码和演示 超详细)
2342 1