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 传输层

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

(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 Code                     用以区分不同的事件(0x00~0xFF) 
Parameter_Total_length    参数的长度(以字节为单位) 
Event Parameter 0~N       参数列表

3. HCI Data

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

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

参考: <LIST of HCI cmd>

3. HCI传输层

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

UART/USB/Secure Digital/Three-wire UART

Bluetooth HCI介绍的更多相关文章

  1. Bluetooth GATT介绍

    目录 1. 介绍 2 内容 2.1 Configured Broadcast 2.2 GATT Profile Hierarchy 3 Service Interoperability Require ...

  2. Android Bluetooth hci 命令分析

    Android在连接BLE设备的时候,遇到连接没多久就自动断开的情况.通过HCI来分析一下. BLE设备发送连接参数更新请求 3909 15:53:01.224737 TexasIns_f0:d3:4 ...

  3. 蓝牙学习(3) Linux kernel部分Bluetooth HCI分析

    在上文,https://blog.csdn.net/feiwatson/article/details/81712933中主要理解了在Kernel中USB adapter是如何实现USB设备驱动,以及 ...

  4. Bluetooth GAP介绍

    目录 1 GAP协议栈 2 Profile Role 3 用户接口 4 模式 5 安全 5.1 认证(Authentication) 5.2 安全模式 6 Idle Mode Procedures 7 ...

  5. Bluetooth ATT介绍

    目录 1 介绍 2 详细内容 2.1 Attribute Type 2.2 Attribute Handle 2.3 Attribute Handle Grouping 2.4 Attribute V ...

  6. Bluetooth LMP介绍

    目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...

  7. Bluetooth Baseband介绍

    目录 1. 概述 1.1 Clock(时钟) 1.2 寻址方式 2. 物理信道(Physical Channels) 3. 物理链路(Physical Links) 4. 逻辑传输层(Logical ...

  8. Bluetooth HFP介绍

    目录 1. 介绍 1.1 目的 1.2 使用场景 1.3 依赖关系 1.4 协议栈 1.5 角色 2. 应用层 3. 空白章节 4. 互操作性要求 4.1 介绍 4.2 Service Level C ...

  9. Bluetooth RFCOMM介绍

    目录 1. 介绍 2. 服务概述 2.1 RS-232控制信号 2.2 Null Modem Emulation 2.3 多串口仿真 3. 服务接口描述 4. RFCOMM帧类型 5. RFCOMM帧 ...

随机推荐

  1. 了解Json

    Json(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是基于JavaScript的一个子集. 数据格式简单, 易于读写, 占用带宽小. {'age':'12' ...

  2. extjs grid

    Ext.onReady(function() { Ext.BLANK_IMAGE_URL = '../resources/images/default/s.gif'; Ext.QuickTips.in ...

  3. Hadoop科普文——常见的45个问题解答(CSDN)

    Hadoop科普文——常见的45个问题解答 1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2.  单机(本地)模式中的注意点? 在单机模式(standalon ...

  4. SVN标准命令

    SVN标准命令 范例 checkout 检出 svn  co  URL 检出app/search/news/apache/主干上最新版本到本地工作副本,可执行命令: svn co  https://s ...

  5. HDU 3853(期望DP)

    题意: 在一个r*c的网格中行走,在每个点分别有概率向右.向下或停止不动.每一步需要的时间为2,问从左上角走到右下角的期望时间. SOL: 非常水一个DP...(先贴个代码挖个坑 code: /*== ...

  6. POJ 2342 (树形DP)

    题目链接: http://poj.org/problem?id=2342 题目大意:直属上司和下属出席聚会.下属的上司出现了,下属就不能参加,反之下属参加.注意上司只是指直属的上司.每个人出席的人都有 ...

  7. HDNOIP201404最短路径

    HDNOIP201404最短路径 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 a.b.c是3个互不相等的1 ...

  8. DWR入门教程

    DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给 ...

  9. HTML5怎样在网页中使用摄像头功能

    怎样在网页中使用摄像头,html5越来越多的使用到实际工作中,那么他怎样调用摄像头呢进行视频聊天,视频监控等活动呢,今天为大家抛砖引玉,教大家怎样实现怎样利用html5实现摄像头视频监控功能.废话不多 ...

  10. CvMat and cv::Mat

    CvMat: typedef struct CvMat { int type; int step; /* for internal use only */ int* refcount; int hdr ...