1.主机控制接口协议 HCI
常用蓝牙控制器接口数据分组分为三类,分别为:
- 指令分组(0x01)
- 事件分组(0x04)
- 数据分组(ACL:0x02,SCO:0x03)
全部分组类型列举如下:
HCI 分组类型 | RS232分组指示器 |
---|---|
HCI指令分组 | 0x01 |
HCI ACL数据分组 | 0x02 |
HCI SCO数据分组 | 0x03 |
HCI事件分组 | 0x04 |
HCI错误消息分组 | 0x05 |
HCI协商分组 | 0x06 |
1.1.指令分组
如:Accpet Connection Request
- Opcode 为:0x0409
- 参数长度为: 07
- 参数中蓝牙地址为:00:0d:fd:5f:16:9f
- 角色为:从设备 0x01
则大端数据模式指令为:09 04 07 9f 16 5f fd 0d 00 01
1.2.事件分组
如:Accpet Connection Request
- Opcode :0x0409
- 状态: 0x00
- 总长度: 4 字节
- 命令状态:0x0f
则分组为: 04 0f 04 00 01 09 04
1.3.数据分组
ACL 数据分组(注:PB = Packet_Boundary ; BC = Broadcast Flag)
SCO 数据分组
2.逻辑链路控制与适配协议 L2CAP
L2CAP 位于基带之上,将基带的数据分组转换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。L2CAP 只支持 ACL 数据传输,不支持 SCO 数据。L2CAP 本身不提供加强信道可靠性和保证数据完整性的机制,其信道的可靠性依靠基带提供。
L2CAP 主要实现以下功能:
- 协议复用:底层传输协议没有提供对高层协议的复用机制,因而 L2CAP 支持高层协议复用,L2CAP 层可以区分其上的 SDP、RFCOMM、TCS 等。
- 分段重组:L2CAP层帮助实现基带的短 PDU 和高层的长 PDU 相互传输,L2CAP 本身不完成任何 PDU 的分段重组,具体的分段重组有低层和高层来完成。
- 服务质量 Qualityof Serivce 信息的交换:蓝牙建立连接的过程中,L2CAP允许交互蓝牙所期望的服务质量,建立完成后,通过监视资源的使用情况,来保证服务质量。
- 组抽象:L2CAP 忽略地址组概念,他只关心数据。
L2CAP 信道有三种类型:
- 面向连接信道:Connection-Oriented CO,用于两个设备之间的数据通信。
- 无连接信道:Connection-LessCL,用来向一组设备广播方式传输数据。CID为固定值:0x0002。
- 信令信道:Signaling,用于创建 CO 通道,可以通过协商改变 CO 信道的特性。
协议数据单元:
3.服务发现协议 SDP
SDP两种服务发现模式:
- 服务搜索:查询具有特定服务属性的服务;
- 服务浏览:简单的浏览全部可用服务。
其 PDU (协议数据单元)格式为:
不同的 PDU ID 的意义为:
Value | Parameter Descirption | |
---|---|---|
0x00 | Reserved | 保留 |
0x01 | SDP_ErrorResponse | 错误响应 |
0x02 | SDP_ServiceSearchRequest | 服务搜索请求 |
0x03 | SDP_ServiceSearchResponse | 服务搜索响应 |
0x04 | SDP_ServiceAttributeRequest | 服务属性请求 |
0x05 | SDP_ServiceAttributeResponse | 服务属性响应 |
0x06 | SDP_ServiceSearchAttributeRequest | 服务搜索属性请求 |
0x07 | SDP_ServiceSearchAttributeResponse | 服务搜索属性响应 |
0x08-0xff | Reserved | 保留 |
4.串口仿真协议 RFCOMM
RFCOMM 是为建立在串口之上的传统应用提供环境接口,使他们可以做比较少协议改动就可以在蓝牙无线通信无线链路上工作。多路串口仿真是 RFCOMM 的重要功能,通过多路复用器(multiplexer),一条 L2CAP 链路可以同时 多个串行应用。
RFCOMM 两个蓝牙设备之间可以支持多达60多路仿真串口。RFCOMM 帧类型如下:
SABM | 异步平衡模式设置指令 |
---|---|
UA | 未加编号的确认响应 |
DM | 断开连接模式响应 |
DISC | 断开连接指令 |
UIH | 带头校验的未编号信息命令和响应 |