Skip to content

先搞懂它是什么

  • BLE(低功耗蓝牙):从蓝牙 4.0 开始的一套低功耗无线协议,手机、手环、传感器都在用;Ai-M6x(BL616/BL618)内置 BLE 5.x。
  • 广播与连接:设备先“喊话”(广播)让别人发现自己;连接建立后,双方按 GATT 规则交换数据。
  • GATT(通用属性协议):连接后“数据怎么组织、怎么读写”的规矩——服务(Service)→ 特征(Characteristic)→ 值,就像“抽屉里的抽屉里的文件”。
  • 为什么必学:BLE 面试常考 GATT 层级、MTU、通知 vs 指示;做手环/遥控器/传感器项目也绕不开。

层层拆解原理

1. 角色分层:从射频到应用

SDK 的 BLE 例程启动顺序正好对应这层架构:btble_controller_init(控制器)→ hci_driver_init(HCI)→ bt_enable(启动主机协议栈 GAP/GATT)。

2. 广播与连接(GAP)

  • 广播(Advertising):未连接时,从机周期性发送广播包(含设备名、厂商数据、UUID 等),主机扫描后“看见”它。
  • 连接(Connection):主机发起连接,双方建立链路;连接后广播停止,按连接参数(间隔、延迟、超时)定时通信。
  • 角色:广播/等待连接的是 Peripheral(从机),扫描/发起连接的是 Central(主机);手机 App 通常扮演主机。

3. GATT 数据组织:服务 → 特征 → 值

层级说明例子
服务(Service)一组相关特征的集合,有 UUID电池服务 0x180F
特征(Characteristic)一个数据点,含值 + 属性电量值 0x2A19
描述符(Descriptor)特征的附加说明,如 CCCD 控制通知开关客户端特征配置描述符

SDK 从机例程(peripheral)注册了一个测试服务,里面有多个特征,覆盖读/写/无应答写/通知/指示——正好用来理解这层结构。

4. ATT:句柄、属性与 MTU

  • 每个属性(服务、特征、值)都有一个 句柄(Handle),GATT 操作按句柄寻址。
  • MTU(最大传输单元):一次 L2CAP 报文最多能携带多少字节(默认 23 字节,可协商到更大)。大于 MTU 的数据要分多包。
  • 通知(Notify)vs 指示(Indicate)
    • 通知:从机直接推数据,主机不确认,速度快、可能丢。
    • 指示:主机必须回确认(ACK),可靠但慢。
    • 是否开启由主机的 CCCD(客户端特征配置描述符) 决定——这就是“订阅(subscribe)”的本质。

5. 广播与连接的安全机制

  • 配对/绑定(Pairing/Bonding):交换密钥、加密链路。
  • 常见加密算法:AES-CCM 加密数据;安全等级影响可用性。
  • 连接参数更新:双方协商连接间隔,间隔越大越省电、延迟越高。

结合 SDK 看实现

从机例程里注册测试服务的代码展示了“定义特征 → 建服务 → 注册”的 GATT 流程:

c
/* ble_tp_svc.h:测试服务 UUID 07af27a5-9c22-11ea-9afe-02fcdc4e7412 */
ble_tp_init();                       /* 注册读/写/通知/指示等特征 */
bt_le_adv_start(&param, adv_data, n, adv_rsp, m);   /* 可连接广播 */

主机侧则用 bt_le_scan_start 扫描、连接后 bt_gatt_discover 发现服务/特征,再用句柄读写或订阅——和手机 App 的操作一一对应。

常见考点 / 面试题

GATT、ATT、GAP 分别是什么关系?

GAP 管“发现与连接”(广播/扫描/角色);连接后由 GATT 定义“数据怎么组织”(服务/特征),GATT 建立在 ATT 属性表之上,ATT 又跑在 L2CAP 通道上。

服务、特征、描述符有什么区别?

服务是功能集合,特征是具体数据点(值+属性),描述符描述特征(如 CCCD 控制通知/指示开关)。主机按“发现服务→发现特征→读/写/订阅”的顺序使用。

通知和指示有什么区别?

通知不要求接收方确认,速度快但可能丢包;指示要求确认,可靠但慢。选择依据是数据的重要程度。

什么是 MTU?有什么用?

MTU 是单次 L2CAP 报文最多携带的字节数(默认 23 字节)。协商更大的 MTU(如 247)可减少分包,提高大块数据传输效率。

广播和连接能同时进行吗?

通常连接建立后从机停止广播;断开后可重新广播(SDK 从机例程在断开回调里自动恢复广播)。

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23