基于USB2.0的同步高速数据采集器的设计
4 软件设计
USB设备的软件设计包括三方面:固件设计、硬件驱动程序设计以及高级应用程序的设计。
4.1 固件(firmware)设计
Cypress公司为CY7C68013提供了一个开发框架,可以在KEIL C51环境下开发。由于开发框架的引入,从而大大缩短了用户的研发周期。该框架由以下几部分组成:
(1)FW.C中包含了程序框架的MAIN函数,管理整个51内核的运行,因为Cypress对这个部分的功能进行了精心划分,一般是不用改动的。
图3
(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,具体的操作读者可以参考其自带帮助。
4.2 驱动程序的设计
驱动程序负责对底层硬件的访问。在本设计的驱动程序开发中,使用的开发工具是Jungo公司的WinDriverv6.03,它支持多种操作系统。利用WinDriver开发的优点是用户不需要了解操作系统内部的具体工作机理,同时也不需要了解各个系统DDK(Developing or Debugging in Kernel)的开发工具,用户只需使用WinDriver提供的开发平台,即可完成驱动程序的设计工作,剩下的底层细节由WinDriver内核统一处理,从而降低了对开发者编程能力的要求,同时也大大缩短了开发周期。下面就使用WinDriver开发驱动程序的步骤做一个简要说明(以在Windows操作系统下的开发为例):
(1)启动WinDriver的DriverWizard工具;
(2)利用DriverWizard检测硬件是否正常;
(3)在DriverWizard中选择所使用的开发环境,这里使用VB6.0开发环境,并生成驱动程序代码;
(4)对生成的代码进行修改,使其符合系统的需要;
(5)在WinDriver环境的用户模式下,调试驱动程序;
(6)如果程序需要内核访问,以提高驱动程序的效率,进入内核开发。javascript:window.open(this.src);" style="cursor:pointer;"/>
4.3 高级应用程序的设计
高级应用程序建立在驱动程序之上,在本设计中,选用了VB6.0的开发环境来开发应用程序。它以驱动程序为桥梁,对USB设备进行命令控制,处理USB设备传回的数据,例如波形显示、频谱分析等。开发者可以依据自己的实际需求,制作一个USB控制器的控件或数据包,在编写应用程序时连接或嵌入到应用程序中。
随着笔记本电脑的迅速普及,高性能便携式采集器将会倍受瞩目,尤其是在RS-232接口已被大多数笔记本电脑摈弃的今天,对USB数据采集器的需求就变得更加迫切,并已显示出了良好的市场前景。本文所述的基于USB2.0的高速同步数据采集器就其功能来说已不仅限于数据采集,应该说是一个功能强大的混合信号处理器。经过在水下机器人声纳和浙江深水网箱监测设备中的使用表明数据吞吐量大、性能稳定,达到了设计要求。只要搭配合适的传感器以及相应的信号调理电路,利用本文所述的高性能采集器,就可以对各种模拟量进行采集和分析处理。如果再能够配以合适的固件设计,则完全可以构成一个多功能控制系统。