当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]1 引言蓝牙(Bluetooth)是世界级著名的计算机和通信领域大公司(爱立信、IBM、Intel、诺基亚和东芝等) 倡导推出的一种无线通信技术的开放式工业标准,其取自10 世纪丹麦国王

1 引言

蓝牙(Bluetooth)是世界级著名的计算机和通信领域大公司(爱立信、IBM、Intel、诺基亚和东芝等) 倡导推出的一种无线通信技术的开放式工业标准,其取自10 世纪丹麦国王哈拉尔德(HaraldBluetooth)的 别名,意在形成一个全球统一的无线通信技术标准[1]。蓝牙技术消除了设备之间的连线,用无线连接取代 传统的电线。蓝牙主要有蓝牙硬件和蓝牙协议组成,蓝牙硬件由模拟部分和数字部分组成。模拟部分指蓝 牙射频发射台,数字部分指主控制器。蓝牙协议采用电路及信息包两种交换方式,主要有射频(RF)、基带 (BB)、链路管理器(LM)、主接控制接口(HCI,Host Control Interface)底层嵌入式驱动程序、HCI 高层软 件驱动程序、逻辑链路控制适配协议(L2CAP)、串口仿真协议(RFCOMM)、业务发现协议(SDP)、电话控制协 议(TCS)构成[2]。

目前,蓝牙技术应用开发有两种方式:1)单微控制器方式,所有的蓝牙传输协议及用户应用程序都 集成到一个模块中,由一个处理器完成。它不一定需要HCI 层,但其涉及到射频、基带等硬件协议层,开 发方式复杂,开发周期加长,成本代价也高;2)双微控制器方式,底层传输协议一般通过蓝牙硬件模块 实现,模块内部嵌入式的微处理器成为主机控制器,高层传输协议和用户应用程序分别由主机和主控制器 来实现,主机和主机控制器之间通过标准的物理总线接口来连接[3]。由于主机与主控制层在硬件上完全分 离,需通过HCI 层把蓝牙模块和蓝牙主机连接起来。在实际应用中,由于高层协议的复杂性和多样性,采 用这种方式,用户不需要考虑底层就可以实现对通信流程的控制,符合用户实际需求,且开发周期短,可 移植性好,本文的设计也是采用这种方式。

2 系统基本原理

2.1 UART 基本原理

UART(Universal Asynchronous Receive Transmitter)又称通用型异步接收及发送接口[4],是一种异 步通信传输方式。其通信协议帧格式包括五个部分:空闲状态(idle,高电平)、起始位(start,低电平)、 5~8 位数据位、奇偶校验位(parity,可选)和停止位(Stop,位数可为1,1.5 和2 位)。这种格式是由起 始位和停止位来实现字符的同步,其中奇偶校验位的有无和数据位的长度由通信双方约定。一帧数据传输完毕后可以继续传输下一帧数据,也可以继续保持为高电平,两帧之间保持高电平,持续时间可以任意长。 本设计规定的通信协议帧格式为:1 位起始位(start,低电平)、8 位数据位(d0~d7)、1 位奇偶校验位(parity) 和1 位停止位(stop,高电平),如图1 所示。

 


图1 UART 通信协议帧格式

2.2 HCI 基本原理

2.2.1 HCI 传输层的比较

HCI 层位于蓝牙高层协议和低层协议之间,其目的是实现主机设备与蓝牙模块之间的互操作,即HCI 是蓝牙主机与主机控制器间软硬件接口。HCI 为蓝牙硬件中基带控制器和链接管理器提供了命令接口,从 而实现对硬件状态注册器和控制寄存器的访问,提供了对蓝牙基带的统一访问模式。 目前,HCI 的传输层主要有三种:USB,RS-232,UART。此外,还有一种PC 卡传输层,其没有定义在 蓝牙标准中,而是在蓝牙SIG 于1999 年8 月发表的蓝牙PC 卡传输层1.0 版白皮书中描述的。蓝牙没有规 定PC 卡传输层实现的具体细节,而是要求制造商提供传输驱动程序,以配合主机上的HCI 驱动程序[5]。不 同传输层对HCI 事件处理没有影响。

(1)USB 传输层在蓝牙硬件上使用USB 硬件接口(该硬件接口有两种嵌入方式:一种是作为USB 加/ 解密芯片,另一种是集成到PC 机主板上)[6]。这一种类编码要求不管使用哪一厂商生产的设备,都能加载 合适的驱动程序栈;同时它还保证了通过控制终端的HCI 指令和USB 指令有所区别。其缺点是软件协议复 杂,软件开销巨大。

(2)RS-232 传输层:通过位于主机和主控制器之间的物理RS-232 接口实现。事件包和数据包通过该 层,但该层并不对它们进行解码。该传输层支持的是主机控制器和不同实体中的主机的通信情况,通信距 离较远,传输层特别规定了电气特性,并采用了更为精细的链路协议以应对较高的线路误码率,但在硬件 上需要增加电平转换电路。

(3)UART 传输层跟RS-232 传输层类似,也是采用一个UART 的串行通信方式在主控制器与主机之间 进行数据传输。应用环境主要是针对主控制器和主机位于同一个电路板上,传输层假定UART 通信无线性 错误。与其它的相比,UART 传输层方式比较灵活,其应用环境决定其连接错误相对较少,可以采用简单的 复位恢复机制实现失步时的复步。由于主机和主控制器都处于同一块电路板上,因而传输层不需要规定电 气信号,可以直接采用TTL、LV-CMOS 等IC 端电压,应用较多。同时,UART 传输层避开了RS-232 传输层 所要求的较繁琐的协商和同步机制。UART 性能和数据吞吐率水平与USB 接口相当,而传输协议却较为简单, 减少了软件开销,是一种更为经济高效的全硬件解决方案。

2.2.2 HCI 分组

两个蓝牙设备间进行数据通信是通过HCI 分组实现的,HCI 是通过分组的方式来进行信息交换的。HCI 分组有三种类型:指令分组(Command Packet)、事件分组(Event Packet)和数据分组(Data Packet)[7]。

(1)指令分组

只从主机发向主机控制器,分为链路控制指令、链路策略指令、主机控制指令与基带指令、信息参数 指令、状态参数指令和测试指令。HCI 指令分组由操作码(OpCode)、参数总长(Parameter Total Length) 和参数列表(Parameters)三部分组成[8]。

(2)事件分组

只从主机控制器发向主机,用以说明指令分组的执行情况,是主机控制器向主机报告各种事件的分组。 包括通用事件(包括指令完成事件和指令状态事件)、测试事件、出错事件三种。

(3)数据分组

它是在主机和主机控制器间双向传输,一般分为ACL(Asynchronization Connectionless)数据分组和 SCO (Synchronization Connection Oriented)数据分组两种[9]。二者之间的区别在于:ACL 链路支持对称和非对称传输,分组交换和多点连接,适用于传送数据;SCO 链路支持对称传输,电路交换和点到点连接, 适用于传输语音。[!--empirenews.page--]

3 HCI-UART 的FPGA 设计

主机与蓝牙模块之间使用指令——应答的方式进行通信,主机向主机控制器发送指令分组,主机控制 器执行某一指令后,大多数情况下会返回给主机一个指令完成事件分组,该分组携带有指令完成的信息。 如果指令分组参数有误,返回的指令状态事件分组就会给出相应的错误代码。主机与主机控制器间的数据 交换则通过数据分组实现。主控制器系统原理框图如图2 所示。

 


3.1 UART 的设计

UART 的设计主要包括三个部分:发送器、接收器和波特率发生器,设计采用分模块完成[10]。 (1)波特率发生器:UART 的数据接收和发送是通过对波特率的设置进行实现的。波特率发生器采 用分频器实现,分频得到一个频率为波特率16 倍的波特率时钟clk_baud,分频数N 计算公式如(1)所示, 其中clk_sys 表示系统时钟,baudrate 为UART 的波特率。

 


(2)发送器模块:检测到发送信号时,装载数据,根据数据产生奇偶校验位,按通信协议帧的格式 的要求依次发送起始位、数据位、奇偶校验位和停止位,并产生各种控制信号。整个发送过程采用有限状 态机实现,分成五个状态(空闲idle,发送起始位send_start,发送数据send_data,发送奇偶校验位 send_parity,发送停止位send_stop),具体过程如图3 所示。

 


图3 发送器状态图

(3)接收器模块:当检测到接收信号线rxd 上有电平变化时[10],即通过检测协议帧的格式接收数据, 如果格式正确则将数据存储起来,否则放弃本次数据,同时产生错误标志信号。设计实现采用有限状态机, 为了保证数据接收的正确性,数据采集都在时钟中间时刻完成。接收过程分为五个状态(空闲idle,起始 位检测start_check,接收数据rec_data,奇偶校验位检测parity_check,停止位检测stop_check),接 收过程如图4 所示。

 


图4 UART 接收器状态图

3.2 HCI 的设计

蓝牙HCI 分组在串行连接传输层的成帧是简单地加一个标识头(用16 进制表示):01H 表示指令分组, 02H 表示ACL 数据分组,03H 表示SCO 数据分组,04HH 表示事件分组。根据HCI 的基本工作原理与HCI 分组的特点,HCI 的实现主要有四个功能模块组成,包括HCI 命令处理模块(command_handle),HCI 事 件处理模块(event_handle),HCI 数据处理模块(data_handle),收发控制模块(rec_tra_controller)。其组成框图 如图5 所示:

 


图5 HCI 控制器的组成

HCI 接口通信过程包括如下几个部分:

1)蓝牙系统初始化(initial);

2)系统准备好后,进入查询状况(inquiry);

3)建立数据连接(creat_connection);

4)数据传输(transmit);

5)断开连接(disconnect);

首先,蓝牙主从设备进行初始化;接着蓝牙的主设备在范围内用Inquiry 命令分组查找其他的蓝牙设 备。然后,主设备会收到对应的蓝牙从设备的应答信息,其包括有事件分组包和从机地址包。之后,蓝牙 主设备向从设备发送Create_Connection 的命令分组,然后,主设备会收到一个连接完成的事件分组 Connection_Complete,表示两机之间已经建立了连接。这样,两个蓝牙设备之间就可以进行数据的通信, 即建立连接。当数据传输完成后,断开主从设备之间的连接,系统重新复位,一个数据传输过程就结束了。

4 仿真与验证

本设计采用分模块设计,在 Quartus II 9.0 下完成设计和综合,且经过Modelsim*a 的仿真验证。 同时在搭建的硬件通信测试平台下测试过,证明该设计确实可行。 5 5 结束语

HCI 是实现蓝牙协议栈时必须实现的一个部分。它是蓝牙上层协议控制底层硬件的接口,首先要根据 具体应用的需要选择合适的传输层,并尽可能的为上层协议提供友好的API,在硬件实现中,UART 传输层具有其他传输层无法比拟的优点。

本文创新在于从工程实际开发角度出发,提出了一种基于FPGA 的蓝牙HCI-UART 全硬件实现方式,缩 短了开发周期,降低开发成本,具有一定的工程参考价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭