基于USB总线的高速数据采集系统
摘要:介绍了一种基于USB总线的高速数据采集系统,讨论了USB控制器EZ-USB FX2CY7C68013的性能及传输方式给出了该系统的硬件和基于GPIF主控方式实现数据传输的软件设计方法。
关键词:USB;数据采集;EZ-USB FX2;GPIF
1 引言
现代工业生产和科学研究对数据采集的要求日益提高。目前比较通用的是在PC或工控机内安装数据采集卡(如A/D卡及422、485卡)。但这些数据采集设备存在以下缺陷:安装麻烦、价格昂贵、受计算机插槽数量、地址、中断资源的限制,可扩展性差,同时在一些电磁干扰性强的测试现场,可能无法专门对其作电磁屏蔽,从而导致采集的数据失真。
传统的外设与主机的通讯接口一般是基于PCI总线、ISA总线或者是RS-232C串行总线。PCI总线虽然具有较高的传输速度(132Mbps),并支持“即插即用”功能,但其缺点是插拔麻烦,且扩展槽有限(一般为5~6个),ISA总线显然存在同样的问题。RS-232C串行总线虽然连结简单,但其传输速度慢(56kbps),且主机的串口数目也有限。
通用串行总线(Universal Serial Bus,简称USB)是1995年康柏、微软、IBM、DEC等公司为了解决传统总线的不足,而推出的一种新型串行通信标准。该总线接口具有安装方便、高带宽、易扩展等优点,已经逐渐成为现代数据传输的发展趋势。基于USB的数据采集系统充分利用USB总线的上述优点,有效地解决了传统数据采集系统的缺陷。USB的规范能针对不同的性能价格比要求提供不同的选择,以满足不同的系统和部件及相应不同的功能,从而给使用带来极大方便。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2 系统介绍
2.1 数据采集系统的结构与功能
常见的数据采集系统的硬件总体结构如图1所示。其中数据采集接口卡是硬件部分的核心,它包括A/D转换器、微控制器、USB通信接口等。
在高速数据采集系统中由于现场输入信号是高频模拟信号,因而信号的变化范围都比较大如果采用单一的增益放大那么放大以后的信号幅值有可能超过A/D转换的量程所以必须根据信号的变化相应地调整放大器的增益。在自动化程度较高的系统中希望能够在程序中用软件控制放大器的增益AD8321正是这样一种具有增益可编程功能的芯片。AD8321是美国AD公司生产的一种增益可编程线性驱动器。它具有频带宽、噪声低、增益可编程且易于与单片机进行串行通信等优点,十分适合在数据采集系统中做前置放大。
经过调理后的信号可送入模/数变换器(ADC)进行A/D变换。笔者选用的ADC是TLC5540,它是一种高速8位模拟数字转换器,能以高达每秒40M的采样速率进行转换,由于采用半闪速结构和CMOS工艺制造,因此功耗和成本很低。其75MHz(典型值)的模拟输入带宽使该器件成为欠采样应用的良好选择。该器件带有内部电阻,可用于从5V电源产生2V满度的基准电压,以减少外部元件数。数字输出置于高阻方式。它仅需要5V电源工作,可由USB总线供电。
由于数据采集接口卡是硬件部分的核心,因此应选择能适用USB协议的合适芯片。EZ-USB FX2是一种USB2.0集成微控制器。它的内部集成了USB2.0收发器、串行接口引擎(SIE)、增强的8051微控制器和一个可编程的串行接口。其主要特性如下:
●带有加强的8051内核性能,可达到标准8051的5~10倍,且与标准8051的指令完全兼容;
●集成度高,芯片内部集成有微处理器、RAM、SIE(串行接口引擎)等多个功能模块,从而减少了多个芯片接口部分需要时序配合的麻烦;
●采用软配置,在外设未通过USB接口接到PC机之前,外设上的固件存储在PC上;而一旦外设连接到PC机上,PC则先询问外设是“谁”(即读设备描述符),然后将该外设的固件下载到芯片的RAM中,这个过程叫做再枚举。这样,在开发过程中,当固件需要修改时,可以先在PC机上修改好,然后再下载到芯片中;
●具有易用的软件开发工具,该芯片开发系统的驱动程序和固件的开发和调试相互独立,可加快开发的速度。
图2 USB接口示意图
2.2 方案选择
FX2有三种可用的接口模式:端口、GPIF主控和从FIFO。
在“端口”模式下,所有I/O引脚都可作为8051的通用I/O口。
在“从FIFO”模式下,外部逻辑或外部处理器直接与FX2端点FIFO相连。在这种模式下,GPIF不被激活,因为外部逻辑可直接控制FIFO。这种模式下,外部主控端既可以是异步方式,也可以是同步方式,并可以为FX2接口提供自己的独立时钟。
“GPIF主控”接口模式使用PORTB和PORTD构成通向四个FX2端点FIFO( EP2 EP4 EP6和EP8)的16位数据接口。GPIF作为内部的主控制器与FIFO直接相连,并产生用户可编程的控制信号与外部接口进行通信。同时,GPIF还可以通过RDY引脚采样外部信号并等待外部事件。由于GPIF的运行速度比FIFO快得多,因此其时序信号具有很好的编程分辨率。另外,GPIF既可以使用内部时钟,也可以使用外部时钟。故此,笔者选择了GPIF模式。
高速数据采集卡的设计存在两大难点:一是模拟信号的A/D高速转换;二是变换后数据的高速存储及提取。对于第一个问题,由于制造ADC的技术不断进步,这个问题已经得到解决。而对于第二个问题,一般的数据采集系统是将A/D转换后的数据先存储在外部数据存储器中,然后再对其进行处理。对于高速数据采集而言,这种方式将严重影响采集速度,且存储值也会受到很大限制。而改进方案是将A/D转换后的数据直接送至计算机内存,这样,采集速度将大大提高,而且可存储大量数据,以便于下一步的处理。
为了解决同步问题,可以由CPLD产生同步时钟信号提供给ADC和FX2。在本数据采集系统的设计中,CPLD同时还可用于产生不同的控制信号,以便对采样进行实时控制。CPLD是复杂可编程逻辑器件,它包括可编程逻辑宏单元、可编程I/O单元和可编程内部连线。由于CPLD的内部资源丰富,因而可广泛应用在数据采集、自动控制、通讯等各个领域。在本系统的设计中,笔者选用的CPLD是Lattice公司的ispLSI1016。图2所示是其整个USB接口卡的硬件电路图。
3 系统软件设计
该系统软件主要包括USB设备驱动程序、设备固件和应用程序。
3.1 设备固件(Firmware)设计
设备固件是设备运行的核心,可采用汇编语言或C语言设计。其主要功能是控制CY7C68013接收并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态,请求或设置设备接口等USB2.0标准请求)、控制芯片CY7C68013接收应用程序的控制指令、控制A/D模块的数据采集、通过CY7C68013缓存数据并实时上传至PC等。
即使外部逻辑或内置的普通可编程接口(GPIF)在没有CPU的任何干涉下能够通过四个大的端点FIFO来处理高速宽带数据,固件还是有如下固定的工作:
●配置端点;
●通过控制端点零来响应主机请求;
●控制和监测GPIF的活动;
●利用USART处理所有的特殊请求任务,如计时器、中断、I/O引脚等。
3.2 USB设备驱动程序开发
USB系统驱动程序采用分层结构模型分别为较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线驱动程序模块(USBD)和较低级的主控制器驱动程序模块(HCD)。
在上述USB分层模块中,USB函数层(USBD及HCD)由Windows提供,负责管理USB设备驱动程序和USB控制器之间的通信;加载及卸载USB驱动程序;与USB设备通用端点(endpoint)建立通信并执行设备配置、数据与USB协议框架和打包格式的双向转换任务。目前Windows提供有多种USB设备驱动程序,但并不针对实时数据采集设备,因此需采用DDK开发工具来设计专用的USB设备驱动程序。该设备驱动程序应由初始化模块、即插即用管理模块、电源管理模块以及I/O功能等四个模块来实现。
初始化模块可提供一个DriverEntry入口点以执行大量的初始化函数。
即插即用管理模块用来实现USB设备的热插拔及动态配置。当硬件检测到USB设备接入时,Windows查找相应的驱动程序,并调用它的DriverEn-try例程,同时告诉它添加了一个设备;然后,驱动程序为USB设备建立一个FDO(功能设备对象)。在此处理过程中,驱动程序收到一个IRP MN START DE-VICE 的IRP,在它之中包括有设备的资源信息。至此,设备被正确配置,驱动程序开始与硬件进行对话。当然,在设备运行过程中,如果设备状态发生变化(拔除、暂停等),PnP管理器也同样发出相应的IRP,以便由驱动程序进行相应的处理。
电源管理模块负责设备的挂起与唤醒。
I/O功能实现模块可完成I/O请求的大部分工作。当应用程序提出I/O请求时,它将调用Win32 API函数DeviceIoControl向设备发出命令,然后由I/O管理器构造一个IRP并设置其MajorFunction.域为IRP MJ DEVICE CONTROL。在USB设备驱动程序收到该IRP后它将取出其中的控制码并利用一个开关语句查找对应的程序入口。
3.3 应用程序设计
应用程序设计由两个部分组成:动态链接库和应用程序。动态链接库负责与内核态的USB功能驱动程序通信并接收应用程序的各种操作请求,而应用程序则负责对所采集的数据进行实时显示、分析和存盘。
javascript:window.open(this.src);" style="cursor:pointer;"/>