模块三:BLE(低功耗蓝牙)深度解析

BLE 是物联网与可穿戴设备的核心无线技术,面试集中在广播/连接机制、协议栈分层、功耗优化、实际调优四个维度。本章覆盖高频问答、公司侧重点、回答框架,并附带追问路径图。

核心知识点速查表:BLE 协议栈自下而上:LL(链路层)→ L2CAP → ATT/GATT → Gap + Profile。广播是连接前首步,连接后通过 ATT 读写属性。
BLE 回答框架 广播/扫描参数 连接建立与间隔 GATT属性操作 功耗与调优 连接间隔 vs 延迟 白名单 / 私有地址 Notification vs Indication SDK 参数调优实例

▎问答一:BLE 广播是如何工作的?AdvA、AdvData 分别代表什么?

面试官画像协议栈底层核验,考察你对 LL 层和 Host 层广播格式的熟悉度
公司侧重点芯片厂(Nordic/TI):关注硬件广播时序 + 扫描窗口;IOT 终端(小米/华为):关注广播包长度限制与兼容性
回答框架① 广播信道:37/38/39,跳频发射 → ② 广播类型:可连接/不可连接/扫描响应 → ③ 数据格式:PDU(AdvA 6字节 + AdvData ≤ 31字节)→ ④ 扩展广播(BLE 4.2+ 允许 251 字节)
简短示例“BLE广播使用三个主信道(2402/2426/2480MHz)轮发;AdvA 为设备 MAC(公开或随机),AdvData 包含 Flags、Name、UUID 等 AD Type;BLE 5.0 后扩展广播支持最多 251 字节数据。”
追问白名单过滤在广播层还是链路层实现?随机地址如何解决冲突?
避坑❌ 说“广播只在单一信道”;✅ 强调 3 个信道轮询发射,扫描端也在这三个信道监听。

▎问答二:BLE 连接建立的完整过程是怎样的?

面试官画像系统集成派,关注实际设备配对流程、角色管理与状态机
公司侧重点手机大厂(Apple/三星):关注 HCI 层实现及连接超时处理;穿戴设备(Keep/Amazfit):关注快速重连与功耗
回答框架① 广播者发送可连接广播 → ② 扫描者收到后发送 CONNECT_IND(包含 InitA、AdvA、连接参数)→ ③ 链路层建立连接事件(connection event)→ ④ 双方交换 LL_VERSION_IND / LL_FEATURE_REQ → ⑤ GAP 层上报连接成功
简短示例“扫描器收到可连接广播后,发送 CONNECT_IND 帧,指定连接间隔、延迟、超时;双方进入连接状态,首个连接事件即开始交换数据;连接参数可在连接后通过 L2CAP 连接更新请求调整。”
追问如果主设备发起连接参数更新请求,从设备可以拒绝吗?会不会掉线?
避坑❌ 混淆连接建立与配对绑定(Pairing/Bonding 是后续安全过程);✅ 明确指出连接成功后才进行配对。

▎问答三:BLE 数据交换中 Notification 和 Indication 的区别是什么?如何选择?

面试官画像GATT 层实战派,考察对应用层可靠性与流量控制的细节理解
公司侧重点体育健康(Garmin/Polar):心率数据用 Notify 降低延迟;医疗(强生/迈瑞):Indication 保证每包确认,避免丢数据
回答框架① 特性(Characteristic)的 CCCD 使能位 → ② Notification:服务器主动推送,无需握手,速度快但无确认 → ③ Indication:服务器推送后客户端回复确认,可靠性高但吞吐低 → ④ 选择依据:实时型用 Notify(心率、传感器流),关键数据用 Indicate(血糖、电子病历)
简短示例“Notification 在 GATT 层不等待 ACK,丢包由 LL 层重传保障;Indication 需要 Client 回复 Handle Value Confirmation,确保应用层收到;传感器数据用 Notify,重要控制命令用 Indicate。”
追问MTU 增大到 512 时 Notification 可以发多少字节?Write Command 与 Write Request 的区别?
避坑❌ 误以为 Notify 一定比 Indicate 快;✅ 注意 MTU 大小影响实际有效载荷,大 MTU 下 Notify 单包可达 506 字节。
大厂常见标签:
- Apple:iBeacon 广播格式、私有地址策略、EIR 包解析
- Google:Fast Pair、Eddystone 协议、GATT Service 设计规范
- Nordic:SoftDevice API 细节、Sleep/IDLE 模型、SDK 低功耗配置
- TI:CC254x/CC26xx 协议栈、BLE Stack 状态机、EVM 测试项目
面试高频追问路径(结合 SVG 图)
① 广播 → 追问:扩展广播的 PHY 选择(1M/2M/ coded)?广播集(Advertising Set)如何复用?
② 连接 → 追问:连接间隔的计算公式(connInterval×1.25ms)?连接超时时长如何推导?
③ GATT → 追问:MTU 协商机制、Handle 与 UUID 映射关系、多个 Characteristic 的并发读写
④ 功耗 → 追问:实际项目中连接间隔设为 7.5ms 和 100ms 的电流差异量级?

回答框架总结(适用于任何 BLE 问题)

“这个问题的本质是 [本质一句话]。首先明确 BLE 协议栈中对应的分层(LL / L2CAP / GATT / GAP)。
然后从 [连接前/连接后/数据交换] 三个阶段展开:1)参数配置关键项;2)交互流程;
3)极端/边界情况处理(如超时、丢包、设备漂移)。
最后补充实际项目中的调优经验或 SDK 代码片段(例:connInterval = 30ms 在 Zephyr 中的配置)。” 
章节小结:BLE 面试三大核心点——广播信道机制、连接建立状态机、GATT 数据交换与可靠性。结合实际芯片 SDK 调试经验能拉开明显差距。