蓝牙协议简介
简单开发 → GATT(99%场景)进阶玩法 → L2CAP(少数芯片支持)底层控制 → LL / PHY(不可用)

行,我给你按你那张图的风格,用 Markdown + 分层图 + 工程视角,把 BLE(低功耗蓝牙)体系结构完整讲清楚,而且重点回答你之前那个问题:能不能绕过 GATT 直接用底层通信。
一、蓝牙体系结构(Markdown 图)
┌──────────────────────────────────────────────┐
│ Host(主机) │
│ │
│ ┌───────────────┬───────────────┐ │
│ │ GATT │ GAP │ │
│ │(数据模型) │(连接/广播) │ │
│ ├───────────────┼───────────────┤ │
│ │ ATT │ SMP │ │
│ │(属性协议) │(安全管理) │ │
│ └───────────────┴───────────────┘ │
│ L2CAP(逻辑链路层) │
│ │
└──────────────────────────────────────────────┘
│
│ HCI(Host Controller Interface)
│
┌──────────────────────────────────────────────┐
│ Controller(控制器) │
│ │
│ Link Layer(LL,链路层) │
│ - 连接管理 / 调度 / 重传 / 加密 │
│ │
│ Physical Layer(PHY,物理层) │
│ - 调制 / 频率 / 发射功率 / 编码 │
│ │
│ Radio(射频) + Antenna(天线) │
│ │
└──────────────────────────────────────────────┘
二、各层详细拆解(嵌入式工程视角)
1️⃣ Host 层(你写代码的地方)
🔹 GATT(最常用)
-
定义数据结构(服务 + 特征值)
-
类似:
struct { service { characteristic (value) } } -
本质:应用层协议
👉 你写的 BLE 代码基本都在这层
🔹 ATT(GATT 的底层)
-
数据单位:Attribute(属性)
-
操作:
- Read
- Write
- Notify
- Indicate
👉 GATT = ATT 的封装
🔹 GAP(连接管理)
负责:
-
广播(Advertising)
-
扫描(Scanning)
-
建立连接(Connection)
-
角色:
- Central(主)
- Peripheral(从)
👉 没它,设备连不上
🔹 SMP(安全)
- 配对(Pairing)
- 加密(Encryption)
- 密钥交换(LTK)
👉 BLE 安全全靠它
🔹 L2CAP(关键!!!)
你问的重点就在这:
作用:
- 多路复用(多个协议共享链路)
- 分包 / 重组
- QoS 管理
👉 所有上层数据最终都走 L2CAP
2️⃣ HCI(分界线)
这是一个非常关键的边界:
Host(软件) ←→ Controller(硬件)
常见接口:
- UART
- USB
- SPI
👉 在一些芯片(比如手机):
- Host 在 CPU
- Controller 在蓝牙芯片
👉 在 ESP32:
- Host + Controller 在同一个芯片里
3️⃣ Controller 层(芯片内部)
🔹 Link Layer(LL)
核心能力:
- 建立连接
- 时隙调度(TDMA)
- 重传(ARQ)
- 加密(链路级)
👉 真正控制无线通信的核心
🔹 PHY(物理层)
负责:
-
调制(GFSK)
-
速率:
- 1M
- 2M
- Coded(125K / 500K)
👉 决定距离 / 速率
🔹 Radio
- 真正发射无线信号
三、数据通信流程(重点!)
🔁 一次完整数据发送路径
应用层
↓
GATT(你调用 notify/write)
↓
ATT(封装成 attribute 数据)
↓
L2CAP(分包)
↓
HCI(发给控制器)
↓
LL(调度发送)
↓
PHY(编码调制)
↓
Radio(发射)
接收反过来:
Radio → PHY → LL → HCI → L2CAP → ATT → GATT → 应用
四、重点回答你那个问题(核心)
❓ 能不能像 TCP/UDP 一样直接用底层?
你问的是:
能不能绕过 GATT,直接用 ATT / L2CAP 通信?
✅ 答案分三层说清楚:
✅ 1️⃣ 可以绕过 GATT,用 ATT
👉 很多协议就是这么干的
但:
- ATT 本质还是 受限协议
- 数据模型固定(attribute)
👉 不够自由
✅ 2️⃣ 可以直接用 L2CAP(重点!)
✔ BLE 5.0 之后支持:
🔹 L2CAP Credit Based Channel(LE CoC)
特点:
- 类似 TCP
- 支持流式数据
- 不用 GATT
👉 这是最接近 socket 的东西
⚠️ 但现实问题:
很多芯片:
| 芯片 | 支持 L2CAP CoC |
|---|---|
| 手机 | ✅ |
| ESP32 | ❌(基本不支持) |
| 一些BLE芯片 | ❌ |
👉 所以你会感觉:
“BLE 好像只能用 GATT”
❌ 3️⃣ 不能直接用 LL / PHY
原因:
- 被芯片厂封死
- 属于 Controller 层
- 不开放 API
👉 就像你不能直接操作 WiFi 的 OFDM 一样
五、总结一句话(给你工程判断用)
👉 BLE 通信分三种层次:
简单开发 → GATT(99%场景)
进阶玩法 → L2CAP(少数芯片支持)
底层控制 → LL / PHY(不可用)
六、给你个工程建议(很实用)
如果你想做:
🎧 音频 / IMU / 高速数据
建议:
-
❌ 不要死磕 GATT
-
✅ 用:
-
BLE + 自定义协议(notify优化)
-
或直接上:
- Bluetooth Classic
- WiFi
-
📡 BLE 蓝牙低功耗体系架构详解(附层级图)

BLE(蓝牙低功耗)的体系架构分为三大核心部分:Controller(控制器)、HCI(主机控制器接口)、Host(主机),从上到下实现了“应用逻辑 → 数据传输 → 物理通信”的完整链路。下面逐层拆解,帮你彻底搞懂每一层的作用~
一、Controller(控制器):蓝牙的“硬件执行层”
这一层直接和硬件打交道,负责最底层的无线信号收发和链路控制,分为两个子层:
1. 物理层(PHY,Physical Layer)
- 作用:蓝牙通信的“物理基础”,负责定义无线信号的传输规则。
- 核心功能:
- 规定BLE的工作频段(2.4GHz ISM频段,划分40个信道,其中3个广播信道+37个数据信道)。
- 定义调制方式(BLE用GFSK调制,BLE 5.0后新增2Mbps高速模式)、发射功率、接收灵敏度等硬件参数。
- 处理信号的编码、调制、解调,把数字数据转换成电磁波发送出去,同时把收到的电磁波还原成数字数据。
- 类比:就像快递的“运输卡车”,负责把包裹(数据)从一个地方运到另一个地方,是所有通信的物理载体。
2. 链路层(LL,Link Layer)
- 作用:PHY的“直接管理者”,负责建立、维护和断开蓝牙连接,是Controller的核心逻辑层。
- 核心功能:
- 管理设备状态:广播、扫描、发起连接、连接建立、连接维护、断开连接等。
- 控制数据传输:处理数据包的收发、确认、重传,保证数据可靠传输。
- 实现跳频机制:在数据信道之间切换,避免干扰,提升通信稳定性。
- 控制连接参数:比如连接间隔、从机延迟、监督超时,这些参数决定了连接的功耗和响应速度。
- 类比:就像交通警察,指挥卡车(PHY)走哪条路、什么时候出发、遇到红灯(干扰)怎么处理,保证交通有序进行。
二、HCI(主机控制器接口):主机和控制器的“翻译官”
- 全称:Host Controller Interface,是Host和Controller之间的标准通信接口。
- 作用:解耦主机和控制器,让上层的Host协议不用关心底层硬件细节,也让不同厂商的控制器能和标准主机协议兼容。
- 通信方式:通常通过UART、USB、SDIO等物理总线传输命令和数据,Host发送HCI命令控制Controller,Controller通过HCI事件反馈状态和数据。
- 核心数据类型:
- 命令包:Host给Controller发指令(比如“开始广播”“发起连接”)。
- 事件包:Controller给Host反馈状态(比如“连接成功”“收到数据”)。
- 数据包:Host和Controller之间传输的业务数据。
- 类比:就像两个说不同语言的人之间的翻译,Host说的“高层指令”被翻译成Controller能懂的“底层命令”,Controller的“硬件状态”也被翻译成Host能懂的“状态信息”。
三、Host(主机):蓝牙的“应用逻辑层”
这一层是开发者最常接触的部分,负责实现蓝牙的应用协议和用户逻辑,从下到上分为:
1. L2CAP(逻辑链路控制与适配协议)
- 作用:Host的“数据分发中心”,是连接底层Controller和上层应用协议的桥梁。
- 核心功能:
- 协议复用:把不同上层协议(ATT、SMP)的数据区分开,分别送到对应的模块。
- 分段重组:如果数据太长,就拆分成多个L2CAP包发送,接收端再重组还原。
- 流控和重传:部分模式下支持数据的可靠传输,避免数据丢失。
- 定义逻辑信道:每个上层协议对应一个逻辑信道ID(CID),实现数据的定向传输。
- 类比:就像快递的“分拣中心”,把不同目的地的包裹(不同协议的数据)分类、打包,再交给运输环节。
2. ATT(属性协议)
- 作用:定义了蓝牙设备之间数据交互的基本模型,是GATT的底层支撑。
- 核心概念:
- 属性(Attribute):蓝牙设备对外暴露的数据单元,每个属性都有唯一的句柄(Handle)、类型(UUID)和值(Value)。
- 客户端/服务器模型:发起数据读写的是客户端(Client),提供数据的是服务器(Server)。
- 操作指令:定义了读、写、通知、指示等数据交互方式。
- 类比:就像快递的“包裹标准”,规定了包裹怎么写地址(UUID)、怎么寄(读写指令),保证收发双方都能看懂。
3. GATT(通用属性配置文件)
- 作用:基于ATT构建的“数据服务框架”,是BLE应用开发的核心。
- 核心结构:
- 服务(Service):一组相关属性的集合,代表一个功能(比如心率服务、电池服务),有唯一的服务UUID。
- 特征(Characteristic):服务里的具体数据项,比如心率值、电池电量,包含特征值、特征描述符等。
- 描述符(Descriptor):对特征的补充说明,比如数据格式、单位、权限等。
- 核心角色:
- GATT Server:提供服务和特征的设备(比如智能手环,对外提供心率数据)。
- GATT Client:访问服务和特征的设备(比如手机,读取手环的心率数据)。
- 类比:就像快递的“业务场景模板”,比如“生鲜快递”“文件快递”,规定了不同业务下包裹的类型、格式和交互方式,我们平时说的“蓝牙服务”“蓝牙特征”,就是在GATT里定义的。
4. SMP(安全管理协议)
- 作用:负责蓝牙连接的安全机制,实现设备配对、加密和认证。
- 核心功能:
- 配对流程:定义了设备之间交换安全信息的过程(比如传统配对、LE Secure Connections配对)。
- 密钥生成:生成连接加密密钥,对传输的数据进行加密,防止被窃听。
- 认证与授权:验证设备身份,防止非法设备连接,控制数据的读写权限。
- 绑定:把配对信息保存下来,下次连接时不用重新配对。
- 类比:就像快递的“安全校验系统”,验证收发双方的身份,给包裹上加密锁,防止包裹被别人拆开、篡改。
5. GAP(通用访问配置文件)
- 作用:定义了设备的角色、广播、扫描、连接的通用规则,是BLE设备“对外交互的入口”。
- 核心角色:
- 广播者(Broadcaster):发送广播包的设备,不建立连接(比如信标设备)。
- 观察者(Observer):接收广播包的设备,不建立连接(比如手机扫描信标)。
- 外设(Peripheral):广播并接受连接的设备(比如智能手环、蓝牙传感器)。
- 中心设备(Central):扫描并发起连接的设备(比如手机、电脑)。
- 核心流程:定义了设备怎么广播、怎么被发现、怎么发起连接、连接参数协商等通用交互规则。
- 类比:就像快递的“收发规则”,规定了谁是寄件人(外设)、谁是收件人(中心设备)、怎么通知对方有包裹(广播)、怎么建立联系(连接),是设备之间“打招呼”的通用规则。
🔗 整体工作流程(简化版)
- 外设(Peripheral):在GAP层配置广播参数,通过Controller的LL层发送广播包,PHY层转换成电磁波发送出去。
- 中心设备(Central):通过Controller的PHY层接收电磁波,LL层解析广播包,HCI层把数据传给Host的GAP层,发现外设。
- 中心设备发起连接请求,双方通过LL层建立连接,HCI层把连接状态传给Host。
- 连接建立后,双方通过L2CAP层分发数据,GATT层定义服务和特征,中心设备通过ATT层读写外设的数据。
- 安全通信时,SMP层完成配对和加密,保证数据传输安全。
💡 补充说明:
- 在实际开发中,很多蓝牙SoC(比如ESP32、nRF52)会把Controller和Host都集成在芯片里,开发者主要在Host层开发GATT服务和应用逻辑。
- 不同蓝牙版本(BLE 4.0/4.2/5.0/5.3)的架构基本不变,主要是PHY层和LL层的功能增强(比如更远的传输距离、更高的速率、更多的广播信道)。
这是为你绘制的 BLE 蓝牙低功耗体系架构结构图,和原图结构一致,同时优化了排版和色彩,更清晰直观👇
结构说明(对应图中层级)
- Host(主机层):
- 最上层是应用逻辑的核心,从下到上:
L2CAP→ATT/GATT、SMP/GAP,负责数据分发、服务定义、安全配对和设备交互规则。
- 最上层是应用逻辑的核心,从下到上:
- HCI(主机控制器接口):
- 中间的“桥梁层”,负责主机和控制器之间的命令、数据、事件传输,解耦了上层协议和底层硬件。
- Controller(控制器层):
- 最下层的硬件执行层,分为
Link Layer (LL)和Physical Layer (PHY),负责连接管理、无线信号收发和数据传输的物理实现。
- 最下层的硬件执行层,分为
下面用纯 Markdown 文本,还原 BLE 体系架构的层级结构,清晰直观👇
┌─────────────────────────────────────────────────────────────┐
│ Host(主机层) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ GATT │ │ GAP │ │
│ ├─────────────┤ ├─────────────┤ │
│ │ ATT │ │ SMP │ │
│ └─────────────┘ └─────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ L2CAP │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
▲
│
┌─────────────────────────────────┐
│ HCI(主机控制器接口) │
│ (Host Controller Interface) │
└─────────────────────────────────┘
▲
│
┌─────────────────────────────────────────────────────────────┐
│ Controller(控制器层) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Link Layer (LL) │ │
│ ├─────────────────────────────────────────────────────┤ │
│ │ Physical Layer (PHY) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
简化层级版(更紧凑)
┌─────────────────────────────────────────┐
│ Host(主机) │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ GATT/ATT│ │ GAP/SMP │ │ L2CAP │ │
│ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────┘
▲
│
┌───────────────────────┐
│ HCI(主机控制器接口) │
└───────────────────────┘
▲
│
┌─────────────────────────────────────────┐
│ Controller(控制器) │
│ ┌─────────────────────────────────────┐ │
│ │ Link Layer (LL) │ │
│ ├─────────────────────────────────────┤ │
│ │ Physical Layer (PHY) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
带层级说明的版本
# BLE 体系架构(从上层到底层)
┌───────────────────────────────────────────────────────────┐
│ 应用与服务逻辑(Host) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ GATT │ │ GAP │ ← 应用交互与角色定义 │
│ │ (属性配置) │ │(通用访问) │ │
│ ├─────────────┤ ├─────────────┤ │
│ │ ATT │ │ SMP │ ← 数据模型与安全配对 │
│ │ (属性协议) │ │(安全管理) │ │
│ └─────────────┘ └─────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ L2CAP │ │
│ │ (逻辑链路控制与适配协议,数据分发与分段) │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
▲
│
┌─────────────────────────────────────────┐
│ HCI(主机控制器接口,Host ↔ Controller 桥梁) │
└─────────────────────────────────────────┘
▲
│
┌───────────────────────────────────────────────────────────┐
│ 底层通信控制(Controller) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Link Layer (LL) │ │
│ │ (链路层:连接管理、广播、跳频、重传控制) │ │
│ ├─────────────────────────────────────────────────────┤ │
│ │ Physical Layer (PHY) │ │
│ │ (物理层:无线信号调制、收发、信道定义) │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
BLE蓝牙体系架构Markdown结构图(带详细说明)
纯Markdown文本绘制,清晰呈现层级关系,补充各层核心作用,重点完善Controller层说明:
# BLE 蓝牙低功耗体系架构(完整标注版)
┌───────────────────────────────────────────────────────────┐
│ Host(主机层)—— 应用逻辑核心,负责协议与应用实现 │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ GATT │ │ GAP │ ← 定义服务/特征、设备交互角色 │
│ │ (属性配置) │ │(通用访问) │ │
│ ├─────────────┤ ├─────────────┤ │
│ │ ATT │ │ SMP │ ← 数据交互模型、设备配对加密 │
│ │ (属性协议) │ │(安全管理) │ │
│ └─────────────┘ └─────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ L2CAP │ │
│ │ (逻辑链路控制与适配) —— 数据分发、分段重组 │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
▲
│ 命令/数据/事件传输
┌─────────────────────────────────────────┐
│ HCI(主机控制器接口)—— Host与Controller的桥梁 │
└─────────────────────────────────────────┘
▲
│ 底层信号与连接控制
┌───────────────────────────────────────────────────────────┐
│ Controller(控制器层)—— 最下层的硬件执行层 │
│ 核心职责:负责连接管理、无线信号收发和数据传输的物理实现 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Link Layer (LL) │ │
│ │ (链路层) —— 建立/维护/断开连接、跳频、重传控制 │ │
│ ├─────────────────────────────────────────────────────┤ │
│ │ Physical Layer (PHY) │ │
│ │ (物理层) —— 2.4GHz频段、信号调制/收发、信道定义 │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────┘
# 补充说明
1. Controller层(硬件执行层):作为整个体系的最底层,直接对接硬件,分为LL和PHY两个子层,是蓝牙通信的物理基础和连接核心
2. Link Layer (LL):直接管理PHY层,核心负责连接的全生命周期(广播、扫描、连接建立/维护/断开),以及跳频、数据包重传等控制
3. Physical Layer (PHY):定义蓝牙通信的物理参数,包括工作频段、调制方式、发射功率等,实现数字数据与电磁波的相互转换
紧凑简化版(保留核心标注,适配快速查看):
┌─────────────────────────────────────────┐
│ Host(主机)—— 应用与协议层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │
│ │ GATT/ATT│ │ GAP/SMP │ │ L2CAP │ │
│ │ 服务/数据│ │ 安全/角色│ │ 数据分发 │ │
│ └─────────┘ └─────────┘ └─────────────┘ │
└─────────────────────────────────────────┘
▲
│
┌───────────────────────┐
│ HCI —— 主机与控制器桥梁 │
└───────────────────────┘
▲
│
┌─────────────────────────────────────────┐
│ Controller(控制器)—— 硬件执行层 │
│ 核心:连接管理、无线收发、物理实现 │
│ ┌─────────────────────────────────────┐ │
│ │ Link Layer (LL) —— 连接控制、跳频 │ │
│ ├─────────────────────────────────────┤ │
│ │ Physical Layer (PHY) —— 信号收发 │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
(注:文档部分内容可能由 AI 生成)
更多推荐



所有评论(0)