可编程逻辑在蓝牙HCI桥中的应用
发布时间:2006-10-14 7:55:00   收集提供:gaoqian
    今年底将会推出蓝牙标准的新版本,将提供更高的带宽和更大的覆盖范围,因此可以预计蓝牙技术支持的应用范围会进一步扩展。这也意味着不仅消费电子或计算机外设会采用蓝牙进行通信,许多其它的家用和办公电器,甚至工业设备也会采用蓝牙技术。因此众多的现有电子设备都需要支持或利用蓝牙。
    蓝牙标准定义了需要用户最小干预的一个设备通信接口。然而目前多数标准蓝牙芯片解决方案仅提供了一个UART(通用异步收发报机)和USB主机控制器接口(HCI)。显然,将现有的电子设备完全重新设计来提供UART或USB接口有点动作太大了。因此,采用系统上的现有接口作为连接蓝牙子系统的桥接接口有重要的意义。
    蓝牙标准将实现蓝牙接口所需要的功能分成三个如图1所示的功能模块。这些功能模块可直接与蓝牙标准中的功能划分相对应。
    射频部分实现蓝牙设备的宽带无线接口。典型情况下,射频单元以多芯片模块实现,包括一个天线开关、阻抗匹配器、放大器、基于数字锁相环路(PLL)的时钟恢复、调制和解调电路。
    蓝牙基带链路控制器功能包括底层的链路层功能。基带功能包括:
* CVSD语音编码
* 头错误校验(HEC)生成及校验
* 前向纠错(FEC)生成及校验
* 循环冗余校验码(CRC)生成及校验
* 数据扰码
* 有效数据加密和解密

* 跳频序列 链路管理模块实现链路管理器协议(LMP),负责处理底层控制方面的功能,包括:
* 设备间链路的建立
* 生成、交换并检查加密密钥
* 协调基带分组大小
* 功率模式及射频负载因数
* 一个微微网中设备的连接状态
    由于这些功能本身所具有的复杂性,因此需要采用软件来实现。软件通常运行在一个嵌入式RISC处理器上。这一软件方法导致其它功能也可采用处理器实现,同时还包括实现到主机系统接口所需要的固件。
    蓝牙标准对主机控制器接口(HCI)的定义如下:
    HCI提供了一个调用和访问基带控制器和链路控制器,以及硬件状态和控制寄存器的命令接口。这一接口提供了一个访问蓝牙基带功能的统一方法。
    HCI由两部分组成,实现命令接口的软件和用来连接蓝牙子系统和主机的物理硬件。HCI软件的目的是使构成接口的硬件对系统高层软件来说看起来是透明的。
    蓝牙软件结构包括两种类型的部件。数据相关部件负责数据通过链路的传输。控制相关部件则负责链路的控制和管理。就本文的目的来说,我们将集中讨论构成HCI的控制和数据相关的部件。图2 示出了HCI软件结构以及与蓝牙主机接口硬件的关系。
    主机通过HCI驱动程序提供的一系列命令来控制蓝牙网络接口。除这些命令外,蓝牙标准还定义了一级由蓝牙网络接口中的HCI固件产生的事件,用来指示接口的状态变化。
    HCI命令和事件与来自无连接和同步连接的数据一起通过HCI传输接口硬件进行传输。这些数据的复用方式对接口来说是确定的。
    HCI的传输层定义了三类数据如何在蓝牙网络接口和蓝牙主机间进行传输。HCI传输层定义了每一类数据如何封装和通过接口硬件进行复用。蓝牙规范目前定义了三个HCI传输层。
* UART传输层
* RS232传输层
* USB传输层
    蓝牙特别兴趣组(Bluetooth SIG )的白皮书中描述了第四个传输层,即PC卡传输层。
    除非有足够的时间和资源,否则很少有人会从最底层来设计一个蓝牙网络接口,HCI实施的战略通常是基于已经提供的ASSP产品。ASSP可以分成两大类,一类仅实现了链路控制器功能,另一类则同时包括了链路控制器和链路管理器。这两类器件的主要区别是后一类包含了一个嵌入式RISC处理器来实现链路管理器和HCI功能。
    要决定采用哪一类器件通常需要针对每种方案进行权衡分析。下面提供了一个实际例子,它展示了可编程逻辑器件(PLD)如何提供可解决HCI接口问题的方案。
    要将蓝牙技术以有效的成本集成到系统级设计中要面临许多挑战,包括:
* 不断演化的标准。虽然蓝牙核心协议是稳定的,但到高层协议和服务(如IP业务)的映射却仍在不断演化;
* 可能存在问题的ASSP。目前应用的大多数ASSP还相对较新,因此会存在一些必须由系统设计人员处理的缺陷;
* 新出现的产品应用模式。对最初设想的电缆替代应用来说,大多数情况下蓝牙技术目前还是太昂贵了。由于这一原因,和其它一些有利可图的潜在“关键应用”,使许多人考虑将蓝牙推向仍在形成期的新兴应用领域;
    很明显,这里所需要的是一个允许系统设计人员快速开发蓝牙解决方案并可以针对不断变化的环境做出响应的灵活技术。对采用前述两类蓝牙ASSP的接口设计,PLD可以满足这一需要。
    选择同时包括链路控制器和链路管理器功能的ASSP产品所具有的优点是可以从相当完整的解决方案开始。器件包含一个RISC处理器和一个或多个HCI传输接口。制造商同时还提供HCI和链路管理器固件。采用此类器件,系统级集成仅需要将HCI传输接口与主机相连。如果主机系统已经有可用的USB或UART端口,那么不需要额外的硬件就可以实现系统集成。
    蓝牙子系统的三个部件分别是:
* 射频(RF)部分 - 射频器件
* 基带(BB)- 基带处理器
* 微控制器(mC)- 微控制器
    然而很多情况下这一方法可能并不适用,可能的原因有:
* 主机系统可能没有可用于蓝牙子系统的UART或USB接口;
*主机系统可能没有足够的USB或UART端口。当主机仅有有限数量的端口时,或当应用需要大量的端口时就会出现这种情况;
* 主机系统可以没有可以支持全速蓝牙数据速率的串行端口。为达到最大的系统级性能,蓝牙ASSP包含可支持高达1.5Mbps传输速率的UART;
* 标准接口的ASSP可能并不适合蓝牙协议处理,因此在蓝牙速率下工作时,可能会消耗太多的处理器处理资源。中断处理开销可能会大量消耗主机处理资源。
    在上述任何一种情况下,可编程逻辑都可以用来实现所需要的接口硬件。对深度嵌入式应用,这通常是一个USB或UART核心和系统中采用的嵌入式处理器局部总线间的接口。虽然可编程逻辑可以用来实现两种传输接口的任何一种,但简单的UART传输协议是一个成本效率较高的接口方案,同时还具有较好的系统级性能。
    系统级性能会更好的原因源于PLD的主要优点,即他们可以快速创建一个针对目标应用的特定的接口解决方案。
    通过降低发送和接收时的中断服务开销,这一方法提高了系统级性能。在传统UART情况下每接收或发送一个数据都产生一个中断。与此不同,这一设计中采用了片上FIFO来进行接收和发送缓冲,每发送或接收一个完整的HCI帧才产生一次中断。这是通过采用专用逻辑电路对HCI头中的帧大小信息进行解码并适当配置DMA逻辑来实现的。可编程逻辑实现的专用逻辑还通过检查来保证帧级同步。
    虽然采用仅包含链路控制器的ASSP需要更多的工作才能创造出一个完整的解决方案,但他们也为在深度嵌入式系统实现更紧密的集成和降低系统成本提供了机会。如果蓝牙网络接口和主机位于同一块电路板上,那么就没有必要采用一个HCI传输层。这种情况下,用来控制基带处理和射频功能的接口以及用来传输数据帧的接口都成为直接简单的主机处理器接口。由于这些接口通常与采用的ASSP相关,因此可编程逻辑提供了一个到主处理器总线或I/O总线(如PCI)接口的低成本方法。请注意,这是可编程逻辑可以用来集成其它核心逻辑功能的又一种情况。
    在这种方案中,主机CPU完成所有的协议处理功能。这进一步降低了成本。因为原来专门用于链路管理功能的RISC处理器和非易失存储器在系统中就不需要了。
    基于可编程逻辑的快速UART至PCI桥解决方案是为旧系统集成业界标准的蓝牙通信功能的理想方法。其中采用FPGA对系统加速最明显的是FIFO缓冲器。这些FIFO的深度和宽度可以重新配置以适应更快速的数据速率以及更宽的数据字或特殊的字宽度。图5显示了一个单通道UART到PCI桥的功能部件。由于用于FPGA的标准接口和存储控制器IP非常多,因此可以导出许多与此类似的几乎实现了所有其它核心逻辑功能的设计。由图5还可看出可以集成更多附加的功能,如SDRAM控制器和定制逻辑。这种灵活性使您可赶在竞争对手前,快速有效地改变您的设计以满足新兴的市场机会。
    可编程逻辑是集成蓝牙技术到嵌入式系统中的优秀解决方案,因为它提供的几个优势可以帮助压缩产品上市的时间。第一,有范围广泛的IP可以使用,因此可以快速得到关键的设计构建模块。第二,准现成的可编程解决方案使系统设计人员可比任何其它方法更快地完成一个功能硬件平台。第三,在软件还在开发过程中,就可以方便快速地推出有限数量的设计来进行实际的Beta测试并获得反馈。
    在集成蓝牙技术的过程中,软件开发是最大的问题之一。由于可编程逻辑可以更快地完成功能硬件设计,因此具有很大的优势。实际上,这一优势可能比想象的还要大,特别是当你考虑到可编程逻辑所带来的巨大灵活性时。例如,许多情况下,非常希望能够重新利用现有的驱动程序和固件。此时,PLD使系统设计人员可以先调整接口逻辑,以使用标准的驱动程序,然后再修改这一逻辑来提高性能。当设计中选择购买第三方固件时,这一特性更有价值,因为对第三方固件的理解需要时间,而且第三方固件还可能不能非常好地适应目标应用环境。
    从本质上来说,产品开发并不是严格的科学,因为实际开发中总是存在错误、不兼容性和标准的不断修改。由于其内在的可重新编程特性,PLD提供了非常有价值的优势,可在任意时间对已安装系统的硬件进行升级。这使您可以保证现有设计的可用性,并大大降低了过时的器件库存以及昂贵的现场器件更换所带来的风险。■
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50