[分享] 蓝牙协议规范(HCI、L2CAP、SDP、RFOCMM)

freebsder   2019-4-27 14:12 楼主
一、主机控制接口协议 HCI
蓝牙主机-主机控模型
蓝牙软件协议栈堆的数据传输过程:
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
(2)、事件分组
如上图:
Opcode :0x0409
状态: 0x00
总长度: 4字节
命令状态:0x0f
(3)、数据分组
ACL 数据分组
1.png 1.png
注:PB Packet_Boundary BC Broadcast Flag
SCO 数据分组
2.png
(4)、RS232分组指示器:
3.png
2、HCI控制命令
(1)、链路控制指令
4.png
5.png
(2)、链路策略指令
6.png
(3)、主机控制器与基带指令
1.png
2.png
3.png
(4)、信息指令参数
4.png
(5)、状态指令参数
5.png
(6)、测试指令
6.png 6.png
(7)、错误代码
7.png
二、逻辑链路控制与适配协议 L2CAP
L2CAP位于基带之上,将基带的数据分组转换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。L2CAP只支持ACL数据传输,不支持SCO数据。
L2CAP本身不提供加强信道可靠性和保证数据完整性的机制,其信道的可靠性依靠基带提供。
1、协议复用:底层传输协议没有提供对高层协议的复用机制,因而L2CAP支持高层协议复用,L2CAP层可以区分其上的SDP、RFCOMM、TCS等。
2、分段重组:L2CAP层帮助实现基带的短PDU和高层的长PDU相互传输,L2CAP本身不完成任何PDU的分段重组,具体的分段重组有低层和高层来完成。
3、服务质量 QualityofSerivce 信息的交换:蓝牙建立连接的过程中,L2CAP允许交互蓝牙所期望的服务质量,建立完成后,通过监视资源的使用情况,来保证服务质量。
4、组抽象:L2CAP忽略地址组概念,他只关心数据。
L2CAP信道有三种类型:
A、面向连接信道:Connection-OrientedCO,用于两个设备之间的数据通信。
B、无连接信道:Connection-LessCL,用来向一组设备广播方式传输数据。CID为固定值:0x0002。
C、信令信道:Signaling,用于创建CO通道,可以通过协商改变CO信道的特性。
CL信道的L2CAP_PDU
8.png
PSM为 协议/服务复用器Protocol/Service Multiplexer,一般为SDP、RFCOMM、TCS等中介协议复用。小于0x1000的值,0x0001对应SDP,0x0003对应RFCOMM、0x0005对应TCS。
(1)、蓝牙逻辑链路控制与适配协议信令:
L2CAP的信令通道的CID为0x0001
信令指令分组:
9.png
信令指令格式:
10.png
如上图所示,一条L2CAP信令,1为L2CAP分组头,2为信令指令头,3为数据部分。
L2CAP:
Role:Master
Address:11
PDULength: 6 //指令的长度,值为06 00
ChannelID: 0x0001 (Signaling)//L2CAP的信令通道,值为01 00
Code:Information request//信息请求,值为0a
Identifier:1//标识符,值为01
CommandLength: 2//命令长度,值为02 00
InfoType:Extended features supported//02 00
所以这条指令完整的为:
06 00 01 00 0a 01 02 00 02 00
信令的其他操作如下:
L2CAP信令指令码:
11.png
1)、连接请求Connection_RequestCode=0x02
12.png
例如:SDP 连接请求
如上红框所示:
13.png
2)、连接相应Connection_ResponseCode=0x03
14.png
例如:SDP请求响应
如上面红框所示:
15.png
0x03
3
8
0x0040
0x0040
0x0000
(2)、MTUMAXIMUMTRANSMISSION UNIT最大传输单元
MTU最大传输单元,L2CAP应用必须支持最小为48字节的MTU,默认值为672
(3)、QoS 服务质量
三、服务发现协议 SDP
SDP两种服务发现模式:
1)、服务搜索:查询具有特定服务属性的服务;
2)、服务浏览:简单的浏览全部可用服务。
(1)、PDU 格式:(协议数据单元)
PDU ID(1byte)
Transaction ID(2byte)
参数长度(2byte)
参数1
……
参数N
Header
不同PDU ID实现SDP的不同功能,概述如下表格:
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
保留
(2)、服务记录表
SDP的服务记录表对每一个服务进行描述,每条记录包含服务句柄、一组服务属性:
Service Record Attributes:服务记录;
Service Record Handle 服务句柄;
Attribute 服务属性;
四、串口仿真协议 RFCOMM
为建立在串口之上的传统应用提供环境接口,使他们可以做比较少协议改动就可以在蓝牙无线通信无线链路上工作。多路串口仿真是RFCOMM的重要功能,通过多路复用器(multiplexer),一条L2CAP链路可以同时 多个串行应用。
两台设备间的串口仿真:
RFCOMM 两个蓝牙设备之间可以支持多达60多路仿真串口。
RFCOMM帧类型如下:
SABM
异步平衡模式设置指令
UA
未加编号的确认响应
DM
断开连接模式响应
DISC
断开连接指令
UIH
带头校验的未编号信息命令和响应
本帖最后由 freebsder 于 2019-4-27 14:28 编辑
默认摸鱼,再摸鱼。2022、9、28

回复评论 (1)

谢谢分享!
服务器大全
点赞  2019-4-28 08:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复