《蓝牙协议及其实现》 - 主机控制器接口(HCI)

主机控制器接口(HCI)提供了一种访问蓝牙硬件能力的通用接口。

HCI固件通过访问基带命令、链路管理器命令、硬件状态寄存器、控制寄存器以及事件寄存器实现对蓝牙硬件的HCI命令。

HCI是通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三种包,其中数据包是双向的,命令包只能从主机发往主机控制器,而事件包始终是主机控制器发向主机的。主机发出的大多数命令包都会触发主机控制器产生相应的事件包作为响应。
命令包分为六种类型

  • 链路控制命令:链路控制命令允许主机控制器控制与其他设备的连接。当使用链路控制命令时,链路管理器控制如何形成和维持蓝牙微微网和散射网(Scatternet)。这些命令指示链路管理器生成和更改与远端节点的链路层的连接和查询覆盖范围内的其他蓝牙设备,以及执行其他的LMP命令。
  • 链路策略命令:链路策略命令为主机提供影响链路管理器管理微微网的方式的途径。当使用链路策略命令时,LM将继续控制微微网和散射网的建立和维护,但要依赖可调节的策略参数。这些策略命令可以改变链路管理的行为,因而也将导致链路层连接的改变。
  • 主机控制器和基带命令:主机控制器和基带命令提供对蓝牙硬件的各种能力的访问和控制,这些参数提供对蓝牙设备控制和对主机控制器、链路管理器和基带的能力的控制。主机设备可以使用这些命令改变本地设备的运行状态。
  • 信息参数命令:信息参数由蓝牙硬件制造商给定,这些参数提供有关蓝牙设备以及主机控制器、蓝牙管理器和基带能力的信息。主机设备不能对这些参数进行任何改动。
  • 状态参数命令:主机控制器改变全部的状态参数。这些状态参数提供有关主机控制器、链路管理器和基带的当前状态信息。主机不能改变任何参数,但是可以对特定指定的参数复位。
  • 测试命令:测试命令用于提供测试蓝牙硬件各种功能的能力。这些命令提供准备各种测试条件的能力。

事件包分为三种类型

  • 通用事件,包括命令完成包(Command Complete)和命令状态包(Command Status);
  • 测试事件;
  • 出错时发生的事件,如产生丢失(Flush Occured)和数据缓冲区溢出(Data Buffer Overflow)。

参考链接:http://blog.csdn.net/android_huber/article/details/7727512

时间: 2024-10-30 17:23:06

《蓝牙协议及其实现》 - 主机控制器接口(HCI)的相关文章

《蓝牙协议及其实现》 - 蓝牙协议体系结构

蓝牙协议体系结构 整个蓝牙协议体系结构可分为底层硬件模块.中间协议层和高端应用层三大部分. 链路管理层(LMP,Link Management Protocol).基带层(BB)和射频(RF)构成蓝牙的底层模块.RF通过2.4GHz无需授权的ISM频段,实现数据位流的过滤和传输,它主要定义了蓝牙收发器应该满足的要求.BB层负责跳频和蓝牙数据及信息帧的传输.LM层负责连接的建立和拆除以及链路的安全和控制,它们为上层软件模块提供了不同的访问入口,但是两个模块接口之间的消息和数据传递必须通过蓝牙主机控

蓝牙协议(bluetooth spec)

1.概述:   蓝牙协议规范遵循开放系统互连参考模型(OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次. SIG(Session Initiation Protocol)所定义的蓝牙技术规范的目的是使符合该规范的各种应用之间能够实现互操作. 互操作的远端设备需要使用相同的协议栈,不同的应用需要不同的协议栈. 但是,所有的应用都要使用蓝牙技术规范中的数据链路层和物理层. 2.完整的蓝牙协议栈 完整的蓝牙协议栈如图1所示,不是任何应用都必须使用全部协议,而是可以只使用其中的一列或多列. 图1显

蓝牙协议 基于TI cc2540 模块的理解(转)

源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20.2 demo Code:BLE_CC254x_1.4.0 from TI 物理层:是1Mbps自适应跳频GFSK射频,工作于免许可证的2.4GHz ISM(工业.科学与医疗)频段. 链路层:用于控制设备的辐射状态,设备将处于五种状态之一:等待.广告.扫描.初始化.连接.广播设备不需要建立连接 就可以

蓝牙协议分析(7)_BLE连接有关的技术分析

转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connection)是一个相当消耗资源(power和带宽)的过程.特别是当没有数据传输的时候,所消耗的资源完全被浪费了.因而,对很多蓝牙设备来说(特别是功耗敏感的设备),希望在无数可传的时候,能够断开连接.但是,由于跳频(hopping)以及物理通道(Physical Channel)划分的缘故,经典蓝牙连接

蓝牙协议分析(3)_BLE协议栈介绍

1. 前言 通过"蓝牙协议分析(2)_协议架构"的介绍,大家对蓝牙协议栈应该有了简单的了解,但是,肯定还有"似懂非懂.欲说还休"的感觉.有这种感觉太正常了,毕竟蓝牙协议是一个历史悠久又比较庞大的协议,没那么容易理解. 因此,本文将换个视角,从协议栈设计者的角度,思考如下问题: 为什么会有蓝牙协议栈(Why)? 怎样实现蓝牙协议栈(How)? 蓝牙协议栈的最终样子是什么(What)? 另外,我们知道,当前的蓝牙协议包含BR/EDR.AMP.LE三种技术,为了降低复杂度

蓝牙协议分析(10)_BLE安全机制之LE Encryption

1. 前言 前面文章介绍了两种BLE的安全机制:白名单[4]和LL privacy[3].说实话,在这危机四伏的年代,这两种"捂着脸讲话(其它人不知道是谁在讲话,因而不能插话.不能假传圣旨,但讲话的内容却听得一清二楚)"的方法,实在是小儿科.对于物联网的应用场景来说,要做到安全,就必须对传输的数据进行加密,这就是LE Encryption要完成的事情(当然,只针对面向连接的数据),具体请参考本文的介绍. 2. 基本概念 从字面理解,Encryption是一个名词,意思是"加密

Protocol buffer序列化及其在微信蓝牙协议中的应用

Protocol buffer是Google出品的一种轻便高效的结构化数据存储格式,可对结构化数据进行序列化,并具有语言无关.平台无关等特点,在通信协议和数据存储等领域已经得到广泛的应用.目前其已经提供 C/C++.Java.Python 等语言的 API. 一.Protocol buffer和XML 在数据通信传输时,一般需要将结构化的数据序列化成流进行传送,接收方再反序列化为原始格式数据进行处理.在Web通信领域,XML应用算是最通用的了.在时间性能上,虽然XML的序列化开销还可以,但是反序

bluetooth 蓝牙协议和标准,配置

Bluetooth 配置文件表达了一般行为,Bluetooth 设备可以通过这些行为与其它设备进行通信.Bluetooth 技术定义了广泛的配置文件,描述了许多不同类型的使用案例.为了使用 Bluetooth 无线技术,设备必须能够翻译特定 Bluetooth 配置文件.配置文件定义了可能的应用.对象交换 (OBEX) 协议OBEX 传输协议定义了数据对象和两个设备用来交换这些对象的通信协议.OBEX 支持应用程序在 Bluetooth 协议堆栈及 IrDA 堆栈上工作.对于 Bluetooth

【转】蓝牙协议分析(1)_基本概念

原文网址:http://www.wowotech.net/bluetooth/bt_overview.html 1. 前言 自1994年由爱立信推出至今,蓝牙技术已经走过了20个岁月.从最初的Bluetooth V1.0,到Bluetooth V4.0(最新的为V4.1,2013年底发布),经历了近9个版本的修订后,发展为当前的状况. 说实话,如今的蓝牙4.1,简直是一个大杂烩:BR/EDR沿用旧的蓝牙规范:LE抄袭802.15.4:AMP直接使用802.11.而这一切的目的,就是以兼容性和易用