微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 蓝牙主控制器接口简析

蓝牙主控制器接口简析

时间:06-28 来源:互联网 点击:
4 HCI命令与事件

主机通过HCI驱动程序提供的一系列命令来控制蓝牙网络接口。除这些命令外,蓝牙标准还定义了一级由蓝牙网络接口中的HCI固件产生的事件,用来指示接口的状态变化。

HCI命令和事件与来自无连接和同步连接的数据一起通过HCI传输接口硬件进行传输。这些数据的复用方式对接口来说是确定的。图3 示出了其工作情况。


HCI提供一种统一的方法访问蓝牙硬件。HCI 链路命令提供主机控制与其他蓝牙设备链路层连接的能力,一般这些命令导致链路管理器与远端设备交换链路管理器协议命令。HCI策略命令用来影响本地或远端链路管理器的行为,这些命令提供主机影响链路管理器如何管理微微网的方法。主控制器和基带命令、信息命令及状态命令用于主机访问主控制器上的不同的寄存器。

HCI命令需要一定的时间完成,因此这些命令的处理结果将以事件的形式返回主机。如对于大部分的HCI命令主控制器完成后生成一个命令完成事件,这个事件包含了完成命令的返回参数。为了使主机具备发现HCI传输层差错的能力,在主机发出命令和收到主控制器响应之间我们判断是否超时,由于不同HCI传输层的差异,建议采用一秒作为此定时器的默认值。

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


(1)命令包分为六种类型:

● 链路控制命令;
● 链路政策和模式命令;
● 主机控制和基带命令;
● 信息命令;
● 状态命令;
● 测试命令。

(2)事件包可分为三种类型:

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

(3)数据包则可分为ACL和SCO的数据包。

5 HCI模块结构

HCI模块根据协议规定,完成协议功能、封装 HCI命令以及上层协议的数据,处理下层事件。

HCI命令事件处理模块完成命令的封装和事件的解析,在收到上层协议或应用的调用命令请求后,模块完成命令包的封装,而后调用发送函数将数据传到数据收发模块。当接收函数收到HCI事件时,调用HCI命令事件处理模块的事件处理函数,处理完毕后依据事件的性质,将响应传到上层协议或应用。

HCI数据处理模块完成ACL和SCO数据的封装处理,但对净荷不作任何解析和处理。收发函数主要完成与数据收发模块的通信,对收到的数据根据数据的类型,分别调用命令事件处理模块或数据处理模块予以处理。

6 HCI传输层

HCI的传输层定义了三类数据如何在蓝牙网络接口和蓝牙主机间进行传输。HCI传输层定义了每一类数据如何封装和通过接口硬件进行复用。目前蓝牙规范定义了三个HCI传输层:UART传输层;RS232传输层;USB传输层。下面以RS232传输层为例对HCI传输层作具体的说明。
HCI RS232传输层的目标是在蓝牙主机和蓝牙主控制器之间的物理RS232接口上使用蓝牙HCI。通过RS232传输层可以发出四种HCI分组,但主控制器接口不能区分四种HCI类型。在分组之前必须加上8位的分组指示器以区分分组类型。0x01表示指令分组,0x02表示ACL数据分组,0x03表示SCO 数据分组,0x04表示事件分组,另外还有0x05表示错误消息分组,0x06表示协商分组。错误消息分组用于将错误报告给发送端;而协商分组用于协商通信设置和协议。在RS232链路上发送任何字节之前,都应当在主控制器和主机之间对波特率、奇偶校验值类型、终止位和协议模式进行协商。每发送一个以上HCI分组时,一个8位序列号将加1,除非是重发一个错误的分组。

同步机制可以选择RTS/CTS或分界符。在不能使用RTS/CTS时,将采用含16位CRC的帧和含COBS的分界符0x7e作为检错和重新同步的手段。 16位CRC应附在分组末尾,结束分界符0x7e之前。起始分界符0x7e后紧跟着分组类型指示段。COBS 是PPP的改进,不考虑数据模式,它将产生低于5%的开销。在此采用一种简单纠错方案,发送端将仅重发含有错误的分组。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top