范晓光 赵 晶 李小平 梁 影
(上海无线电设备研究所,上海 200090)
通用串行总线 (Universal Serial Bus,USB)是一种新兴的并逐渐取代其他接口标准的数据通信方式,由Intel、Compaq、Digital、IBM、Microsoft、NEC 及Northern Telecom等计算机公司和通信公司于1995年联合制定,并逐渐形成了行业标准。USB总线作为一种高速串行总线,其极高的传输速度可以满足高速数据传输的应用环境要求,且该总线还兼有供电简单(可总线供电)、安装配置便捷(支持即插即用和热插拔)、扩展端口简易(通过集线器最多可扩展127个外设)、传输方式多样化(4种传输模式),以及兼容良好(产品升级后向下兼容)等优点。目前该接口总线已发展到USB3.0标准,并且已经在计算机中广泛使用。
LabVIEW是一种基于计算机平台的图形编程语言和开发环境,在相同硬件条件下,利用LabVIEW编写不同软件即可实现不同的仪器功能,实现了“软件即仪器”的设计理念。通过图像化编程,用户可以设计模拟真实仪器面板的控制界面,其丰富的图形控件可以满足用户数值输入/输出、图表/文本显示等需求,开发友好交互的人机界面。
FTDI公司生产的FT232H芯片是一款单通道高速USB转UART/FIFO接口芯片,能够用于各种串行和并行I/O配置,包含专有动态双向数据总线,可通过外部存储器完成其工作模式的配置。它不仅支持异步串行接口(UART),还通过其内建的多重协议同步串行引擎(MPSSE)支持许多同步I/O接口,如SPI、I2C、JTAG及FPGA接口。其具体功能特性如下:
(1)供电方式:总线供电、直流电源供电;
(2)通过外部EEPROM进行功能配置,该芯片可以实现多种单通道USB转串行、并行接口;
(3)内部集成完整固件程序;
(4)通信速率:全速12Mbit/s、高速480Mbit/s;
(5)异步245FIFO模式下,数据传输速率为8Mbytes/s ;
(6)提供VCP和D2xx驱动,其中VCP用来驱动USB转串口设计,D2xx用来驱动USB通信应用。
USB接口硬件电路设计如图1所示,FT232H芯片采用总线供电,将总线电源输出引脚经过一个滤波电路接到该芯片的VREGIN引脚,给整个USB硬件电路供电。USB接口的差分数据线分别连接到FT232H芯片的DM引脚和DP引脚,用于数据传输。FT232H芯片外接12MHz晶振,分别接到该芯片的OSCI引脚和OSCO引脚。FT232H芯片的锁相环电源由该芯片内部提供,经过一个LC滤波电路连接到VPLL引脚,同时利用内部锁相环产生所需的工作时钟信号。
USB接口通信方式采用异步245FIFO模式,数据传输速率为64Mbit/s。在该模式下,FT232H芯片ADBUS0~ADBUS7分别连接数据输入引脚D0~D7,用于接收待传输数据。FPGA产生USB接口传输控制信号,连接至FT232H芯片ACBUS0~ACBUS4,分别是读准备信号、写准备信号、读信号、写信号和睡眠唤醒信号等,用于控制数据传输过程。
USB接口通信方式的配置需借助于外部EEPROM来完成,电路选用93LC56B芯片,是一款128×16bit低电压、串行EEPROM。该芯片可在+2.5~+5.5V电源下工作,采用符合工作标准的三线式串行I/O口传输数据,可与FT232H芯片直接连接。内建有上电和掉电数据保护电路,防止数据丢失,可保存时间大于200年。通过该EEPROM,在配置通信方式的同时,还可配置USB接口的VID、PID、产品描述字符串等OEM信息,以便于用户开发属于自己的产品。
图1 硬件电路设计
要开发一个完整的USB接口,其过程较为复杂,除其硬件电路设计以外,还包括软件设计过程,主要包括接口芯片固件编程、设备驱动开发和应用软件设计等3个方面。USB接口芯片固件是其各种底层功能函数,用于实现芯片读写等操作。设备驱动主要用于驱动USB设备,使连接上位机之后能被识别。其中,设备驱动还需要完成固件下载的工作,这样用户才能应用设计的固件。完成接口芯片固件和设备驱动的编写之后,编写用户控制软件,按照用户需求控制USB接口通信过程。
FT232H 的芯片内部集成了USB接口通信所需的固件,不需要用户进行独立编写,简化了软件开发工作。可将该USB接口芯片配置为两种不同通信方式,一种是高速USB转为串口通信,另一种是单通道USB通信。USB转串口通信方式是将FT232H模拟为一个虚拟串行口,这样用户通过FT232H可以和上位机的串口相连接并进行通信,该种模式使用芯片公司提供的虚拟串口驱动进行设计。该种传输方式传输速率较低,常应用于对用户已有的串口通信电路进行升级扩展。本文采用单通道USB通信方式,该种模式传输速率较高。要实现该种模式通信,需在上位机中安装D2xx驱动,应用软件调用各种驱动函数即可控制该芯片。该种模式极大地简化了USB开发流程。其主要驱动函数介绍如下:
(1)FT_CreateDeviceInfoList:该函数用于查看某一USB设备的详细信息;
(2)FT_OpenEx:该函数根据USB串码、设备描述等信息打开某一指定USB设备,并返回一个句柄,后续函数通过该句柄识别该设备;
(3)FT_Read:该函数用于从某一句柄指定的USB设备中读取数据;
(4)FT_Write:该函数用于将数据写到某一句柄指定的USB设备;
(5)FT_GetStatus:该函数用以得到某一设备的状态信息;
(6)FT_Purge:该函数用以清空某一指定USB设备的发送和接收缓冲区;
(7)FT_ResetDevice:该函数用于复位某一指定的USB设备。
设备驱动主要用于驱动USB设备,使其连接上位机之后能在上位机中被识别。另外,设备驱动还要完成固件的下载,将固件下载到芯片内部才能控制芯片运行。使用FTDI公司提供的CDM20814驱动软件驱动设备。安装完USB设备驱动之后,用户需要配置外部EEPROM,设置USB设备的各种信息,以及USB接口工作模式。配置使用FT_Prog软件,其设置界面如图2所示。
图2 USB接口外部EEPROM配置软件主界面
通过FT_Prog软件配置USB接口通信方式为异步245FIFO模式。配置USB接口设备VID为0403、PID为6014、产品描述为DAQSYS_USB,同时对其应用管脚进行配置。
LabVIEW作为一种基于计算机平台的图形编程语言和开发环境,其便捷、快速、可视化的编程方式,越来越广泛地被工业界、学术界和实验室所接受,其应用领域已广泛覆盖测试测量、嵌入式、运动控制、图像处理、FPGA等众多领域。
采用LabVIEW软件编写USB通信应用软件,可通过调用动态连接库的方法,调用FTDI公司提供的USB接口设备的固件驱动程序,快速搭建应用程序,实现USB接口的高速数据传输。其步骤如下:
(1)安装动态链接库:安装FTDI公司提供的固件驱动程序到上位机;
(2) 调用动态连接库:通过LabVIEW软件中的“互连接口”模块实现对动态连接库的调用:“互连接口”→“库和可执行程序”→“调用库函数节点”模块;
(3)编写控制软件:利用LabVIEW软件调用各种驱动函数,实现USB接口应用程序开发,其程序流程设计如图3所示。
图3 USB接口通信应用程序流程图
USB接口硬件加电后,软件打开USB设备,与其建立通信连接。然后对USB设备进行初始化,对USB接口设备进行复位,清空其数据缓存区数据。初始化之后,应用软件对USB设备状态进行查询,判断数据缓存区是否被写入数据,当有数据写入时,读出缓存数据,并对数据进行解析,判断数据是否准确,之后对通信数据进行显示。如果查询数据缓存没有数据,则继续等待。
USB接口通信应用程序控制前面板如图4所示,利用FPGA硬件电路,将其内部DDS产生的正弦信号传输至USB接口硬件电路,USB接口电路传输数据至应用程序,应用程序对数据进行显示,验证USB接口高速数据传输能力。
图4 USB接口通信应用程序控制前面板
首先,设置要打开的USB设备为“DAQSYS_USB”,启动前同时清除发送和接收缓存区。配置完成后,启动USB接口进行数据传输,对USB状态进行监控,界面中状态监控一栏将对目前USB设备的各种控制状态进行显示。使用FPGA中DDS以8MHz采样产生1MHz频率的正弦信号,通过USB接口输出,数据通过USB接口传输到上位机界面,上位机界面对传输数据进行显示,对传输数据长度进行统计显示。通过试验,该应用程序可以准确地实现上位机与USB设备间的通信,从而最终达到了程序设计的目的。
本文基于FTDI公司的FT232H芯片,研究了USB总线接口高速数据传输技术,提出了一种基于USB芯片的高速数据传输应用方法。阐述了硬件设计方法和软件开发流程,并利用LabVIEW软件开发了应用程序,且在试验中验证了USB接口的高速数据传输功能。本文所设计的USB接口系统结构简单、性能稳定、易于开发、传输速率快;借助于LabVIEW软件开发工具,大大缩短了应用程序的开发周期,提高了系统的设计效率和设计质量。