一、问题背景

在 BLE 开发中,经常会遇到这些问题:

1. 扫描响应包到底是什么?
2. 为什么有些设备看不到 Scan Response?
3. 扩展广播有没有“扩展扫描响应”?
4. iOS 明明支持扩展扫描,为什么看到的还是传统广播?
5. HCI 日志中为什么出现 “Ext ADV + Scan Response”?

这篇文章一次性讲清楚。


二、扫描包与扫描响应包(Legacy Advertising)


1. 工作流程

ADV(广播包)
   ↓
SCAN_REQ(主端发起)
   ↓
SCAN_RSP(外设响应)


2. SCAN_REQ 的本质

只包含:
- ScanA(谁在请求)
- AdvA(请求谁)

👉 它不是数据请求,而是:

一个“触发响应”的信号


3. SCAN_RSP 的特点

✔ 只发给发起请求的主端
✔ 用于补充 31 字节限制
✔ 属于单播响应(不是广播)


三、扩展广播(Extended Advertising)


1. 机制变化

Legacy:

ADV + SCAN_RSP

Extended:

ADV_EXT_IND
    ↓
AUX_ADV_IND
    ↓
AUX_CHAIN_IND


2. 核心变化

❌ 不再需要 Scan Request
✅ 使用链式广播发送数据


3. 是否存在“扩展扫描响应”?

❌ 不存在

因为:

扩展广播已经用链式结构取代了 SCAN_RSP


四、扩展广播的数据限制


1. 单包限制

最大 251 字节


2. 总数据量

通过链式广播可以超过 251 字节


3. 信道使用

Primary:37 / 38 / 39
Secondary:0~36 任意信道

👉 不存在“最多几个信道”的限制。


五、iOS 对扩展广播的支持


1. 扫描能力

[CBCentralManager supportsFeatures:CBCentralManagerFeatureExtendedScanAndConnect]

✔ 支持扩展扫描(BLE5)


2. 广播能力

❌ 仅支持 Legacy Advertising(31字节)


六、为什么 iOS HCI 日志看起来“很混乱”?


上图为 iPhone 6s HCI 日志


上图为 iPhone 13 HCI 日志


现象:

LE - Ext ADV Report
Event Type: Legacy Advertising PDUs Used
Scan Response 仍然存在


原因:

iOS 用 Extended Advertising Report 统一上报所有广播


判断是否真正扩展广播:

❌ 仅看 Ext ADV 不够

必须看:

1. Data Length > 31
2. Secondary PHY ≠ None
3. 是否存在 AUX_CHAIN_IND


七、总结

1. SCAN_REQ 是触发器,不是数据请求
2. SCAN_RSP 是单播响应,不是广播
3. 扩展广播没有扫描响应包
4. 251 字节是单包限制,不是总数据限制
5. iOS 支持扩展扫描,但不支持扩展广播发送
6. Ext ADV Report ≠ 扩展广播


最后一条(核心理解)

BLE 从“请求-响应模型(ADV + SCAN_RSP)”
演进到“链式广播模型(Extended Advertising)”,
这是一次机制替换,而不是功能增强。


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐