HCI简介
HCI(host communication interface)主机通讯端口,它主要为上层提供了一个统一的通讯端口,其主要用于传输命令和时间。大概关系图如下、

讯享网
host(用户app)对蓝牙的控制都是发送通讯协议中定义的命令来控制蓝牙进入到响应的工作模式,蓝牙处理之后会以事件的方式返回通知主机。
一、协议数据格式
HCI传输的数据格式有4种类型,分别为命令,acl,sco和事件,在协议数据中对应的type分别为、
command(0x01)
acl(0x02)
sco(0x03)
event(0x04)
1.1、command pocket
command pocket的数据格式如下,大家也可以阅读蓝牙的协议栈文档去了解。

opcode为命令操作吗,由ocf与ogf组成。
1.2、ACL Data pocket
acl主要用于主从设备之间数据的异步交换,比如音乐播放,我们的l2cap就是使用的是该模式。数据包的协议数据格式如下、

handle表示当前通信通道的句柄,PB Flag(packet boundary flag)表示包的可接收到的层。

1.3、SCO Data Packet
SCO主要用于ble与host之间同步数据的传输,数据包格式如下、

handle如上描述、PSF如下、

1.4、Event Packet
event主要是be设备在有事件发生时通知主机,格式如下。

二、命令与时间介绍
在蓝牙的协议栈中,命令和事件太多,这里我们只列举一下几个常用的command与事件
2.1、复位命令
2.1.1、host发送部分:
00000010 00000010 00 00000110 00000000 00000010 00000000 0 00000001 00000000 00000001 00000001 00000011 00001100 00000000
Command:00000001(0x01)

Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))根据ogf和ocf查表可知为复位指令
2.1.2、设备接收回应如下、
Event:00000100(0x04)
Event code:00001110(0x0e,命令完成指令)
Paramter total length:00000100 (参数长度为4)
Num hci command packet:00000001(表明controller还可以接收1个host的指令)
Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))指明是对reset指令的回复,这个值必须与发送部分相同
Status:00000000(零为成功,其他为失败,具体参考失败码)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18508.html