程丽玲
(浙江省检验检疫科学技术研究院,浙江 杭州 310020)
通用异步接收发送器(universal asynchronous receiver/transmitter,UART)和通用串行总线(universal serial bus,USB)是用户经常使用的两种通信接口。由于USB灵活的协议设置、接口扩展功能以及即插即用等优点,目前在消费电子产品领域USB接口已经逐步取代了UART接口。UART接口具有协议简单、数据流稳定可靠等优点,在工业计算机、工业专用电子设备和测试设备领域仍占有一席之地。因此,在许多场合很多电子设备会同时设计成兼具UART和USB接口,并分别为这两种接口配备各自独立的应用协议软件和各自独立的内存。这样的设计存在内存空间浪费,不能同时进行数据分析、传输和通信等问题,不利于数据的高效使用,在资源急缺的今天绝对不是一种好的选择。
本文通过研究通用异步接收发送器(UART)接口和通用串行总线(USB)接口的通信格式和协议特点,提出一种支持UART和USB双模通信的驱动软件构架以及硬软件设计方法,以解决双通道共用中统一数据链路层和应用接口层等关键技术设计难题。
UART和USB双模通信接口主要由硬件接口层、协议栈层和应用接口层组成,如图1所示。
图1 双模接口架构Fig.1 Structure of the two mode interface
硬件接口层的主要功能是提供双通道数据通信所需的物理接口和硬件电路,由USB和UART物理接口、USB接口芯片和接口电平转换芯片组成。其中,USB物理接口负责对外连接主USB设备,UART物理接口提供对外部其他UART设备的连接通道;USB接口芯片负责USB协议的实现和相关的通信工作;接口电平转换芯片负责RS-232电平和TTL电平的转换。
协议栈层的主要功能是实现USB接口芯片和UART数据通路的驱动程序和协议。协议栈在实现过程中,并不是简单地将USB和UART协议分别实现,而是在数据链路上将UART和USB两个数据通道有效融合,达到提高数据传输效率和节省内存的目的。
接口软件层的主要功能是提供用户应用程序需要的接口函数,使用户应用程序可以方便地控制和调用协议栈层提供的各项功能,进而控制USB和UART两个数据通路,并进行数据交互。
USB和UART两种数据通道采用的协议和传输数据的速率不同,给数据链路层和应用接口层的统一带来了很大的困难。
首先,USB协议[1]与UART协议在数据链路层和应用接口层体现出的具体功能函数存在较大差别。为了解决这个矛盾,我们可以先梳理USB协议和UART协议提供的各项数据传输功能和辅助功能,将相同功能和相似功能(例如数据发送和数据接收功能为两个端口均具备的功能)加以整合保留;而对于两个端口各自的特殊功能(例如USB端口的挂起和复位功能),则封装为具有自动处理特性的功能子函数,并利用TMS320VC5402DSP所特有的软件中断功能来统一处理。通过这一独特设计,用户无需关心这些特殊功能的实现和使用,当数据通信过程中发生该类动作时,数据链路层自动触发内部的软件中断,并调用对应的软件中断函数,自动完成相应处置并实现对应功能。
其次,USB和UART的端口数据传输速率不同,对各种中断事件响应的速度要求也存在很大差异。为了解决这个矛盾,在设计数据链路层时可增加一个通道状态寄存器。该寄存器会跟随数据链路传输数据过程动态更新。这不仅可以告知用户数据通道处于何种状态,而且更重要的是数据链路层和应用接口层的各功能函数可以在需要的时候查询该寄存器的状态,从而调用不同的时延函数,进而使USB和UART两个数据通道的传输速率和中断响应时间达到平衡统一,而无需用户的干预。
USB和UART双模通信接口硬件部分主要由型号为 PDIUSBD12[2]的 USB 接口专用芯片、MAX3221 电平转换芯片、TMS320VC5402[3]主控芯片等器件构成。
USB接口与UART接口的物理层存在很大差异,这两类接口的电平定义与接口形式不同。因此,本设计在物理电路层采用各自独立的信道来实现,而在软件层面实现协议的融合和交互处理。
本设计采用PDIUSBD12芯片来实现USB通路底层通信的数据链路级交互。该芯片提供一个并行接口同主处理器互联,最高数据吞吐速率可以达到2 Mbit/s。此外,该芯片内部高度集成了USB通信所需的各种硬件资源,可以减小系统物料清单(bill of material,BOM)元件的数量,使设计简化。
系统主控芯片采用TMS320VC5402。该芯片具有144 MHz的工作主频,峰值运算速度可达288 MIPS,可以胜任高速数据吞吐的处理任务。TMS320VC5402具有丰富的外设接口,包括一个16位并行外部总线接口,可以方便地挂接 USB接口专用芯片。同时,TMS320VC5402具有丰富的I/O接口,配合内部的程序资源,可以实现UART协议和控制接口。
UART接口通常采用两种电平格式,即TTL电平和RS-232电平。因此,本设计采用MAX3221芯片负责将主处理器提供的UART信号由TTL电平转换为RS-232电平。
硬件原理图如图2所示。
图2 双模接口硬件原理图Fig.2 Principle of the two mode interface hardware
系统的软件主要包括USB和UART驱动程序、数据链路处理程序和应用接口程序等。在此将重点介绍系统软件的整体框架和实现方法,最后以实际应用为例介绍接口函数的使用[4]。
本系统的软件部分主要由驱动程序、数据链路处理程序和接口程序组成,其框图如图3所示。
图3 软件系统组成图Fig.3 Composition of software system
端口初始化子函数、发送数据包子函数是本设计软件体系中的两个关键函数[6-8]。
端口初始化子函数用于对端口进行初始化操作,只有对端口进行正确的初始化操作,才能使端口正常进入工作状态。端口初始化子函数的功能主要包括清空数据接收缓冲区和发送缓冲区、复位USB和UART中断标志、正确设置数据链路通道状态、使能USB和UART端口等。
端口初始化子函数伪代码实现如下。
发送数据包子函数用于向上位机发送一个完整的数据包。该子函数要按照指定通道向上位机发送指定数量的字节数据。在发送数据过程中,要正确设置数据链路的通道状态并正确处理中断状态。
发送数据包子函数伪代码实现如下。
传统USB方案为USB接口和UART接口分别配备独立的数据链路层和应用接口层功能,分别独立满足USB和UART两个数据接口的需求。本设计方案则采用了统一的数据链路层和应用接口层设计,将UART通道和USB通道的数据链路级程序加以整合,有效解决了双模通信中存在的内存浪费、不能同时进行实时分析通信等方面的难题,为电器测量设备中双模通信接口的使用提供了较好的设计思路[8]。
[1]库依楠,杨玉森.基于DSP的USB2.0设备接口协议的实现[J].吉林大学学报:自然科学版,2005,35(2):170-173.
[2]于英民,于佳.计算机接口技术[M].2版.北京:电子工业出版社,2004:5-7.
[3]宋向荣,韩克敏.基于MCS单片机与PC机串行通信电平转换[J].电子测量技术,2001(4):12-15.
[4]祖先锋,潘孟春,韩旭,等.集UART与RS232于一体的MAX3110E原理及应用[J].国外电子元器件,2003(1):8-10.
[5]杨凤彪,王超,张晨光.基于CH341A的USB串口通信设计[J].电子设计工程,2011(3):15-16.
[6]吕刚,李强.AVR单片机软件模拟UART通信接口[J].单片机与嵌入式系统应用,2003(2):2-3.
[7]胡延平,李广森.TMS320C54X软件模拟实现UART技术[J].微处理机,2000(3):4-7.
[8]陈志强,张爱华,李并珊.TMS320 C54X DSP软件实现UART技术[J].中原工学院学报,2007(3):50-53.