基础概念

蓝牙体系与协议栈分层

发布于 2026-07-21 · 来自「嵌入式江湖」技术专栏

很多人学 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 协议栈"。

二、协议栈四层

从下到上:

  1. PHY(物理层):2.4GHz ISM 频段,40 个信道(3 个广播信道 37/38/39 + 37 个数据信道),GFSK 调制。4.2 之前只有 1M PHY,5.0 起支持 Coded PHY(远距离)和 2M PHY(高速)。
  2. Link Layer(链路层):最核心。负责设备状态机(Standby / Advertising / Scanning / Initiating / Connection)、自适应信道跳频、CRC、接入地址、连接管理。它直接决定功耗和连接稳定性。
  3. HCI(主机控制接口):Controller 与 Host 之间的命令/事件/数据通道。单芯片方案里它是内部函数调用;分离架构(如 USB 蓝牙棒、外挂蓝牙模块)上才是真实的串口/HCI 报文。
  4. Host(主机层)
  5. L2CAP:复用、分片与重组(MTU 超过 27 字节时在这里分包)
  6. ATT:属性协议,读写属性的最小单位
  7. GATT:基于 ATT 的服务/特征值抽象(应用层直接打交道的是它)
  8. SMP/SM:安全管理、配对绑定
  9. GAP:设备角色、广播、连接控制

三、Controller 与 Host 的两种落地

  • 单芯片协议栈(nRF52 的 SoftDevice、Zephyr 的 Host+Controller):都在 SoC 上,HCI 是内部 API。
  • 双芯片(MCU + 蓝牙模块):通过 UART(HCI) 或裸 AT 指令通信。

四、为什么分层重要(排错地图)

  • 搜不到 / 连不上 → 看 Link Layer + GAP(广播/扫描参数)
  • 连上但读不到数据 → 看 GATT / ATT(UUID、权限、CCCD)
  • 连上频繁断 → 看 Link Layer(supervision timeout、干扰、跳频)
  • 数据被窃听 → 看 SMP(配对方式)

实战要点:调试 BLE 先判断问题在哪一层,再选工具——空口问题用 Sniffer,应用层问题看 GATT 日志,连接稳定性问题看 Link Layer 参数。

更多 BLE / 鸿蒙星闪 / 芯片选型 / MCU 实战,持续更新