很多人学 BLE 一上来就钻 GATT,结果调不通时完全不知道问题在链路层还是主机层。先把分层心智模型建立起来,后面所有问题都能"对号入座"。
下面先给一张从上到下的协议栈全景图,建立整体心智模型;后面章节再逐层展开。
BLE 协议栈(从上到下)
应用层 / Profile
└ 业务逻辑、具体服务(心率 / OTA / 透传…)
HOST(主机层 · 软件,运行在 MCU / CPU 上)
├─ GAP 通用访问规范:角色 / 广播 / 连接 / 安全
├─ GATT 通用属性规范:服务 / 特征(建立在 ATT 上)
├─ ATT 属性协议:Client/Server 读写的最小单位
├─ SMP 安全管理:配对 / 绑定 / 加密 / 密钥分发
├─ L2CAP 逻辑链路适配:信道复用 / 分段与重组
└─ HCI 主机-控制器接口:命令 / 事件 / 数据通道
CONTROLLER(控制器层 · 蓝牙芯片固件)
├─ Link Layer 链路层:广播 / 扫描 / 连接 / 跳频 / CRC
└─ PHY 物理层:2.4GHz / GFSK / 40 信道
说明:HOST 与 CONTROLLER 是两个大分区,不是单独一层;GAP / GATT / ATT / SMP / L2CAP / HCI 都在 HOST 内,Link Layer 与 PHY 在 CONTROLLER 内,HCI 是两者的边界。
蓝牙分 BR/EDR(经典蓝牙,音频/文件传输)和 BLE(低功耗,传感/控制)。本文只聊 BLE。一颗 BLE SoC(如 nRF52、CC26xx、DA145xx)跑的是"单模 LE 协议栈"。
从下到上:
实战要点:调试 BLE 先判断问题在哪一层,再选工具——空口问题用 Sniffer,应用层问题看 GATT 日志,连接稳定性问题看 Link Layer 参数。