蓝牙协议入门(三)中介层协议

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_BoundaryBC = Broadcast Flag

SCO 数据分组

2.逻辑链路控制与适配协议 L2CAP

L2CAP 位于基带之上,将基带的数据分组转换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。L2CAP 只支持 ACL 数据传输,不支持 SCO 数据。L2CAP 本身不提供加强信道可靠性和保证数据完整性的机制,其信道的可靠性依靠基带提供。

L2CAP 主要实现以下功能:

  1. 协议复用:底层传输协议没有提供对高层协议的复用机制,因而 L2CAP 支持高层协议复用,L2CAP 层可以区分其上的 SDP、RFCOMM、TCS 等。
  2. 分段重组:L2CAP层帮助实现基带的短 PDU 和高层的长 PDU 相互传输,L2CAP 本身不完成任何 PDU 的分段重组,具体的分段重组有低层和高层来完成。
  3. 服务质量 Qualityof Serivce 信息的交换:蓝牙建立连接的过程中,L2CAP允许交互蓝牙所期望的服务质量,建立完成后,通过监视资源的使用情况,来保证服务质量。
  4. 组抽象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 带头校验的未编号信息命令和响应

X.参考连接

蓝牙核心技术概述(四):蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)