1. BLE协议栈中的HCI层核心作用
在蓝牙低功耗(BLE)协议栈中,主机控制器接口(HCI)层扮演着至关重要的桥梁角色。作为连接蓝牙主机(Host)和控制器(Controller)的标准化接口,HCI层定义了双方通信的指令集和数据格式。这种分层设计使得不同厂商的主机和控制器可以灵活组合,大大提升了蓝牙设备的兼容性和可扩展性。
HCI层主要通过三种类型的逻辑通道进行通信:
- 命令通道(Command Channel):主机向控制器发送控制指令
- 事件通道(Event Channel):控制器向主机反馈状态和事件
- 数据通道(Data Channel):双向传输应用数据
其中,ACL(Asynchronous Connection-Less)数据包是HCI层传输应用数据的主要载体。与同步面向连接(SCO)数据包不同,ACL数据包具有以下特点:
- 异步传输:不需要严格的时序同步
- 无连接:不需要预先建立专用连接
- 可靠传输:支持错误检测和重传机制
2. HCI ACL数据包的结构解析
一个完整的HCI ACL数据包由包头(Header)和有效载荷(Payload)两部分组成。包头包含关键的元信息,而有效载荷则承载实际的用户数据。
2.1 包头字段详解
HCI ACL数据包头固定为4字节,各字段含义如下:
| 字段名 | 位宽 | 描述 |
|---|---|---|
| 连接句柄 | 12位 | 标识逻辑连接的唯一句柄,包含以下子字段: - 连接标识符(低8位) - 数据包边界标志(PB,bit 12-11) - 广播标志(BC,bit 13-14) |
| PB标志 | 2位 | 指示数据包边界类型: 00:继续片段 01:第一个非自动刷新片段 10:连续片段 11:完整L2CAP PDU |
| BC标志 | 2位 | 广播类型(通常为00,表示点对点通信) |
| 数据总长度 | 16位 | 有效载荷的字节长度(不含包头) |
注意:连接句柄的最高4位实际上包含了PB和BC标志,这在解析时需要特别注意位掩码操作。
2.2 有效载荷结构
有效载荷部分通常包含L2CAP层的协议数据单元(PDU)。L2CAP PDU又由头部和实际应用数据组
