四种数据类型
指令分组,事件分组,数据分组。
其中数据分组又分为acl(异步无连接)数据分组和sco(同步面向连接)数据分组。
指令分组只从从主机发送到主机控制器。
事件分组只从主机控制器发送到主机,用以说明指令分组执行的情况。
数据分组在主机和主机控制器之间相互传输。
-
Command (0x1) 指令分组
协议格式:
-
ACL Data (0x2) 数据分组
协议格式:
-
SCO Data (0x3)
协议格式
- Event (0x4) 事件分组
协议格式:
HCI Command & Events
参考 Core_v5.2 Vol4 - Part E - P1929
HCI command 占用两个bits。小端模式(低位在左,高位在右)。OCF + OGF,其中 OCF 占用10位 + OGF 占用6位。
0x3F 是保留给供应商调试使用。
常用指令操作组 组属性值
Command | OGF | 说明 |
---|---|---|
Link Control | 0x1 | 链路控制 |
Link Policy | 0x2 | 链路策略 |
Controller & Baseband | 0x3 | 主机控制器和基带 |
Infomational Parameters | 0x4 | 属性参数 |
Status parameters | 0x5 | 状态参数 |
Testing | 0x6 | 测试 |
蓝牙主机控制器通信流程
- 1 蓝牙模块自身初始化
- 2 流量控制
- 3 查询
- 4 建立连接
- 5 进行数据通讯
- 6 断开连接
蓝牙模块自身初始化
Reset 指令: 属于 Controller & Baseband 操作组 (OGF:0x03)
示例:
- Tx payload: 00000001 00000011 00001100 00000000
- Rx payload: 00000100 00001110 00000100 00000001 00000011 00001100 00000000
代码:
response = AWAIT_COMMAND(packet_factory->make_reset());
流量控制
Read Buffer Size
属于 Infomational params (OGF:0x04)
该指令返回的参数
ACL_Data_Packet_Length & Synchronous_Data_Packet_Length
主机发往主机控制器 ACL & SCO 数据分组最大的长度。
Total_Num_Acl_Data_Packets & Total_Num_Synchronous_Data_Packets 决定了主机控制器能接受ACL & SCO 数据总数组。
- Tx payload : 00000001 00000101 00010000 00000000
- Rx payload: 00000100 00001110 00001011 00000001 00000101 00010000 00000000 00000000 00000100 00111100 00000111 00000000 00001000 00000000
Host Buffer Size command
Controller&Baseband 分组 (OGF : 0x03)
通知主机 控制器发往主机的ACL & SCO 数据指令最大尺寸,同时通知主机控制器在主机数据缓存区中能够存储的ACL & SCO 数据指令的数量。