蓝牙协议栈及HCI三线串口传输控制

时间:2022-02-08 17:26:19

蓝牙协议包括多层协议栈,如下图。

蓝牙协议栈及HCI三线串口传输控制

 

其中Transport LayerUART/USB)层以下的协议通常都由蓝牙芯片集成,而传输层以上的协议则视芯片的不同而有所不同,以此原则蓝牙芯片分成了以下几种:

蓝牙协议栈及HCI三线串口传输控制

 

TI公司的蓝牙芯片BRF6150属于右边的芯片,所以其高级应用的软件工作量将会较大,控制核心的程序需要实现高层的协议,要达到很好的兼容性有难度。但如果要作专用的蓝牙设备,则可以去除大部分复杂的协议,降低成本。

底层模块是蓝牙技术的核心模块,所有嵌入蓝牙技术的设备都必须包括底层模块。它主要由链路管理层LMPLink Manager Protocol)、基带层BBBase Band)和射频RFRodio Fraquency)组成。其功能是:无线连接层(RF)通过2.4GHz无需申请的ISM频段,实现数据流的过滤和传输;它主要定义了工作在此频段的蓝牙接收机应满足的需求;其带层(BB)提供了两种不同的物理链路(同步面向连接路SCO Synchronous Connection Oriented和异步无连接链路ACL Asynchronous Connection Less),负责跳频和蓝牙数据及信息帧的传输,且对所有类型的数据包提供了不同层次的前向纠错码FECFrequency Error Correction)或循环沉余度差错校验CTCCyclic Redundancy Check);LMP层负责两个或多个设备链路的建立和拆除及链路的安全和控制,如鉴权和加密、控制和协商基带包的大小等,它为上层软件模块提供了不同的访问入口;蓝牙主机控制器接口HCIHost Cntroller Interface)由基带控制器、连接管理器、控制和事件寄存器等组成。它是蓝牙协议中软硬件之间的接口,提供了一个调用下层BBLM、状态和控制寄存器等硬件的统一命令,上、下两个模块接口之间的消息和数据的传递必须通过HCI的解释才能进行。HCI层以上的协议软件实体运行在主机上,而HCI以下的功能由蓝牙设备来完成,二者之间通过传输层进行交互。

下文仅对BRF6150HCI传输层的控制作一阐述。

三线UART传输层用于实现主机和蓝核之间的数据传输,该层只是数据流经的通路,进行HCI命令、事件、ACL、同步数据包传输,不对数据流进行任何的编解码。文档内容主要包括SLIP层、帧头、数据完整性检验、可靠包、错误包、链路建立、电源控制、帧溢出控制、硬件配置、推荐参数等几部分内容。

数据包的建立是分两步实现的,第一是给每个HCI数据包加一个头,表示数据包的有效载荷,接着将数据包按SLIP协议进行构建。SLIP层将不可靠的字节数据流转化为不可靠的包数据流,它在每个包的开头和结尾加一个字节0xC0,同时将数据包中的0xC0转化为0xDB 0xDC两个字节,将包内的0xDB转化为0xDB 0xDD。解码过程可以想象。

每个包有4个字节的包头

//序列码3//确认码3//数据完整性校验1//可靠包1//包类型4//有效载荷12//

 

当是不可靠包时,发送时序列码为0,接收时忽略。每个新的可靠包的序列码都等于前一个可靠包的序列码+1,重新传输的数据包将用上次的序列码。

确认码必须被设置为下一个将接收到的可靠包的序列码。

当一个16bitCCITT_CRC数据完整性校验被附加在有效载荷之后时,这一位置1

可靠包位为1,则序列码和包内数据有效,接收端必须确认接收到的数据,为0相反。

UART传输层可以传输4HCI包,分别是HCI命令包、HCI事件包、HCI ACL数据包、HCI

同步数据包HCI命令包只能由主机发往蓝牙设备,HCI事件包只能从蓝牙芯片发出,其它两个包则是双向的。HCI包译码无法区分这4种包,所以采用包类型来区分。包类型数据对应如下图。

 

蓝牙协议栈及HCI三线串口传输控制HCI命令包、HCI事件包、HCI ACL数据包总是作为可靠包传输。HCI同步数据包只有当HCI同步流控制打开时才作为可靠包传输。

有效载荷是包内有效数据,不包括包头和完整性校验数据。

头校验是可选的,规则较复杂,还晕。

可靠包:

主机和蓝牙都有检测包内数据是否正确的规则,包头和校验、SLIP有效载荷校验(数据个数为去掉0xC0,并将0xDB 0xXX转换后的个数)、数据完整性校验(可选)、无序包校验。

当可靠包被接收后,必须进行确认。当一个包准备好发出时,该包的确认码应当是最近预期的数值,若有预期要求发送确认码,但没有数据包需要发送,则设备可以发送一个确认包,确认包是不可靠包,包类型、有效载荷数据、序列码都设为0。一个可靠包只有在确认后才可以再发送。

非可靠包:

要传递非可靠包必须遵循一定的规则。非可靠包的包头的可靠包位、序列码应当是0,其它的与可靠包一样设置。非可靠包若无效则将被忽略。

链路建立:

链路建立必须先被执行,以保证序列码、波特率、以及芯片被正确设置。链路建立是通过包含未初始化、已初始化、激活三种状态的状态机实现的。第一次传输之前链路是出于未初始化状态,需要4条信息来建立,蓝牙设备在未初始化状态下只发送SYNC信息,不管收到任何信息都被忽略,然后回复SYNC,直到收到SYNC RESPONSE后进入已初始化状态,已初始化状态蓝牙设备周期发送CONFIG,若收到SYNC信息则回复SYNC RESPONSE,若收到CONFIG RESPONSE后进入激活状态,这4条信息数据完整校验标志应设为0

进入激活状态后,若收到CONFIG信息则回复CONFIG RESPONSE,收到CONFIG RESPONSE则忽略。若收到SYNC则认为对应设备被复位,则复位自身的上层协议栈并进入未初始化状态以重启链路建立过程。在激活模式下,第一个包的序列码和确认码应当是0。这4种信息的包格式都是15

电源控制:

蓝牙设备进入激活模式后,任何一方都可能需要进入节能模式,这种情况下,可以采用链路控制包来相互通知。节能模式下操作包括睡眠、叫唤、已醒三个信息。三者之间的关系可以想象。

帧溢出控制:

SLIP数据流中的SLIP ESCAPE参数之后可以加入软件流控,这是在链路配置信息中可商议选择的。软件流被使能后,标准的XON/XOFF0x11/0x13)将会被用来控制数据的流通,而数据包中的0x110x13将会用0xDB 0xDE0xDB 0xDF代替(设计中应该不用)。如果流控制没有被使能的话,则0x110x13不需要被转换。流控应该由类似HCI流控的通道协议提供,采用标准的序列码、确认码。

硬件配置:

硬件连接与普通串口没有不同,如果采用硬件流控,则可以将RTSCTS信号加入。

推荐参数:

时间上的参数与波特率相关,确认、重新发送等必须在合适的时间进行。

附录:

L2CAPLogical Link Controller and Adaptation Protocol. This protocol supports higher level protocol multiplexing, packet segmentation and reassembly,and the conveying of quality of service information. 即:逻辑链路控制及适配协议,该协议支持高层协议多路,包分割和组合,以及服务信息的品质传输。是蓝牙协议栈的核心组成部分,也是其它协议实现的基础。它位于基带之上,向上层提供面向连接和无连接的数据服务。它主要完成数据的拆装、服务质量控制、协议的复用、分组的分割和重组(Segmentation And Reassembly)及组提取等功能。L2CAP允许高达64KB的数据分组。

ACLAsynchronous ConnectionLess: the links used by Bluetooth technology to send data. These links are also important to voice systems because SCO (voice) links can only be set up after an ACL (data) link has been set up between two devices to allow them to exchange control and configuration data. 即:异步无连接链路,是蓝牙用于发送数据的链路,只有在设备之间的ACL(数据)链路建立起来传输控制和配置数据后,SCO(声音)链路才可以被建立。

AFHAdaptive Frequency Hopping, an enhancement in the Bluetooth v1.2 adopted by the SIG in November 2003. AFH co-ordinates the frequency used by Bluetooth and other 2.4GHz radio devices such as WiFi, to reduce the likelihood of interference. 即频率适配,用于自动调整同频段的各个设备,以尽可能减少接口。

SCO Synchronous Connection Oriented link. One of the 2 Bluetooth data link types defined.A synchronous (circuit-switched) connection for reserved bandwidth communications, e.g. voice, between two devices created on the LMP level by reserving slots periodically on a physical channel. This type of link is used primarily to transport SCO packets (voice data). SCO packets do not include a CRC and are never retransmitted. It primarily supports time-bounded information like voice. (Master to single slave.) SCO links can be established only after an ACL link has first been established. See also ACL. 面向同步连接链路,是基带层提供的两个数据链路之一,一个用于两个设备间的保留的带宽通信如音频通信同步连接 是在LMP层的物理通路保留时间槽上创建的,(晕)。这种链路主要用于传输SCO音频数据包,SCO数据包不包括CRC并且不会被重新传输,它主要处理有时限的类似音频的信息。主对单从SCO链路只有在ACL链路被建立以后才可以建立。

eSCO extended Synchronous Connection Oriented channels, as specified in Bluetooth v1.2 (November 2003), are error checking voice channels that allow the retransmission of corrupted voice data. As data rates can be negotiated via eSCO, the overall high quality-of-service connection is improved. 面向扩展同步连接通道,用于重新传输被打断的音频数据,数据速率可以通过eSCO进行商议,从而提高连接可靠性。

RFCOMMSerial Cable Emulation Protocol based on ETSI TS 07.10. 是一个仿真有线链路的无线数据仿真协议,符合ETSI标准的TS 07.10串口仿真协议。它在蓝牙基带上仿真RS-232的控制和数据信号,为原先使用串行连接的上层业务提供传送能力。

SDPService Discovery Protocol. It is a Bluetooth defined protocol for provided for or available through a Bluetooth device. Essentially provides a means for applications to discover which services are available and to determine the characteristics of those available services. 服务发现协议,用于提供一种发现哪种服务可用及其特性的方法。

HSHeadset

DUNDial-Up Networking

FHS Frequency Hopping Synchronization. This a special control packet revealing, among other things, the BD_ADDR and the clock of the source device. It contains 144 info bits and a 16-bit CRC code. The payload is coded with a rate 2/3 FEC which brings the total payload length to 240 bits. The FHS packet covers a single time slot. See also Bluetooth packet types.

FHSS Frequency Hop Spread Spectrum: a modulations technique which spreads data across the entire transmission spectrum by transmitting successive data on different channels ("hopping").