USB 2.0接口数据采集系统方案设计
扫描二维码
随时随地手机看文章
在图像处理、瞬态信号测量等一些高速、高精度的应用中,需要进行高速数据采集。USB 2.0接口以其高速率等优点渐有取代传统ISA及PCI数据总线的趋势,热插拔特性也使其成为各种PC外设的首选接口。EZ-USB FX2是Cypress公司推出的集成USB 2.0的微处理器,它集成了USB 2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。本文将介绍基于EZ-USB FX2系列CY7C68013芯片的高速数据采集系统的设计,该系统具有限幅保护功能,固件和驱动程序的编写简便,能够完成对数据的高速采集和传送。
近年来,USB接口由于其传输速率高,真正的即插即用等优点正在逐渐取代传统的计算机接口如:RS232,EPP等。目前,许多的芯片生产商都推出了符合USB协议的芯片,如Philips公司的PDIUSBD12,NS公司的USBN9602等。在众多的USB2.0芯片中,Cypress公司的EZ-USB FX2(CY7C68013)芯片是一个不错的选择。本文设计了一种基于EZ-USB FX2和MAX1195的数据采集系统,该系统符合USB2.0协议标准,通过与高精度激光纵模分析仪连接进行调试,证明该系统达到了预定目的。
2. CY7C68013芯片和MAX1195芯片介绍
2.1 CY7C68013介绍:
CY7C68013在一块芯片上同时集成了USB2.0收发器,串行接口引擎SIE,增强型的8051微控制器以及一个可编程外围接口GPIF(General Programmable Interface)。CY7C68013的“量子FIFO”(FIFO,先进先出存储器)特性使得无需8051CPU的任何干预,数据即可从外设上传到主机,这种数据传输模式彻底解决了USB2.0收发器与一般8051微控制器连接时由于8051的时钟频率低而导致的传输速率瓶颈问题。CY7C68013芯片的另一个突出优点是其“‘软’配置”,代码和数据能够直接通过USB接口下载到片内的RAM上,这一功能通过Cypress公司独创的“重枚举”(ReNumerationTM)功能实现。CY7C68013芯片有四个可编程的批量、中断、同步传输端点,可以分别设置为双缓冲,三缓冲和四缓冲模式,8位或者16位的外部数据接口,该接口可以根据需要工作在 GPIF或者SLAVEFIFO模式。其中GPIF能够和绝大部分并行接口如FIFO等实现“无胶”连接,即无需外加任何微控制器或CPLD、FPGA 等。本文的设计中采用了GPIF方式。
2.2 MAX1195介绍:
MAX1195是由MAXIM公司推出的一款低功耗、双路、高速、八位模数转换芯片,采用流水线(Pipeline)结构,最高采样率40Mbps,内部集成了两个 ADC,真正实现两路同步采样转换。其工作电压范围是2.7V-3.6V,具有减小功耗的休眠模式和关断(Shut-Down)模式,单端或者差分输入方式,片上采样保持(T/H)电路,内部或者外部参考电压,含有用户可选择的数据输出格式:二的补码格式或者补偿二进制码格式,具有输出使能控制,可以将输出置为高阻态。此外MAXIM还提供了与MAX1195引脚、封装完全兼容的10位、更高采样率的模数转换芯片,如MAX1197、MAX1198等,因此系统升级非常方便。在本文的工作中,采用了内部参考电压、双路单端模拟输入、补偿二进制码输出格式。
数据采集系统方案设计
数据采集系统的框图如图1所示,硬件电路如图2所示。其中,AD1674是l2位模数转换芯片,采用逐次比较方式工作。CPLD主要用于控制ADC以及FIFO的时序、控制ADC的启动与停止和查询ADC的状态等。FIFO主要起着高速数据缓冲的作用。
图1 数据采集系统框图
图2 系统硬件电路
CY7C68013和AD1674之间通过CPLD连接,实现相关控制线和数据线的译码。在CY7C68013的控制下,首先对AD1674进行间隔采样,然后把结果传送到FIFO中,当采集到一定量的数据后,CY7C68013将数据打包通过USB总线传到PC,由高级应用程序进行数据处理。扩展的 RS232接口可以和外部设备进行通信。上电时,CY7C68013从外部的E2PROM中通过I2C总线自动装载到内部的RAM中,便于固件的修改和升级。
数据采集前端的调理电路如图3所示,本设计采用了限幅、降压、滤波和增加输入阻抗的措施来保护后端的转换芯片。
驱动程序和固件设计
USB设备驱动程序基于WDM。WDM型驱动程序是内核程序,与标准的Win32用户态程序不同,采用了分层处理的方法。通过它用户无须直接与硬件打交道,只需通过下层驱动程序提供的接口访问硬件。因此,USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通信接口和通信的数据格式,也必须定义与应用程序的接口。Cypress公司提供了完整的 CY7C68013驱动程序源码、控制面板程序及固件的框架,这大大加快了用户开发的进度。用户只需稍加修改或无须任何修改即可使用现有驱动程序,软件开发者大量的时间主要集中在应用程序和固件的开发。根据用户自己的需求,一般只需修改DeviceIoControl例程。本设计主要增加了控制数据传输函数、启动和停止ADC、复位FIFO等。Cypress为CY7C68013提供了开发框架,其中两个程序如下。
FW.C:FW.C中包含了程序框架的MAIN函数,管理整个51内核的运行,因为这部分的功能已经进行了精心划分,一般是不用改动的。
图3 调理电路
PERIPH.C:用户必须将PERIPH.C实例化,它负责系统周边器件的互联。固件的设计主要针对这个文件,用户必须根据自己系统的需要,实例化这个文件,以实现所需的功能。在固件程序中,最重要的是TD_init()和TD_poll()这两个函数。以TD_poll()函数为例,在 TD_poll()中主要完成外部FIFO状态的检测和数据的传输,程序主体部分如下。固件调试时,可以使用Cypress提供的EZ-USB control panel。
Void TD_Poll(void)
{
If(GPIFTRIG & 0x80) //判断GPIF是否空闲
{
If(EXTFIFONOTEMPTY ) //判断外部FIFO是否非空
{
If(!(EP24FIFOFLGS & 0x01)) //判断FIFO是否不满
{
IF(enum_high_speed)
{
SYNCDELAY;
GPIFTCB1=0x02; //设置处理计数
SYNCDELAY;
GPIFTCB0=0x00;
SYNCDELAY;
}
Else
{
SYNCDELAY;
GPIFTCB1=0x00;
SYNCDELAY;
GPIFTCB0=0x20;
SYNCDELAY;
}
Setup_FLOWSTATE_Read();
SYNCDELAY;
GPIFTRIG=GPIFTRIGRD|GPIF_EP2;
SYNCDELAY;
While(!(GPIFTRIG & 0x80))
{;}
SYNCDELAY;
}
}
}
}