第2篇:BLE 广播与扫描机制详解

本文是《BLE 协议从入门到专家》专栏第二篇,专注于解析 BLE 广播(Advertising)与扫描(Scanning)机制。我们将从协议层结构、广播包格式、设备发现流程、控制器行为、开发者 API、广播冲突与多设备调度等方面,全面拆解这一 BLE 最基础也是最关键的通信机制。


一、什么是 BLE 广播?

BLE 广播(Advertising)是 BLE 设备被发现和发起通信的入口,它允许设备周期性在特定信道上广播消息。

广播的核心目标:

被其他设备扫描发现

提供配对或连接服务

进行连接前通信(如 iBeacon 定位、温湿度广播)

甚至可用于无需连接的数据交互(如资产追踪)

广播为 BLE 设计的关键创新点之一,是区别于经典蓝牙最核心的特征。


二、BLE 广播通道与频率结构

BLE 一共使用 40 个 RF 通道(每个通道间隔 2 MHz):

通道编号:0 ~ 39

通道用途:

通道 37(2402 MHz)

通道 38(2426 MHz)

通道 39(2480 MHz) → 广播通道

其余 37 个为数据通道(连接后使用)

广播包会在上述 3 个广播通道上轮流发送,以提高被扫描发现的概率。


三、广播数据结构(ADV 包格式)

BLE 广播包由多个 TLV(Type-Length-Value)格式字段组成,每个字段称为“AD 结构(Advertising Data)”。

广播包格式(payload 最多 31 字节):

| Length | Type | Value            |
|--------|------|------------------|
| 0x02   | 0x01 | Flags (如0x06)   |
| 0x05   | 0x09 | 完整设备名       |
| 0x03   | 0xFF | 厂商自定义数据   |

常见 Type 列表:

Type (Hex) 含义
0x01 Flags(基本属性)
0x08/0x09 Short/Complete Name
0x02/0x03 UUID16 Service
0x16 Service Data (UUID16)
0xFF Manufacturer Specific

四、广播类型与用途

广播类型 说明 特征
ADV_IND 可被连接 + 可被扫描 最常用,支持连接与扫描响应
ADV_NONCONN_IND 仅广播 不可连接,不触发响应
ADV_SCAN_IND 可扫描,但不可连接 常用于 Sensor、温湿度等应用
ADV_DIRECT_IND 指向特定地址 用于快速重连接,高优先级

五、扫描机制与交互流程

扫描设备(如手机)以一定间隔监听广播信道,接收广播包。

扫描模式:

被动扫描(Passive)

只监听,不发送请求

低功耗、不触发 SCAN_RSP

主动扫描(Active)

接收广播后发出 SCAN_REQ → 设备响应 SCAN_RSP

可获取更多数据,但多一次交互

广播流程图:

 


六、扫描事件结构与广播数据解析

扫描设备接收到广播包后,会上报事件:hci_le_advertising_report_event

事件中包含:

报文类型(ADV_IND、ADV_SCAN_IND等)

MAC 地址(BLE 地址 + 类型)

RSSI(信号强度)

广播包内容(Advertising Data)

开发者需解析广播内容(AD结构),提取所需字段:如设备名、UUID、厂商数据、传感器值等。


七、广播参数设置建议(开发实战)

参数 含义 常用设置
adv_interval_min/max 广播间隔 100ms – 1000ms
adv_type 广播类型 ADV_IND(可连接)
own_address_type 设备地址类型 Public 或 Random
adv_channel_map 广播通道 37/38/39全开
adv_filter_policy 过滤策略 通常设为 0(允许所有)

广播数据通过 aci_gap_set_discoverable() 设置,扫描由 aci_gap_start_observation() 启动。


八、广播与扫描冲突处理

BLE 设备不可同时广播 + 扫描(除非协议栈支持主从共存),常见冲突包括:

广播中无法扫描(需先停广播)

扫描中无法连接他人(需进入 Initiator 状态)

被动设备多广播时,信道拥塞、包丢失

实战建议:

用状态机切换广播/扫描行为

添加广播/扫描任务队列避免资源竞争

控制广播时间窗口,错开多个设备干扰


九、BLE 扩展广播(BLE 5.0+)简述

BLE 5.0 引入了扩展广播(Extended Advertising):

广播包长度从 31 字节 → 255 字节

支持更多广播类型(周期广播 PAwR、CTE等)

可分为主包 + 辅包,通过辅助通道发送更大数据

后续章节将详细解析扩展广播的结构、应用与实现。


十、结语

BLE 广播机制是 BLE 通信的核心基础,影响设备是否可被发现、是否能连接、是否能稳定通信。

开发者理解广播包格式、扫描交互流程、事件回调与数据结构,是进入 BLE 世界的必修课。

下一篇,我们将从“连接机制”角度继续深入,分析 GAP 的连接状态、参数结构、连接建立流程与断开处理策略。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容