【蓝牙专题】HCI协议解析

一、HCI介绍

        很多人接触蓝牙,是从HCI开始,因为HCI是主机控制接口协议(Host Controller Interface),蓝牙命令通过HCI来发送到Controller;

        如下图,HCI通过物理接口(USB、UART等)或虚拟接口,传递数据到Controller,Controller也通过同样的接口发送接收数据,这里注意到HCI层是在L2CAP层之下,LMP层之上;

HCI的主要作用就是透传,它不依赖于传输技术;

二、HCI协议格式

1、概述

HCI包含非常多的命令,它们完成时间是不确定的;所以大部分的HCI命令在命令完成后都会生成一个命令完成事件,命令发送端会开启一个定时器,若超时会上报错误;

所有HCI数据包均采用小端模式;

The Host Controller Transport Layer为HCI提供传输机制,使HCi可以传输HCI command,ACL data和同步数据,也可以接收事件,ACL data和同步数据;

2、句柄

HCI分为三种句柄,分别为Connection Handles, Logical Link Handles,and Physical Link Handles;

3、HCI数据包格式

这里只是以UART为例说明,其他类似

4、HCI packet type

5、HCI Command Packet

如下图所示

a、HCI command packet用于从host发送命令道contrlloer;

b、去掉包头可以包含255字节数据;

c、OpCode用来区别不同命令,它由两部分组成,OCF(10bits)和OGF(6bits),OpCode可以和下面的命令介绍联系起来;

6、HCI ACL Data Packets

如下图所示:

a、HCI ACL Data Packets用于host与contrller交换信息;

b、分为两种数据包,自动刷新包和非自动刷新包;

c、不同的数据包需要不同的handle类型,具体见下图说明;

d、关于PB Flag(the Packet_Boundary_Flag,bit4&bit5)和BC Flag(Broadcast_Flag,bit6&bit7),详细说明见下图;

7、HCI Synchronous Data Packets

数据格式如下图所示:

a、HCI同步数据包用来在host和contrller之间交换同步数据(SCO & eSCO);

8、HCI Event Packet

数据包格式如下图所示:

a、HCI事件包是Controller用来通知Host事件,出去包头最大可以为255字节;

三、HCI命令列表

下面只是命令列表(部分),具体请查看spec;

四、HCI FLOW CONTROL

我们来看下HCI的流控制;

HCI流控制是数据流,避免数据溢出;

有两种流控制类型:'packet-based' flow control 和'data-block-based' flow control;

五、实例

上面看了这么多协议,我们看一个实际的HCI包,这里以inquiry过程为例说明;

1、inquiry流程

参照http://blog.csdn.net/u010657219/article/details/42192481  

坤之前给我的设备可以显示HCI数据包;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值