蓝牙主控制器接口的基本特性及应用研究

网友投稿 266 2022-11-21

蓝牙主控制器接口的基本特性及应用研究

在这个标准的支持下,蓝牙系统支持点对点和点对多点的连接,每个蓝牙系统可以连接200个以上蓝牙装置。蓝牙系统的传输特性是在供工业、科学和医学领域自由使用的ISM 2.4GHz频段内用单工或全双工的方式进行信息传输。每个蓝牙信道的带宽是1MHz,它支持三个同步数据信道或同时支持 一个同步数据信道和一个异步数据信道。每个同步数据信道的数据传输率是64kb/s,用于语音数据的传输;异步数据信道的传输率是下行721 kb/s和上行57.6 kb/s,用于数字数据的传输。若设置为上下行对称的传输方式,传输率上下行各是432.6 kb/s。一般情况下的传输距离是10m(30FEET),最大可达100m,自动调整。

2 HCI概述

如图1所示,蓝牙标准对机控制器接口(HCI)的定义如下:HCI提供了一个调用和访问基带控制器和链路控制器以及硬件状态和控制寄存器的命令接口。这一接口提供了一个访问蓝牙基带功能的统一方法。在主机端的HCI软件和蓝牙硬件的HCI固件之间存在着与蓝牙协议关系并不密切的几层中间层,我们称之为机控制器传输层,它们提供数据的透明传输。

HCI由两部分组成,实现命令接口的软件和用来连接蓝牙子系统和主机的物理硬件。HCI软件的目的是使构成接口的硬件对系统高层软件来说看起来是透明的。

蓝牙软件结构包括两种类型的部件。数据相关部件负责数据通过链路的传输。控制相关部件则负责链路的控制和管理。图2 示出了HCI软件结构以及与蓝牙主机接口硬件的关系。

3 HCI流控制

流控制在主机到主控制器之间,用于防止将传送到未应答远程设备的ACL数据溢出主控制器的数据缓冲区,由主机来管理主控制器的数据缓冲区。

对应于每一个链接句柄,数据必须依照他们在主机生成时的顺序依此在HCI数据包中发往主控制器,主控制器也同样按顺序将这些数据发往空中,另一设备的主控制器收到后也必须按序发向它的主机,这意味着同一连接句柄上数据的顺序自生成起不再改变。

在某些情况下,主控制器到主机方向的流量控制是必须的,一般采用Set_Host_Controller To_Host_Flow_Control命令来开关这个方向的流量控制。这个方向的流量控制方法类似于上述的方法。起初,主机发出Host_Buffer_Size命令,告知主控制器发向主机的ACL和SCO数据包的最大长度以及主机缓冲区可存放ACL和SCO数据包的数目。主机利用主机Host_Number_Of_Completed_ Packets命令类似于主控制器的完成包数目事件,主机完成包数目命令是不需要命令流量控制的特殊命令,在有连接或处于本地回环模式时可以随时发送,这使得两个方向的流量控制同样的工作,正常的命令流也不被打断。

当主机收到拆链完成事件后,可以认定该连接句柄上的所有发往主控制器的数据被清空,相应数据缓冲区被释放,主控制器不需要用完成包数目事件将这些告诉主机。如果也采用了主控制器到主机方向的流量控制,主控制器在发送了拆链完成事件后假设主机在收到这一事件后也清空了这一连接句柄上的所有数据,主机也不需要用主机完成包数目命令将这些告诉主控制器。

4 HCI命令与事件

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

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

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 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%的开销。在此采用一种简单纠错方案,发送端将仅重发含有错误的分组。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:K8S部署Redis Cluster集群(三主三从模式) - 部署笔记
下一篇:Spring Data JPA 映射VO/DTO对象方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~