BLE 协议栈架构:控制器、主机、应用层概述
很多工程师刚开始接触 BLE 时,最容易犯的一个错误就是——把所有的蓝牙功能都揉在一个概念里。其实,BLE 协议栈是有清晰分层的。每一层各司其职,上层只管数据逻辑,下层只管收发比特流。理解了这个分层,你才能看懂后面连接参数抖动和 GATT 泄漏的那些坑。
我个人习惯把 BLE 协议栈比作一个公司:应用层是老板,主机层是中层管理,控制器层是一线工人。老板说"我要发一份数据",中层拆成任务单,工人负责把信号发出去。今天我们就来拆开每一层看看,重点讲 GAP 和 GATT 这两个你最常打交道的模块。
1. BLE 协议栈的三层架构
BLE 协议栈从上到下分为三层:应用层、主机层 和 控制器层。每一层封装了不同的功能,层与层之间通过标准接口通信。你写的业务代码跑在应用层,而 GAP 和 GATT 位于主机层,是连接业务与硬件的桥梁。
| 层级 | 核心模块 | 主要职责 |
|---|---|---|
| 应用层 | 用户 App / Profile | 业务逻辑、UI、数据解析 |
| 主机层 | GAP, GATT, ATT, L2CAP, SMP | 连接管理、数据封装、安全配对 |
| 控制器层 | LL (链路层), PHY (物理层) | 射频收发、包处理、时序控制 |
为什么会这样分层?说白了,就是解耦。硬件厂商只管把 PHY 和 LL 做好,协议栈厂商负责主机层,而你只关注应用层。哪一层出了问题,就只修哪一层,不用动其他部分。
控制器层 是离硬件最近的一层。PHY 负责在 2.4GHz 频段上收发数据包,LL 负责包的组装、重传、加密和连接状态机。你平时听到的"连接间隔"、"超时时间"这些参数,其实都是 LL 层的概念。
主机层 是协议栈中最复杂的一层。L2CAP 把上层数据分片重组,SMP 负责配对和加密,ATT 定义了数据读写的规则,而 GAP 和 GATT 则是对外暴露的两大 API——你用 BLE 做项目,90% 的时间都在跟这两个模块打交道。
应用层 就简单了,你写的数据处理逻辑、UI 交互、传感器解析都在这里。应用层不直接跟硬件对话,它通过 GAP 和 GATT 接口间接控制连接和数据。
💡 一个经验:我刚开始学 BLE 时,经常搞混 GAP 和 GATT 的职责。后来想明白一句话就记住了——GAP 管"能不能连",GATT