USB读数装置及上位机的设计
扫描二维码
随时随地手机看文章
摘要:数据采集系统是将传感器输出的模拟信号进行采集,转换成数字信号,然后送入计算机进行处理,并按所需要的形式输出处理结果的系统。但在一些应用场合,数据采集后无法立即进行数据分析,因而把数据存入记录器,事后由读数装置把数据从记录器中读取到计算机中处理分析。为此介绍了一套基于USB和FPGA的读数装置,利用该装置可以将记录器中的数据读取到计算机上。
关键词:USB;FPGA;CY7C68013
数据采集在信息处理系统中占有不可替代的地位,它是以传感器、信号测量与处理、微型计算机等技术为基础而形成的,主要研究信息数据的采集、存储、处理以及控制等作业,具有很强的实用性。数据采集技术已经在雷达、通信、水声、遥感、语音处理、智能仪器、工业自动化以及生物医学工程等众多领域得到广泛的应用。数据采集器一般包括数据采集部分和数据处理传输部分。前者包括信号的滤波、放大、采样、保持、转换、存储等部分,后者包括数据读取、传输及微机接口部分。
1 系统结构及硬件电路设计
1.1 系统的结构框图及工作原理
本系统主要由四个模块构成:FLASH存储器模块、FPGA控制模块、USB接口控制模块及电源模块。如图1所示。
其工作原理是:FLASH模块存储数据,作为记录器的数据源;FPGA模块作为读数装置的控制器,读取FLASH的数据并传输给USB控制接口模块;USB控制芯片接收来自上位机的命令,并与FPGA通信来执行用户需要的操作;电源模块为各模块提供稳定电源。
1.2 电源管理模块
本系统中芯片的工作电压有5 V、3.3 V、2.5 V。由于计算机的USB接口可以提供5 V电源,最大为500 mA的电流,对于此系统已足够,所以本系统的5 V电源直接由USB供电,并利用5 V电源经过电压调节器AMS1117调整出3.3 V和2.5 V电源。
1.3 FPGA模块
本设计的FPGA采用XILINX公司的Spartan-2系列的XC2S50,包括FPCA配置电路和FPGA时钟电路及接口配置。
FPGA的配置方式灵活多样,本设计根据芯片是否能够自己主动加载配置数据以及比特流的位宽,利用主串模式进行配置FPCA,如图2所示。在FPGA的输出端口上为每个端口连接了一个电阻,起到耦合限流的作用,使外部接口与FPGA进行匹配,防止电流过大等不良影响而烧坏芯片。
1.4 USB接口模块
一般USB的接口芯片种类大致可分为:主控制器、根集线器、接口芯片以及具有USB接口的微控制器。本设计利用的是EZ-USB FX2LP系列的CY7C68013A-128PIN芯片。
本设计采用0XC0的EEPROM启动方式。即在EEPROM中首字节写入0XC0,并将VID、PID、DID和配置字节写入EEPROM。芯片上电后,将这些数据复制到片内存储器,并将其发送给主机,由主机根据ID数据选择合适的固件程序下载到USB芯片内。本设计使用具有I2C总线接口的串行EEPROM芯片AT24C64。AT24C64具有8192 x 8位容量,可重复擦除100万次。
1.5 FLASH存储器模块
FLASH存储器存储着记录器的数据,本设计的目的就是从FLASH中读取数据并传入计算机进行保存。本设计采用SAMSUNG公司的K9F5608UO D NAND FLASH存储器。其特点如下:存储单元阵列为(32M+1024k)bit×8bit;总共64k的块,每块含32页,每页为512+16字节;以页为单位编程(200μs典型编程时间),以块为单位擦除(2ms典型擦除时间);命令、地址、数据复用端口;提供硬件数据保护功能。
本设计的硬件连接电路如图3所示。其中MAX1658为K9F5608UOD提供电源,排阻起到耦合限流作用。
2 软件程序设计
2.1 FPGA各模块程序设计
本设计的FPGA程序采用Xilinx公司的ISE软件。它提供给用户一个从设计输入到综合、布线、仿真、下载的全套解决方案,并可以很方便的与其他EDA工具接口。
本设计中原理图输入采用其中的第三方软件ECS,HDL综合使用XST,测试台输入是图形化的HDL Bencher,仿真使用Modelsim SE。简要的流程如下:
建立工程项目;综合;仿真;定义输入输出管脚约束;布局布线;下载配置。
FLASH模块程序设计中FLASH控制模块对FLASH存储器K9F5608UOD执行各种操作。K9F5608UOD芯片提供了8种命令,即8种操作:①读1操作;②读2操作;③读ID操作;④复位操作;⑤页编程操作;⑥复制回读操作;⑦块擦除操作;⑧读状态操作。
2.2 CY7C68013固件程序开发
USB功能设备的硬件功能主要由硬件上的微处理器来实现,因此需要为USB设备编写固件程序。本设计的USB固件程序开发中,使用Keil Software公司推出的51系列兼容单片机软件开发系统Keil μVision3。
图4所示为68013A的固件程序流程图,下面介绍如何编程。本设计采用固件框架中的Dscr.a51文件,修改设备描述符中的ID码和字符串描述符,并修改相应的端口配置,其余保持默认状态。主机发送8字节的SETUPDAT数据包后,68013A将其进行解码存入SETUPDAT寄存器中。
SETUPDAT[1]中存储着USB发出的请求码。在固件程序中使用switch-case语句对不同的请求码进行分析,分别进行相应的响应。
对于标准USB请求,在CY3684开发包内已有完善的函数框架,本设计在保持其默认状态下,修改其中的处理函数,使其符合本设计的要求。在Fw.c文件中,最主要的两个函数为Main( )函数和SetupCommand( ),其中Main( )函数控制整个68013A的程序流程,SetupCommmad( )则对不同的设备请求进行分析,并调用响应的执行程序。
在本设计需要使用自定义请求来介绍上位机的FLASH操作命令,因此需要在USB固件程序中声明自定义请求。自定义请求和标准USB请求放在一起,但不能和已有的请求号相冲突。同时还需要编写自定义请求对应的处理函数。程序框架如下:
此请求包处理放在SetupCommand(vdd)函数内。
对于对应的处理函数则在Pefiph.c文件中进行定义。所有的USB设备请求响应函数,中断函数都在此文件中定义。同时设备初始化函数TD_Init( ),用户功能函数TD_Poll( ),挂起函数TD_Suspend( )和USB复位函数( )也都在此文件中定义。
本设计采用在上位机发送自定义请求A1,并在自定义请求中包含对FLASH操作的命令字,68013A在分析得到自定义请求A1后,在自定义请求A1中把命令字保存入一个全局变量,在用户功能函数TD_Poll( )中执行对命令字的分析并调用相应的FLASH操作函数。对于传输到上位机上的数据通过自定义请求A2、A3来执行。
3 结论
本设计根据USB总线技术、FPGA技术及面向对象程序设计方法,对电路的组成原理、接口电路设计、系统控制信号的设计及USB上位机程序的设计做出详细的说明,设计出基本符合课题要求的USB读数装置及上位机程序,基本完成了工作要求。当然本设计在USB接口的速度方面还需考虑更完善的方案。希望在以后的学习工作中能够改进。