|
VISA-Based High Speed USB DAQ System 摘 要:高速USB数据采集系统的设计严格遵循USB2.0协议,体现了USB即插即用、易扩展、低干扰的特点,从而实现了主机和测试设备之间简单、快速、可靠的连接和通信。VISA能为仪器通讯定义应用程序界面(API)﹐当硬件采用新的总线接口或混合式I/O系统﹐而应用程序不需要重新编程。该文介绍了此数据采集系统的硬件、驱动和固件的设计并介绍了采用虚拟仪器软件LabWindows/CVI在VISA技术上开发的应用程序设计方法。 关键词: VISA; LabWindows/CVI; USB; 高速数据采集 ABSTRACT: The design of this high speed USB DAQ system strictly abides by protocol USB2.0, it can communicate simply, fast and reliably between the host and USB devices. VISA can define the API for instrument communication. The application needn’t reprogram when hardware is changed. This article introduces the design of hardware, device driver, fireware and the application using VISA for a USB bus based data acquirement system. KEYWORD: VISA; LabWindows/CVI; USB; High Speed DAQ; 1 引言 USB(Universal Serial Bus)总线是由Intel,Compaq,Microsoft,IBM,DEC,Northern Telecom等7家公司共同研制的一种针对PC的串行接口标准。它的热插拔、即插即用、连接简单、高带宽、可总线供电等优点几乎使其成为目前计算机外设的首选通信接口。该文依据的是USB2.0协议规范,其数据传输率最高可以达到480Mb/s,完全可以满足高速CCD数据采集系统的需要。 为使工业软件兼容性更进一步﹐VXI即插即用系统联盟开发了一个I/O软件的规格 —VISA(Virtual Instrument Software Architecture)。VISA是一个用来与各种仪器总线进行通讯的高级应用编程接口(API)。它不受平台、总线和环境的限制。换言之,与GPIB 设备进行通讯的程序,无论是在运行Windows 2000的机器上用LabVIEW或LabWindows/CVI开发出来的,还是在运行 Mac OS X的机器上用C语言编写的,都可以使用同一个API。 2 系统接口硬件组成 本系统的硬件主要由数据处理模块、存储器模块、输入模块和输出模块组成。所有的模块都挂在系统的高速I/O总线上,系统采用高速的AD(模数)转换器来采集CCD信号,采用FIFO存储器作为数据高速缓冲器来存储待发送的数据,并采用具有微控制器的USB接口芯片,从而将采集到的CCD数据通过USB接口发送至PC机。总体设计框图如图1。  图1 系统总体框图 其中使用FPGA技术完成本采集系统的控制模块。FPGA(现场可编程门阵列)技术已经成为当今设计数字电路最为流行的方式,它可以将数字电路集成到一块芯片上,大大减小了电路板的体积和可靠性,而且他的可编程性使得设计好的电路在升级和修改上变得非常简单和方便。USB控制芯片选用Cypress公司的EZ-USBFX2,USB2.0控制芯片是CY7C68013,片内嵌有一个增强型的8051微控制器,并使用片内RAM作程序和数据存储器,使得芯片具有软特性,允许客户随时不断地设置和升级。其内部框图如图2所示。  图2 EZ-USB FX2 内部框图 EZ-USBFX2符合USB规范2.0版本,有4种传输方式:控制传输、中断传输、批量传输和同步传输。在本系统中采用的是批量传输方式,数据传输速度达到480Mb/s。 3 软件设计 软件主要分为3部分:USB芯片的固件程序、USB设备驱动程序以及PC机的用户应用程序。固件响应各种来自系统的USB标准请求,完成各种数据的交换工作和事件处理。USB-驱动程序为USB采集系统提供了应用软件与USB设备的接口,它的开发使USB广泛应用于数据采集系统成为可能。而应用程序则实现用户与采集系统的交互,完成数据采集命令,进行实时显示。 3.1 固件程序设计 Cypress公司为CY7C68013提供了一个开发框架,可以在KEIL C51环境下开发。由于开发框架的引入,从而大大缩短了用户的研发周期。该框架由以下几部分组成: (1)FW.C中包含了程序框架的MAIN函数,管理整个51内核的运行,因为Cypress对这个部分的功能进行了精心划分,一般是不用改动的。 (2)用户必须将PERIPH.C实例化,它负责系统周边器件的互联。固件的设计主要针对这个文件,用户必须根据自己系统的需要,实例化这个文件,以实现自己的功能。在这个文件中有几个函数是比较关键的,在这里做一下特别说明: •TD_Init函数,负责对USB端点进行初始化设置。本设计中将端点6设置为1024个字节,缓存深度为4级,模式设为自动输入方式。 •TD_Poll函数,负责系统中循环任务的处理。它主要是对各个端点的状态进行查询,处理各种OUT或IN端点的交互。值得说明的一点是,这种处理只是辅助性质的,大部分工作由硬件自动完成。 •DR_VendorCmnd函数,主要负责用户自定义命令的译码工作,用户请求通过端点O传输给内核。由于CY7C68013上SIE硬件的支持,用户只需查询固定地址单元即可获得当前的命令代码。 •GPIFINIT.C,其中只有一个Gpiflnit函数;它是GPIF模块的初始化函数,一般在TD_Init函数中调用。这个函数是由Cypress公司提供的一个GPIF Designer开发工具根据用户设计的波形生成的,用户不需要自己设计波形查询表,减轻了设计者的工作强度。 •DSCR.A51是描述表文件,负责USB设备的描述工作,CY7C68013在上电后自动利用其中的VID和PID取代默认的VID和PID。 •两个包含文件EZUSB.LIB和USBJMPTB.OBJ,前者是EZUSB函数库的二进制文件,后者是USB的中断向量表。固件调试,使用Cypress提供的EZ-USB control panel,具体的操作读者可以参考其自带帮助。 3.2 驱动程序设计 该系统需要两个驱动程度,即通用驱动和下载固件驱动。通用驱动用于完成与外设和用户程序的通信及控制;而下载固件驱动程序则负责在外连接USB总线后把特定的固件程序下载到FX2的RAM中使FX2的CPU重启,同时模拟断开与USB总线的连接以完成对外设的重新设置,这种即可使主机能够根据新的设置来安装通用驱动程序,重新格举外设为一个新的USB设备。通用驱动程序一般不需要重新编写,可以使用Cypress公司已经编好的驱动ezusb.sys。由于在Winsows2000操作系统中已经新增了媒体存储(Mass Stroage)设备的驱动程序,并可使用批量传输功能,所以可以直接选择BULKUSB.SYS驱动程序,而下载固件驱动则必须定做。 开发USB设备驱动程序的工具目前广泛应用的主要有2类: (1)Windows DDK(Device Driver Kits),DDK基于汇编语言的编程方式和内核模式的调用,对没有深厚的操作系统原理和编程水平的人员来说,任务相当艰巨。 (2)NuMega公司的Driverstudio工具开发包,其中的DriverWorks实际上实现了对DDK类的封装,可以提供给用户驱动程序的开发框架,只需用户在相应的代码段中加入自己系统的控制代码即可,不必了解内核机制,大大加速了USB外设的开发速度。 3.3 应用程序设计 PC主机是实时数据采集系统的中心,应用程序实现的功能有:启动/关闭USB设备,设置USB数据传输管道/端口,采集数据,显示数据等。这里采用NI公司的虚拟仪器软件开发工具Labwindows CVI7.0作为开发环境,应用程序中使用了VISA技术和多线程的编程思想,从而实现同时进行数据采集与实时显示。 3.3.1配置 NI-VISA 来控制USB设备 本系统用NI-VISA 3.0来控制USB RAW设备(USB RAW 设备是指除了明确符合USBTMC 规格的仪器之外的任何USB仪器)。具体配置步骤如下: a. 选择“开始\程序\National Instruments\VISA\VISA Driver Developer Wizard”,打开DDW b.选择USB,并点击Next。此时出现VISA DDW 基本设备信息窗口,包括USB仪器的USB供应商ID(VID)和产品ID(PID)。这些数字可以在您安装USB设备的时候对其进行确认,或者从控制面板-〉系统-〉硬件管理器中已为此USB设备安装好的驱动详细信息里面查找,PIDXXXX和VIDXXXX即是。然后点击Next。 c.填写USB Instrument Prefix (USB仪器前缀) ,用它来识别本设备所用的相关文档。点击Next,选择“Install the setup information file for this operating system for me”,然后点击Finish。这时INF、PNF文档就被建好并保存在“C:\ WINDOWS\ INF”位置了。 上述几个安装步骤成功后,你会发现“硬件管理器”中“通用串行总线控制器”下原来的USB设备消失了,在“硬件管理器”中会出现“NI-VISA USB Device”,而且此目录下就有你原来的那个USB设备。同时,在NI的Mesurement & Automation(MAX)软件中“Device and interfaces”下也会出现“USB0::0x0547::0x1005::NI-VISA-0::RAW”设备名,现在就可以通过此设备名来控制该USB 设备了。 3.3.2 应用程序设计 配置好了NI-VISA,你就可以使用VISA技术来与USB驱动程序进行通信以完成相应功能。为了实现与驱动程序的通信,首先应为默认资源管理器生成一个session, 然后再为指定的USB设备生成一个session,并为这个session返回句柄,此时就可以使用这个句柄对该USB设备进行读/写或其它控制了。这过程所用VISA函数为: viOpenDefaultRM(&defaultRM); //为默认资源管理器生成一个session viOpen(defaultRM, “USB0::0x0547::0x1005::NI-VISA-0::RAW”, VI_NULL, VI_NULL, &usbSesn); //为指定的USB设备生成一个session viRead(usbSesn, DataBuf, RdUsbNum, &retCount);//读取USB设备数据 viWrite(usbSesn, DataBuf, WtUsbNum, &retCount);//向USB设备写入数据 viClose(usbSesn); //关闭USB设备 整个PC机上的应用程序设计思路是首先程序初始化,创建session和获得USB设备句柄,然后应用程序创建二个线程,一个读USB线程,一个数据显示线程,读线程得到的CCD数据放在公共的安全队列中,供数据显示线程读取并按照约定的帧格式解帧并图形显示。基于VISA的USB数据采集应用程序流程图如图3所示:  图3 基于VISA的USB数据采集应用程序流程图 3.3.3 应用程序界面 应用程序界面如图4所示:  图4 应用程序界面 4 结 语 本系统实现了对CCD信号的高速数据采集和利用VISA技术实现了计算机与USB之间的高速通信,它安装方便,即插即用,性价比高,远优于并行口和串行口的CCD图像采集系统。本系统目前已经成功地进行了实际的应用,效果良好。 参考文献 1.NI VISA 用户手册 2000.9 2.USB1.1.Universal Serial bus specification[S].1995 3.王念旭.DSP基础与应用系统设计[M].北京:北京航空航天大学出版社,2001
|