第4章 蓝牙低功耗(BLE)技术:广播、扫描、连接、GATT 服务、面试高频题

BLE 是物联网和可穿戴设备的核心无线协议。本章聚焦广播(Advertising)、扫描(Scanning)、连接建立流程和 GATT 服务模型,覆盖面试中最常被追问的通信机制与数据交互设计。

广播者 广播事件 广播信道 37/38/39 扫描者 扫描窗口 连接请求 ATT/GATT 数据
答题关键: 广播者按固定间隔发送广播包,扫描者在扫描窗口内监听广播信道(37/38/39)。扫描到设备后发起连接请求,双方进入连接事件(Connection Event),后续通过 ATT 协议读写 GATT 属性。

面试问答 1:请解释 BLE 中广播和扫描的工作原理

面试问题:请解释 BLE 中广播者(Peripheral)和扫描者(Central)的工作流程,以及广播信道的选择策略。

面试官考察点:是否理解广播间隔、扫描窗口、被动扫描与主动扫描的区别,以及跳频在 BLE 中的作用。

回答框架:① 广播者按广播间隔(如 100ms)在三个广播信道(37/38/39)上依次发送广播 PDU。② 扫描者在每个扫描间隔内开窗监听,接收广播包;主动扫描还发送扫描请求获取更多数据。③ 扫描到目标后,通过 CONNECT_IND 建立连接,后续切到 37 个数据信道通信。

示例回答:广播者周期性地在 37/38/39 三个信道上发送广播包,每个事件间隔约几十到几百毫秒。扫描者以扫描窗口和扫描间隔交替监听,接收到广播后会发送扫描请求(主动扫描)以获取设备名等信息。连接建立后双方使用自适应跳频在数据信道通信。

可能追问:被动扫描与主动扫描的区别?广播间隔对功耗和发现延迟的影响?

避坑提醒:不要混淆广播事件与连接事件;主动扫描会多一条扫描请求→扫描响应交互,部分面试官会抠细节。

面试问答 2:BLE 连接建立的详细过程是怎样的?

面试问题:描述 BLE 设备从扫描到连接建立的完整过程,涉及哪些参数和时序。

面试官考察点:是否掌握连接请求(CONNECT_IND)的结构,连接间隔、从机延迟、监督超时的作用。

回答框架:① 扫描者收到广播包后,提取设备地址和广播数据。② 扫描者发送 CONNECT_IND(LL_CONNECTION_IND)到广播者,该 PDU 包含初始连接参数。③ 双方按参数建立连接事件(Connection Event),从机延迟允许从机跳过若干事件,超时后断开。

示例回答:扫描者收到广播后,向广播者发送 CONNECT_IND,其中封装了连接间隔(如 30ms)、从机延迟(0~499)、监督超时(如 5s)。广播者收到后回复,双方进入第一个连接事件。此后每隔连接间隔交换一次数据,从机可跳过最多指定次数的事件来省电。

可能追问:连接间隔对功耗和吞吐量的影响?监督超时设置过短会怎样?

避坑提醒:不要遗漏 CONNECT_IND 由扫描者(Master)发出,广播者(Slave)只能等待连接。

面试问答 3:GATT 中 Profile、Service、Characteristic 是如何组织的?

面试问题:请画图或描述 BLE GATT 协议中 Profile、Service、Characteristic 的层次关系,以及 UUID 的作用。

面试官考察点:是否理解 GATT 服务模型,能解释包含关系、属性句柄、读写权限设置。

回答框架:① Profile 是服务的集合,例如心率 Profile 包含心率服务、电池服务等。② Service 分为主要服务和次要服务,每个 Service 包含一个或多个 Characteristic。③ Characteristic 是数据的最小单元,包含声明(Declaration)、值(Value)和可选描述符(Descriptor),通过 UUID 区分。

示例回答:一个 Profile 可包含多个 Service,如心率 Service(UUID: 0x180D)包含心率测量 Characteristic(UUID: 0x2A37)。每个 Characteristic 有一个属性句柄,客户端通过读/写/通知操作获取数据。Descriptors 提供配置(如 CCCD 开启通知)。

可能追问:CCCD 是什么?如何实现通知(Notification)与指示(Indication)的区别?

避坑提醒:不要把 Service 和 Characteristic 搞混层级;Characteristic 的 Value 在属性表中占据一个 Handle,但值本身不包含在声明内。

BLE 核心概念速查表

概念说明面试常见出题点
广播状态机Advertiser、Scanner、Initiator 三种角色角色切换条件
连接事件Master 和 Slave 按连接间隔交换数据从机延迟对功耗的影响
ATT PDU读写 Handle 对应的属性值MTU Exchange 流程
GATT 层级Profile → Service → Char → DescriptorUUID 分类(16/32/128bit)

项目案例:智能手环心率监测 BLE 通信模块

项目名称:SmartBand 心率数据低功耗采集与传输系统

业务背景:手环端通过 PPG 传感器实时采集心率,通过 BLE 将数据同步至手机 App,要求续航 15 天以上。

规模指标:手环 MCU 主频 64MHz,BLE 芯片为 Nordic nRF52832,峰值传输速率 1Mbps;连接间隔 30ms,从机延迟 4;单包载荷 20 字节,每秒上报 5 个心率值。

技术栈:Nordic SoftDevice S132 协议栈、SVC 调用、GATT 自定义 Service(UUID 0xFFE0)、Notification 传输、LLPM 低功耗模式。

核心难点:① 实现保持连接的同时将平均电流降至 10μA 以下。② 数据丢包后需重传且不阻塞后续数据。③ 多连接场景下合理分配连接间隔避免冲突。

面试高频追问:

  • 你们如何评估连接参数对功耗的影响?——通过理论计算和实测结合,调整连接间隔和从机延迟。
  • Notification 和 Write 的吞吐量对比?——Notification 无需应答,吞吐更高但可能丢包;Write Request 有确认,适合可靠性场景。
  • 如何避免 BLE 协议栈死锁?——使用异步回调 + 状态机,避免在中断中执行耗时操作。

可迁移回答话术:“在项目中我们通过配置连接间隔为 30ms、从机延迟 4 来平衡功耗和实时性,同时利用 GATT Notification 机制减少主机轮询开销。” 你可以在面试中重点强调 BLE 参数配置与业务场景的匹配关系。