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

HCI提供了对控制器的统一接口,用来沟通Host和Control,如下图所示 
Bluetooth HCI介绍-LMLPHP 
在规范中对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 传输层

Bluetooth HCI介绍-LMLPHP

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包格式如下图所示

Bluetooth HCI介绍-LMLPHP

(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包格式如下图所示 
Bluetooth HCI介绍-LMLPHP 
Event Code                     用以区分不同的事件(0x00~0xFF) 
Parameter_Total_length    参数的长度(以字节为单位) 
Event Parameter 0~N       参数列表

3. HCI Data

ACL(Asynchronous Connection Less) 
Bluetooth HCI介绍-LMLPHP 
Handle                        连接句柄(0x000~0xEFF) 
Packet_Boundary_Flag   包分界标志(2bits) 
Bluetooth HCI介绍-LMLPHP  
Bluetooth HCI介绍-LMLPHP 
Data_Total_length         数据的长度(以字节为单位) 
Data                           数据

SCO(Synchronous Connection Oriented) 
Bluetooth HCI介绍-LMLPHP 
Connection_Handle           连接句柄(0x0000~0x0EFF) 
Bluetooth HCI介绍-LMLPHP 
Data_Total_length             数据的长度(以字节为单位) 
Data                               数据

参考: <LIST of HCI cmd>

3. HCI传输层

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

UART/USB/Secure Digital/Three-wire UART

04-14 19:13