首页 > 代码库 > Bluetooth HCI介绍

Bluetooth HCI介绍

HCI, 主机控制接口(Host Controller Interface), 是蓝牙协议栈的重要部分,
相应的规范位于Core Version 4.1的vol 2:Part E和vol 4

HCI提供了对控制器的统一接口,用来沟通Host和Control,如下图所示

在规范中对HCI分为两个部分介绍
~1 沟通Host和Control的接口(vol 2:Part E)
~2 HCI传输层(vol 4)

1. HCI功能

HCI可分为三个部分,前两个即对应于上面的~1
~ 位于Control中的HCI Firmware
~ 位于Host的HCI Driver
~ 位于Host 和Control的HCI 传输层

 LowerLayersBTStack

HCI Firmware实现了访问蓝牙设备的HCI Commands(Baseband/Link Manager Command, status/control/event registers)
HCI Driver接收并处理HCI events(传递给High Lawyer)
HCI 传输层在HCI Firmware和HCI Driver之间进行HCI Packet的传输, Spec V4.1中定义了四种: UART/USB/Secure Digital/Three-wire UART

2. HCI Packet

HCI Packet在Host和Control之间进行传输,通常有三种类型Command,Event,Data(ACL和SCO/eSCO)
其中Data是双向的, Command只能从Host发往Control, Event始终是Control发向Host的

1. HCI Command

HCI Command包格式如下图所示

command

 

(OCF=OpCode Command Field, OGF=OpCode Group Field)

OpCode                        用以区分不同的命令,OCF占用10bits(0x0000~0x03FF),OGF占用6个bits(0x00~0x3F)
Parameter_Total_length  参数的长度(以字节为单位)
Parameter 0~N              参数列表

Command分为六种类型(case OGF)
~0x01 链路控制命令(Link Control Commands)
~0x02 链路政策命令(Link Policy Commands)
~0x03 控制和基带命令(Control & Baseband Commands)
~0x04 信息命令(Informational Parameters)
~0x05 状态命令(Status Parameters)
~0x06 测试命令(Testing Commands)
~0x3F 厂商调试命令(Reserved)

tip: Host发出的大多数Command都会触发Control产生相应的Event作为响应

2. HCI Event

HCI Event包格式如下图所示

event

Event Code                     用以区分不同的事件(0x00~0xFF)
Parameter_Total_length    参数的长度(以字节为单位)
Event Parameter 0~N       参数列表

3. HCI Data

 

ACL(Asynchronous Connection Less)

acl

Handle                        连接句柄(0x000~0xEFF)
Packet_Boundary_Flag   包分界标志(2bits)
pbf 
bf
Data_Total_length         数据的长度(以字节为单位)
Data                           数据

SCO(Synchronous Connection Oriented)

sco

Connection_Handle           连接句柄(0x0000~0x0EFF)
1111111
Data_Total_length             数据的长度(以字节为单位)
Data                               数据

参考: <LIST of HCI cmd>

3. HCI传输层

Spec V4.1中定义了四种HCI 传输层:

UART/USB/Secure Digital/Three-wire UART