蓝牙低功耗(BLE)广播通信中的报文及其交互过程
蓝牙低功耗的广播通信是设备发现、连接建立和数据广播的基础。整个过程主要涉及三种链路层状态:广播状态、扫描状态和发起状态,每种状态对应不同的报文(PDU)类型。广播通信的交互围绕几种关键的链路层PDU展开,其基本流程如下图所示(以可连接非定向广播为例):Mermaid广播设备根据不同的应用场景,会发送不同类型的广播PDU:广播事件:一次广播事件指广播者在所有使用的广播信道(通常为37、38、39信道
蓝牙低功耗的广播通信是设备发现、连接建立和数据广播的基础。整个过程主要涉及三种链路层状态:广播状态、扫描状态和发起状态,每种状态对应不同的报文(PDU)类型。
一、核心报文类型与交互过程概述
广播通信的交互围绕几种关键的链路层PDU展开,其基本流程如下图所示(以可连接非定向广播为例):

二、详细报文解析与交互场景
1. 广播状态报文(由Advertiser发出)
广播设备根据不同的应用场景,会发送不同类型的广播PDU:
| PDU 类型 | 名称 | 载荷内容 | 说明与应用场景 |
|---|---|---|---|
| ADV_IND | 可连接非定向广播 | AdvA (6字节) + AdvData (0-31字节) | 最常用的广播类型。宣告自身存在,可被扫描,可被连接。用于设备发现和通用连接建立。 |
| ADV_DIRECT_IND | 可连接定向广播 | AdvA (6字节) + InitA (6字节) | 用于快速连接已知目标设备(InitA)。不携带广播数据,不可被扫描,只能被指定设备连接。广播间隔很短(≤3.75ms),但持续时间有限(≤1.28s)。 |
| ADV_NONCONN_IND | 不可连接非定向广播 | AdvA (6字节) + AdvData (0-31字节) | 仅用于广播数据,不可被扫描,不可被连接。适用于信标(Beacon)等纯数据广播场景。 |
| ADV_SCAN_IND | 可扫描非定向广播 | AdvA (6字节) + AdvData (0-31字节) | 用于广播数据且可被扫描以获取更多信息,但不可被连接。 |
广播事件:一次广播事件指广播者在所有使用的广播信道(通常为37、38、39信道)上发送一组报文的过程。两个广播事件之间的时间间隔 T_advEvent = advInterval + advDelay ,其中 advDelay 是一个0-10ms的随机延时,用于避免多个设备广播冲突。
2. 扫描状态报文(由Scanner发出/接收)
扫描设备监听广播信道,可以被动接收,也可以主动交互。
| PDU 类型 | 名称 | 载荷内容 | 说明 |
|---|---|---|---|
| SCAN_REQ | 扫描请求 | ScanA (6字节) + AdvA (6字节) | 当扫描者收到 ADV_IND 或 ADV_SCAN_IND 后,若想获取更多信息(如设备名称),则发送此请求。这是一个主动扫描过程。 |
| SCAN_RSP | 扫描响应 | AdvA (6字节) + ScanRspData (0-31字节) | 广播者收到 SCAN_REQ 后,在同一个广播信道上回复此响应包,携带额外的数据(如完整的设备名)。扫描响应数据与初始广播数据共同构成设备的完整广播信息。 |
3. 发起状态报文(由Initiator发出)
发起者专门监听可连接的广播,旨在建立连接。
| PDU 类型 | 名称 | 载荷内容 | 说明 |
|---|---|---|---|
| CONNECT_REQ | 连接请求 | InitA (6字节) + AdvA (6字节) + LLData (22字节) | 当发起者收到 ADV_IND 或 ADV_DIRECT_IND 后,发送此请求以发起连接。 LLData 中包含关键的连接参数,如连接间隔、从设备延迟、监督超时等。一旦广播者接受此请求,当前广播事件立即终止,双方进入连接状态。 |
三、广播数据格式详解
无论是广播数据 ( AdvData ) 还是扫描响应数据 ( ScanRspData ),其有效载荷都遵循相同的 AD Structure 格式:
[长度 (1字节)][AD 类型 (1字节)][数据 (长度-1 字节)]
Plain Text
多个这样的结构串联起来,总长度不超过31字节(传统广播)或254字节(扩展广播),剩余部分用0填充。
常见的 AD 类型 包括:
-
Flags (0x01):指示设备发现模式和BR/EDR支持情况。
-
不完全/完整的16位UUID列表 (0x02/0x03):设备支持的服务。
-
不完全/完整的128位UUID列表 (0x06/0x07):设备支持的服务。
-
短设备名/完整设备名 (0x08/0x09):设备名称。
-
发射功率级别 (0x0A):广播信号强度,用于距离估算。
-
厂商自定义数据 (0xFF):前两字节为厂商ID,其余数据由厂商自定义。
四、完整交互流程示例
以一个手机(Scanner/Initiator)连接智能手环(Advertiser)为例:
-
广播:手环以 ADV_IND 类型周期性广播,数据中包含Flags、部分服务UUID等信息。
-
扫描与发现:手机处于扫描状态,收到 ADV_IND 包。若进行主动扫描,手机会发送 SCAN_REQ ,手环回复 SCAN_RSP (包含完整设备名),手机UI随即显示“手环_XYZ”。
-
发起连接:用户在手机点击连接。手机作为Initiator,发送 CONNECT_REQ 报文。
-
连接建立:手环接受连接请求,双方停止广播/扫描流程,使用 CONNECT_REQ 中协商的参数进入连接状态,开始在数据信道上进行双向通信。
总结
BLE广播通信是一个灵活且高效的机制,通过有限的几种PDU类型,组合实现了设备发现、数据广播和连接发起三大功能。理解 ADV_IND 、 SCAN_REQ 、 SCAN_RSP 和 CONNECT_REQ 这些核心报文及其交互时序,是掌握BLE通信基础的关键。广播数据内结构化的AD Type使得设备能够自我描述,为上层应用提供了丰富的上下文信息。
更多推荐

所有评论(0)