BLE 协议栈整体认识:从 Host、Controller 到 Radio
前言
BLE,全称是 Bluetooth Low Energy,也就是低功耗蓝牙。
BLE 并不是一个单一协议,而是一套分层的协议体系。平时在 BLE 开发中经常接触到的广播、扫描、连接、GATT 通讯、HCI Command、Link Layer、PHY 等内容,其实都属于 BLE 协议栈中的不同层次。
从整体架构来看,BLE 协议栈大致可以分为三大部分:
| 层级 | 说明 |
|---|---|
| Host | 协议栈上半部分,更接近应用逻辑 |
| Controller | 协议栈下半部分,更接近底层链路控制 |
| Radio | 无线射频部分,负责真正的无线收发 |
其中,Host 和 Controller 之间通过 HCI,也就是 Host Controller Interface 进行通信。
一、BLE 协议栈整体结构
BLE 协议栈整体结构可以简单表示为:
Host
├── Generic Access Profile(GAP)
├── Generic Attribute Profile(GATT)
├── Attribute Protocol(ATT)
├── Security Manager Protocol(SMP)
└── Logical Link Control & Adaptation Protocol(L2CAP)
Host Controller Interface(HCI)
Controller
├── Isochronous Adaptation Layer(ISOAL)
├── Link Layer
├── Channel Sounding
└── Physical Layer
Radio
BLE 协议栈中的每一层都有自己的职责。
简单来说:
| 部分 | 主要职责 |
|---|---|
| Host | 负责设备发现、连接管理、数据模型、安全管理等 |
| HCI | 负责 Host 和 Controller 之间的命令、事件、数据交互 |
| Controller | 负责底层链路状态、空口数据包、连接事件、PHY 等 |
| Radio | 负责无线信号的实际发送和接收 |
上层更接近应用逻辑和数据模型,下层更接近无线链路和射频传输。
二、Host
Host 可以理解为 BLE 协议栈的上半部分,主要负责协议逻辑、设备管理、安全管理以及数据交互模型。
在 BLE 协议栈中,Host 通常包含以下几个重要部分:
| 模块 | 全称 | 主要作用 |
|---|---|---|
| GAP | Generic Access Profile | 负责广播、扫描、连接和角色管理 |
| GATT | Generic Attribute Profile | 负责服务、特征、描述符等数据模型 |
| ATT | Attribute Protocol | 负责属性访问的具体协议 |
| SMP | Security Manager Protocol | 负责配对、绑定、加密和密钥管理 |
| L2CAP | Logical Link Control and Adaptation Protocol | 负责逻辑通道和数据适配 |
这些内容也是 BLE 应用开发中最容易接触到的部分。
例如,在 iOS 或 Android 蓝牙开发中,经常会遇到:
-
扫描设备
-
连接设备
-
发现服务
-
发现特征
-
读特征
-
写特征
-
开启 Notify
-
开启 Indicate
-
MTU
-
配对
-
绑定
这些功能大多都和 Host 侧协议有关。
三、GAP:Generic Access Profile
GAP 的全称是 Generic Access Profile,中文通常可以理解为 通用访问配置文件。
GAP 主要负责 BLE 设备如何被发现、如何建立连接,以及设备在通信过程中的角色关系。
可以简单理解为:
GAP 关注的是设备如何被发现、如何被连接,以及设备在连接前后扮演什么角色。
在 BLE 中,经常会看到这些角色或状态:
| 角色 / 状态 | 说明 |
|---|---|
| Advertiser | 广播者,发送广播包 |
| Scanner | 扫描者,扫描广播包 |
| Initiator | 发起者,发起连接 |
| Central | 中心设备,通常主动扫描和连接 |
| Peripheral | 外围设备,通常发送广播并被连接 |
| Broadcaster | 只广播,不建立连接 |
| Observer | 只扫描,不建立连接 |
常见的 BLE 广播、扫描和连接流程,都属于 GAP 相关内容。
例如:
Peripheral 发送广播
↓
Central 进行扫描
↓
Central 扫描到 Peripheral
↓
Central 发起连接
↓
Peripheral 接受连接
↓
双方进入连接状态
GAP 中常见的主题包括:
-
广播 Advertising
-
扫描 Scanning
-
连接 Connection
-
设备地址 Address
-
广播类型 Advertising Type
-
可发现性 Discoverability
-
可连接性 Connectability
-
连接参数 Connection Parameters
在 HCI Command 中,很多 LE Controller Commands 也是围绕 GAP 行为进行配置的,例如:
| HCI Command | 作用 |
|---|---|
| LE Set Advertising Parameters | 设置广播参数 |
| LE Set Advertising Data | 设置广播数据 |
| LE Set Scan Response Data | 设置扫描响应数据 |
| LE Set Advertising Enable | 使能或关闭广播 |
| LE Set Scan Parameters | 设置扫描参数 |
| LE Set Scan Enable | 使能或关闭扫描 |
| LE Create Connection | 创建 BLE 连接 |
这些命令本身属于 HCI 层接口,但它们配置的是广播、扫描、连接等 GAP 相关行为。
四、GATT:Generic Attribute Profile
GATT 的全称是 Generic Attribute Profile,中文通常可以理解为 通用属性配置文件。
GATT 主要用于定义 BLE 连接建立之后的数据组织方式。
在 BLE 通讯中,设备之间的数据通常不是随意发送的,而是被组织成:
Service
└── Characteristic
└── Descriptor
也就是:
服务
└── 特征
└── 描述符
GATT 关注的是:
-
连接建立之后,数据如何组织
-
数据通过哪些服务暴露
-
数据通过哪些特征读写
-
哪些特征支持 Notify 或 Indicate
一个常见的 BLE 透传模块,可能会有类似这样的 GATT 结构:
UART Service
├── TX Characteristic:设备通过 Notify 向手机发送数据
└── RX Characteristic:手机通过 Write 向设备发送数据
在 App 开发中,经常看到的这些操作,都属于 GATT 相关操作:
| GATT 操作 | 说明 |
|---|---|
| Discover Services | 发现服务 |
| Discover Characteristics | 发现特征 |
| Read Characteristic | 读取特征值 |
| Write Characteristic | 写入特征值 |
| Notify Characteristic | 接收通知 |
| Indicate Characteristic | 接收指示 |
可以简单理解为:
GATT 是 BLE 连接后的数据模型层。
五、ATT:Attribute Protocol
ATT 的全称是 Attribute Protocol,中文通常可以理解为 属性协议。
ATT 是 GATT 的基础协议。
GATT 中的 Service、Characteristic、Descriptor,最终都是通过 ATT 中的 Attribute 来表示的。
一个 Attribute 通常包含:
| 字段 | 说明 |
|---|---|
| Handle | 属性句柄 |
| Type / UUID | 属性类型 |
| Value | 属性值 |
| Permissions | 属性权限 |
在 GATT 层看到的是 Service 和 Characteristic,但在 ATT 层看到的则是一个个 Attribute。
例如,一个 Characteristic Value 在 ATT 层会对应一个 Attribute Handle。读写 Characteristic,本质上就是对某个 Attribute Handle 进行读写。
常见的 ATT 操作包括:
| ATT 操作 | 说明 |
|---|---|
| ATT Read Request | 读请求 |
| ATT Read Response | 读响应 |
| ATT Write Request | 写请求 |
| ATT Write Response | 写响应 |
| ATT Write Command | 无响应写命令 |
| ATT Handle Value Notification | 通知 |
| ATT Handle Value Indication | 指示 |
| ATT Handle Value Confirmation | 指示确认 |
GATT 和 ATT 的关系可以这样理解:
GATT 定义数据模型
ATT 负责具体的属性访问协议
例如,App 中的 Write Characteristic,底层可能对应 ATT Write Request 或 ATT Write Command。
App 中的 Notify,底层对应 ATT Handle Value Notification。
所以,GATT 更偏向上层的数据组织方式,ATT 更偏向底层具体的数据访问协议。
六、SMP:Security Manager Protocol
SMP 的全称是 Security Manager Protocol,中文通常可以理解为 安全管理协议。
SMP 主要负责 BLE 中的安全相关流程,例如:
-
配对 Pairing
-
绑定 Bonding
-
加密 Encryption
-
密钥分发 Key Distribution
-
身份解析 Identity Resolving
-
隐私地址 Privacy Address
当 BLE 设备需要建立加密连接,或者某些 Attribute 需要加密后才能访问时,就可能涉及 SMP。
例如:
-
读取某个特征时,系统弹出配对窗口
-
连接建立后进行加密
-
设备保存绑定信息
-
通过 IRK 解析 Resolvable Private Address
这些都和 SMP 有关。
SMP 在普通 BLE 透传设备中可能不明显,但在一些对安全性要求较高的设备中非常重要,例如:
| 设备类型 | SMP 相关性 |
|---|---|
| 蓝牙门锁 | 通常需要配对、绑定、加密 |
| 医疗设备 | 通常需要数据安全 |
| 支付设备 | 通常需要身份认证和加密 |
| 身份认证设备 | 通常需要密钥管理 |
| 需要绑定的智能硬件 | 通常需要保存长期密钥 |
可以简单理解为:
SMP 负责 BLE 的配对、绑定、加密和密钥管理。
七、L2CAP:Logical Link Control and Adaptation Protocol
L2CAP 的全称是 Logical Link Control and Adaptation Protocol,中文通常可以理解为 逻辑链路控制与适配协议。
L2CAP 位于 ATT、SMP 等协议之下,HCI 之上。
它主要负责为上层协议提供逻辑通道和数据适配能力。
在 BLE 中,ATT 和 SMP 并不是直接运行在 Link Layer 上,而是通过 L2CAP 承载。
可以简单表示为:
ATT → L2CAP
SMP → L2CAP
L2CAP 使用 CID,也就是 Channel Identifier,来区分不同的逻辑通道。
例如:
| 协议 | L2CAP 承载方式 |
|---|---|
| ATT | 使用固定 L2CAP Channel |
| SMP | 使用固定 L2CAP Channel |
| L2CAP CoC | 使用动态分配的逻辑通道 |
同一条 BLE 连接上,可以承载不同类型的数据:
BLE Connection
├── ATT Data
├── SMP Data
└── L2CAP Credit Based Channel Data
L2CAP 相关的内容还包括:
-
MTU
-
MPS
-
分包
-
重组
-
Credit Based Flow Control
-
L2CAP CoC
在 BLE GATT 通讯中,经常提到的 ATT MTU,也和 L2CAP 有密切关系。
八、HCI:Host Controller Interface
HCI 的全称是 Host Controller Interface,中文通常可以理解为 主机控制器接口。
HCI 是 Host 和 Controller 之间的接口边界。
从协议栈结构上看,HCI 位于 Host 和 Controller 之间:
Host
↓
HCI
↓
Controller
Host 通过 HCI 向 Controller 发送命令,Controller 也通过 HCI 向 Host 上报事件和数据。
HCI 中常见的数据类型包括:
| HCI 数据类型 | 说明 |
|---|---|
| HCI Command | Host 发送给 Controller 的命令 |
| HCI Event | Controller 上报给 Host 的事件 |
| HCI ACL Data | 连接建立后的异步数据 |
| HCI ISO Data | 等时数据,常用于 LE Audio 等场景 |
其中,BLE 开发中最常见的是:
-
HCI Command
-
HCI Event
-
HCI ACL Data
1. HCI Command
HCI Command 是 Host 发送给 Controller 的命令。
例如:
| HCI Command | 作用 |
|---|---|
| LE Set Advertising Parameters | 设置广播参数 |
| LE Set Advertising Data | 设置广播数据 |
| LE Set Scan Response Data | 设置扫描响应数据 |
| LE Set Advertising Enable | 使能或关闭广播 |
| LE Set Scan Parameters | 设置扫描参数 |
| LE Set Scan Enable | 使能或关闭扫描 |
| LE Create Connection | 发起连接 |
这些命令用于告诉 Controller 执行某些 BLE 行为,例如配置广播、开启扫描、发起连接等。
2. HCI Event
HCI Event 是 Controller 上报给 Host 的事件。
例如:
| HCI Event | 说明 |
|---|---|
| Command Complete Event | 命令执行完成 |
| Command Status Event | 命令状态返回 |
| LE Advertising Report Event | 扫描到广播设备 |
| LE Connection Complete Event | BLE 连接建立完成 |
| Disconnection Complete Event | 连接断开完成 |
3. HCI ACL Data
HCI ACL Data 主要用于连接建立之后的数据传输。
BLE GATT / ATT 通讯数据,通常会通过 HCI ACL Data 在 Host 和 Controller 之间传递。
例如,一个 Characteristic Write 操作,从 Host 侧到 Controller 侧,可能会经历:
GATT Write
↓
ATT Write Request / Command
↓
L2CAP
↓
HCI ACL Data
↓
Controller
↓
Link Layer
↓
PHY / Radio
所以在 bt snoop 日志中,经常会看到:
-
HCI Command
-
HCI Event
-
ACL Data
这些日志可以帮助分析 BLE 扫描、连接、GATT 通讯等流程。
九、Controller
Controller 可以理解为 BLE 协议栈的下半部分,主要负责底层链路控制和物理传输相关工作。
在 BLE 协议栈中,Controller 通常包含:
| 模块 | 说明 |
|---|---|
| Link Layer | 链路层,负责 BLE 空口链路控制 |
| Physical Layer | 物理层,负责 BLE 物理传输方式 |
| ISOAL | 等时适配层,主要用于 LE Audio 等场景 |
| Channel Sounding | 面向测距和定位增强能力 |
Controller 负责的内容更接近无线链路本身,例如:
-
广播包什么时候发送
-
扫描窗口什么时候打开
-
连接请求什么时候发送
-
连接事件如何调度
-
数据信道如何跳频
-
空口 PDU 如何组织
-
ACK 和重传如何处理
-
链路加密如何执行
-
PHY 使用 1M、2M 还是 Coded
Host 通过 HCI 配置和控制 Controller,Controller 负责真正执行底层 BLE 链路行为。
十、Link Layer
Link Layer 是 Controller 中非常核心的一层。
它负责 BLE 空口链路的控制逻辑。
BLE 中的广播、扫描、发起连接、连接状态维护、连接事件调度等,都和 Link Layer 有关。
Link Layer 中常见的状态包括:
| 状态 | 说明 |
|---|---|
| Standby State | 空闲状态 |
| Advertising State | 广播状态 |
| Scanning State | 扫描状态 |
| Initiating State | 发起连接状态 |
| Connection State | 连接状态 |
这些状态描述了 BLE Controller 当前在空口链路中的工作模式。
例如:
-
Advertising State:设备正在发送广播
-
Scanning State:设备正在扫描广播
-
Initiating State:设备正在发起连接
-
Connection State:设备已经处于连接状态
-
Standby State:设备暂时没有进行广播、扫描或连接
Link Layer 还定义了 BLE 空口中的 PDU 类型。
在 Legacy Advertising 中,常见的 Advertising Channel PDU 包括:
| PDU | 说明 |
|---|---|
| ADV_IND | 可连接、可扫描的非定向广播 |
| ADV_DIRECT_IND | 可连接的定向广播 |
| ADV_NONCONN_IND | 不可连接、不可扫描的非定向广播 |
| ADV_SCAN_IND | 可扫描、不可连接的非定向广播 |
| SCAN_REQ | 扫描请求 |
| SCAN_RSP | 扫描响应 |
| CONNECT_IND | 连接请求 |
连接建立之后,双方会进入 Connection State,然后通过数据信道传输 Data Channel PDU。
Link Layer 还负责很多底层机制,例如:
-
跳频
-
连接事件
-
数据确认
-
重传
-
链路加密
-
CRC
-
Filter Accept List
-
地址过滤
-
连接参数更新
可以简单理解为:
Link Layer 负责 BLE 空口链路的具体控制。
十一、Physical Layer
Physical Layer 也就是物理层,通常简称 PHY。
PHY 层负责 BLE 无线传输的物理方式。
常见的 BLE PHY 包括:
| PHY | 说明 |
|---|---|
| LE 1M PHY | BLE 最基础的物理层,Legacy Advertising 使用该 PHY |
| LE 2M PHY | 传输速率更高,适合更高吞吐场景 |
| LE Coded PHY | 传输距离更远,但速率更低 |
1. LE 1M PHY
LE 1M PHY 是 BLE 最基础的物理层。
BLE Legacy Advertising 使用的就是 LE 1M PHY。
2. LE 2M PHY
LE 2M PHY 的传输速率更高,适合需要更高数据吞吐能力的场景。
3. LE Coded PHY
LE Coded PHY 通过编码方式增强传输距离,但传输速率会降低。
它适合远距离、低速率的通信场景。
PHY 层关注的内容包括:
-
物理信道
-
调制方式
-
符号速率
-
发射功率
-
接收灵敏度
-
无线传输速率
一些常见概念也和 PHY / Radio 有关,例如:
-
RSSI
-
Tx Power
-
接收灵敏度
-
通信距离
-
抗干扰能力
十二、Radio
Radio 是 BLE 协议栈最底层的无线射频部分。
PHY 层定义如何进行物理传输,而 Radio 负责真正完成无线信号的发送和接收。
可以简单理解为:
PHY 规定怎么传
Radio 负责真正发射和接收无线信号
Radio 涉及的内容包括:
-
射频芯片
-
天线
-
发射功率
-
接收灵敏度
-
2.4GHz 频段
-
无线干扰
-
射频设计
BLE 工作在 2.4GHz ISM 频段。这个频段中还存在 Wi-Fi、经典蓝牙、无线鼠标键盘、其他 2.4GHz 设备等。
因此,BLE 通信质量不仅和协议栈有关,也和无线环境、天线设计、发射功率、接收灵敏度等因素有关。
例如,实际开发中常见的这些现象:
-
RSSI 波动
-
连接距离不稳定
-
偶发丢包
-
不同手机表现不同
-
不同环境通信效果不同
这些问题可能同时涉及 Host、Controller、PHY、Radio 以及外部无线环境。
十三、ISOAL
ISOAL 的全称是 Isochronous Adaptation Layer,中文通常可以理解为 等时适配层。
ISOAL 主要和 BLE Isochronous Channels 有关,也就是 BLE 等时通道。
等时通道主要用于对时间同步要求较高的数据传输场景,例如 LE Audio。
LE Audio 中的音频数据需要按照时间节奏持续传输,因此需要 BLE 提供等时通信能力。
ISOAL 的主要作用是对等时数据进行适配,使上层数据能够映射到底层等时通道中传输。
可以简单理解为:
ISOAL 主要服务于 BLE 等时数据传输,常见于 LE Audio 相关场景。
十四、LC3
图中左侧出现了 LC3。
LC3 的全称是 Low Complexity Communication Codec,是蓝牙 LE Audio 中使用的一种音频编解码器。
LC3 主要负责音频数据的编码和解码。
在 LE Audio 场景中,音频数据需要经过编码后,再通过 BLE 等时通道进行传输。接收端收到数据后,再通过 LC3 解码还原音频。
LC3 和普通的 BLE GATT 数据通讯不是同一类内容。
它更多属于 BLE Audio 相关体系。
可以简单理解为:
LC3 是 LE Audio 中使用的音频编解码器。
十五、Channel Sounding
Channel Sounding 是蓝牙中用于距离测量和定位增强的一类能力。
它通过无线信道相关信息,帮助设备之间进行更精确的距离估计。
传统 BLE 中常见的 RSSI 可以粗略反映信号强弱,但 RSSI 很容易受到环境、遮挡、天线方向、多径反射等因素影响,因此不适合直接作为精确距离依据。
Channel Sounding 则是为了提升蓝牙设备之间的测距能力。
可以简单理解为:
Channel Sounding 主要面向蓝牙测距和定位增强场景。
它和普通 BLE 广播、扫描、GATT 通讯不同,属于更偏定位能力的扩展方向。
十六、BLE 协议栈中的数据流
以一个常见的 BLE GATT 写数据流程为例,可以从上到下理解数据如何经过协议栈。
假设手机向 BLE 外设写入一个 Characteristic。
在应用层看到的是:
Write Characteristic
在 GATT 层,这是一次 GATT 写特征操作。
在 ATT 层,可能对应:
ATT Write Request
或者:
ATT Write Command
在 L2CAP 层,ATT 数据会被放入 L2CAP 包中。
在 HCI 层,Host 会通过 HCI ACL Data 将数据交给 Controller。
在 Link Layer 层,Controller 会把数据组织成 Data Channel PDU,并在连接事件中发送出去。
在 PHY 和 Radio 层,数据最终转换为无线信号,在 2.4GHz 频段发送给对端设备。
整体流程可以表示为:
App Write Characteristic
↓
GATT
↓
ATT
↓
L2CAP
↓
HCI ACL Data
↓
Link Layer
↓
Physical Layer
↓
Radio
↓
对端设备
反过来,外设通过 Notify 向手机发送数据时,数据也会沿着类似路径从底层往上返回:
Radio
↓
Physical Layer
↓
Link Layer
↓
HCI ACL Data
↓
L2CAP
↓
ATT
↓
GATT
↓
App 收到 Notify 回调
十七、BLE 广播扫描流程对应的协议栈位置
BLE 广播和扫描是连接建立之前非常重要的流程。
以 Legacy Advertising 为例,广播设备会在广播信道上发送广播包,扫描设备会监听广播信道并接收广播包。
这个过程涉及多个层次:
GAP
HCI
Link Layer
Physical Layer
Radio
在 Host 侧,GAP 负责定义广播和扫描行为。
Host 通过 HCI Command 配置 Controller,例如:
| HCI Command | 作用 |
|---|---|
| LE Set Advertising Parameters | 设置广播参数 |
| LE Set Advertising Data | 设置广播数据 |
| LE Set Advertising Enable | 使能广播 |
Controller 的 Link Layer 根据这些配置,在广播信道上发送 Advertising PDU。
最终由 PHY 和 Radio 完成无线发送。
扫描设备侧也是类似。
Host 通过 HCI Command 开启扫描:
| HCI Command | 作用 |
|---|---|
| LE Set Scan Parameters | 设置扫描参数 |
| LE Set Scan Enable | 使能扫描 |
Controller 在广播信道上接收广播包。
收到广播包后,Controller 通过 HCI Event 上报给 Host,例如:
LE Advertising Report Event
所以,广播扫描虽然在应用层看起来只是“开始广播”和“开始扫描”,但它实际涉及 Host、HCI、Controller、PHY 和 Radio 多个部分。
十八、BLE 连接和 GATT 通讯的关系
BLE 中需要区分两个阶段:
| 阶段 | 主要内容 |
|---|---|
| 连接前 | 广播、扫描、发起连接 |
| 连接后 | 服务发现、特征发现、读写特征、Notify、Indicate、MTU、配对加密 |
连接前主要关注:
-
广播
-
扫描
-
发起连接
这些内容主要和 GAP、HCI、Link Layer、PHY、Radio 有关。
连接后主要关注:
-
服务发现
-
特征发现
-
读写特征
-
Notify
-
Indicate
-
MTU
-
配对加密
这些内容主要和 GATT、ATT、SMP、L2CAP、HCI、Link Layer 有关。
可以简单表示为:
连接前:
GAP + HCI + Link Layer + PHY + Radio
连接后:
GATT + ATT + SMP + L2CAP + HCI + Link Layer + PHY + Radio
这也是 BLE 协议栈分层的意义:不同层负责不同阶段、不同粒度的工作。
十九、各层职责总结
BLE 协议栈中的各层职责可以总结如下:
| 层 / 模块 | 主要职责 |
|---|---|
| GAP | 负责设备发现、广播、扫描、连接和角色管理 |
| GATT | 负责连接后的服务、特征、描述符等数据模型 |
| ATT | 负责属性访问的具体协议,例如读、写、通知、指示 |
| SMP | 负责配对、绑定、加密、密钥分发和安全管理 |
| L2CAP | 负责逻辑通道、数据适配、分包与重组 |
| HCI | 负责 Host 和 Controller 之间的命令、事件和数据交互 |
| Link Layer | 负责 BLE 空口链路控制,例如广播、扫描、连接、连接事件、跳频和重传 |
| Physical Layer | 负责 BLE 的物理传输方式,例如 LE 1M、LE 2M、LE Coded PHY |
| Radio | 负责真正的无线射频发送和接收 |
| ISOAL | 负责等时数据适配,主要用于 LE Audio 等场景 |
| LC3 | 负责 LE Audio 中的音频编解码 |
| Channel Sounding | 负责蓝牙测距和定位增强相关能力 |
再简化一点:
GAP 管发现和连接
GATT 管数据模型
ATT 管属性读写
SMP 管安全
L2CAP 管逻辑通道
HCI 管 Host 和 Controller 通信
Link Layer 管空口链路
PHY 管物理传输
Radio 管无线收发
二十、总结
BLE 协议栈是一个分层结构。
从整体上看,它可以分为:
Host
HCI
Controller
Radio
Host 更接近应用逻辑,负责 GAP、GATT、ATT、SMP、L2CAP 等协议。
Controller 更接近底层链路,负责 Link Layer、Physical Layer、ISOAL、Channel Sounding 等内容。
Radio 则负责真正的无线射频收发。
在 BLE 应用开发中,经常接触到的扫描、广播、连接、服务发现、特征读写、Notify、MTU、配对等功能,并不是孤立存在的,而是分布在 BLE 协议栈的不同层次中。
例如:
| 功能 | 主要涉及的协议栈层次 |
|---|---|
| 广播和扫描 | GAP、HCI、Link Layer、PHY、Radio |
| GATT 通讯 | GATT、ATT、L2CAP、HCI、Link Layer、PHY、Radio |
| 配对和加密 | SMP、L2CAP、HCI、Link Layer |
| RSSI / Tx Power | PHY、Radio、无线环境 |
理解 BLE 协议栈的整体结构,可以帮助我们把广播、扫描、连接、GATT 通讯、HCI 日志、Link Layer PDU 等知识点放到同一张地图中。
这样在分析 BLE 问题时,就可以更清楚地判断问题大致属于哪个层次:
-
是 GAP 层的问题?
-
是 GATT / ATT 层的问题?
-
是 L2CAP 分包相关问题?
-
是 HCI 交互问题?
-
是 Link Layer 链路问题?
-
还是 PHY / Radio 无线环境问题?
BLE 协议栈的整体认识,本质上就是建立一张分层地图。
有了这张地图,再继续理解 BLE 广播、扫描、连接、GATT 通讯、HCI Command、Link Layer 等内容时,各个知识点之间的关系就会更加清晰。
更多推荐

所有评论(0)