蓝牙协议栈之HCI层(chapter 1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/madannasf/article/details/102738510

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 00100000 00000110 00000000 00000010 00000000 01000001 00000001 00000000 00000001 00000001 00000011 00001100 00000000

Command:00000001(0x01)

Opcode: 00000011 00001100(ogf:000011(0x03),ocf:0000000011(0x03))根据ogf和ocf查表可知为复位指令

2.1.2、设备接收回应如下、

00000100 00001110 00000100 00000001 00000011 00001100 00000000

扫描二维码关注公众号,回复: 7605746 查看本文章

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(零为成功,其他为失败,具体参考失败码)

猜你喜欢

转载自blog.csdn.net/madannasf/article/details/102738510