蓝牙主控制器接口简析

发布时间:2010-6-28 17:11    发布者:我芯依旧
关键词: 接口简析 , 蓝牙 , 主控制器
1蓝牙技术的背景

蓝牙是一种短距离的射频通信连接,最初设计的目标是代替用来连接固定或便携电子设备的电缆。蓝牙设备工作在不需要许可证2.4GHz的工业、科学和医疗(ISM)频带。蓝牙基带协议同时支持电路交换和分组交换通信,并采用跳频扩展频谱(FHSS)技术进行传输。在北美和欧洲的大部分地区,蓝牙设备工作于2.402~2.480GHz的频带,整个频带被分成 79.1MHz带宽的子信道。

蓝牙协议的体系结构分底层硬件模块、中间协议层和高层应用三大部分。底层硬件部分包括无线跳频(RF)、基带(BB)和链路管理(LM)部分。它们分别定义了蓝牙收发器在2.4GHz频段上,以跳频的方式传输信息帧和传输链路连接的建立或拆除以及链路的安全和控制所必须满足的要求。中间协议层包括逻辑链路控制和适应协议(L2CAP)、服务发现协议(SDP)、串口仿真RFCOMM和电话通信协议(TCS)。它们分别完成数据的拆装、服务质量控制、协议复用、发现网络中可用的服务及服务特性、仿真R-232串口、提供蓝牙设备间话音和数据的呼叫控制信令等功能。在这两层之间规定了一个主控制器接口(HCI)。这是协议中软硬件之间的接口,该层以上的协议软件实体运行在主机上,而HCI以下的功能由蓝牙设备来完成。在协议体系结构的最上部是高层应用的框架(Profiles)。目前仅规定了拨号网络、耳机、局域网访问、文件传输等常规应用,将来还会不断增加。各种应用程序可以通过各自对应的Profi1e实现无线通信。

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

2 HCI概述

主控制器接口(HCI)是蓝牙协议中软硬件之间的接口,它提供了一个调用基带、链路管理、状态和控制寄存器等硬件的统一命令接口。蓝牙设备之间进行通信时,HCI以上的协议软件实体在主机上运行,而HCI以下的功能由蓝牙设备来完成,两者之间通过一个对两端透明的传输层进行交互。

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


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

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


3 HCI流控制

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

主机通过发出Read_Buffer_Size命令进行初始化,这个命令的返回参数可以确定主机发向主控制器的HCI ACL和SCO数据包(不包括包头)的最大长度。另有两个返回参数表示主控制器为等待传输可以缓存的HCI ACL和SCO数据分组的数量。当只有一个与其他设备的连接或者设备处于回环模式时,主控制器利用已完成数据分组事件来控制从主机发来的数据流。事件分组包括一个链接句柄列表以及对应连接上自上一个此事件以来完成的HCI包的数目;完成指的是发送、清空或回环回主机。根据这一事件的返回参数以及读缓冲区大小命令的返回参数,主控制器可以进行流量控制。每当主机发送一个ACL或SCO数据包,主机应该记录主控制器的相应链路缓冲区中的剩余空间减少了一个包,当主机收到完成包数目事件,主机知道了又有多少缓冲区空间得到释放,主机可以算出现在主控制器可以接收的包数目。当主控制器中有数据时,它必 须周期性的向主机发送完成包数目事件,直到向主机报告所有包都发送或清空,而发送的间隔由各厂家自行定义。注意,如果SCO流量控制失效,则已完成数据分组事件号就不能在SCO链接句柄中进行报告。

对应于每一个链接句柄,数据必须依照他们在主机生成时的顺序依此在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命令主控制器完成后生成一个命令完成事件,这个事件包含了完成命令的返回参数。为了使主机具备发现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%的开销。在此采用一种简单纠错方案,发送端将仅重发含有错误的分组。
本文地址:https://www.eechina.com/thread-13884-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表