APP下载

USB读数装置及上位机的设计*

2012-07-17李文燕徐香菊

山西电子技术 2012年1期
关键词:固件存储器上位

李文燕,郭 涛,徐香菊

(中北大学仪器科学与动态测试教育部重点实验室,中北大学电子科学与技术系,山西太原030051)

数据采集在信息处理系统中占有不可替代的地位,它是以传感器、信号测量与处理、微型计算机等技术为基础而形成的,主要研究信息数据的采集、存储、处理以及控制等作业,具有很强的实用性。数据采集技术已经在雷达、通信、水声、遥感、语音处理、智能仪器、工业自动化以及生物医学工程等众多领域得到广泛的应用。数据采集器一般包括数据采集部分和数据处理传输部分。前者包括信号的滤波、放大、采样、保持、转换、存储等部分,后者包括数据读取、传输及微机接口部分。

1 系统结构及硬件电路设计

1.1 系统的结构框图及工作原理

本系统主要由四个模块构成:FLASH存储器模块、FPGA控制模块、USB接口控制模块及电源模块。如图1所示。

其工作原理是:FLASH模块存储数据,作为记录器的数据源;FPGA模块作为读数装置的控制器,读取FLASH的数据并传输给USB控制接口模块;USB控制芯片接收来自上位机的命令[1],并与FPGA通信来执行用户需要的操作;电源模块为各模块提供稳定电源。

图1 系统总体结构框图

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,包括FPGA配置电路和FPGA时钟电路及接口配置。

FPGA的配置方式灵活多样,本设计根据芯片是否能够自己主动加载配置数据以及比特流的位宽,利用主串模式进行配置FPGA,如图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公司的K9F5608U0D NAND FLASH存储器[2]。其特点如下:存储单元阵列为(32M+1024k)bit×8bit;总共64k的块,每块含32页,每页为512+16字节;以页为单位编程(200μs典型编程时间),以块为单位擦除(2ms典型擦除时间);命令、地址、数据复用端口;提供硬件数据保护功能。

本设计的硬件连接电路如图3所示。其中MAX1658为K9F5608U0D提供电源,排阻起到耦合限流作用。

图2 FPGA配置电路

图3 FLASH存储器连接电路

2 软件程序设计

2.1 FPGA各模块程序设计

本设计的FPGA程序采用Xilinx公司的ISE软件。它提供给用户一个从设计输入到综合、布线、仿真、下载的全套解决方案,并可以很方便的与其他EDA工具接口。

本设计中原理图输入采用其中的第三方软件ECS,HDL综合使用XST,测试台输入是图形化的HDL Bencher,仿真使用Modelsim SE。简要的流程如下:

建立工程项目;综合;仿真;定义输入输出管脚约束;布局布线;下载配置。

FLASH模块程序设计中FLASH控制模块对FLASH存储器K9F5608U0D执行各种操作。K9F5608U0D芯片提供了8种命令,即8种操作:①读1操作;②读2操作;③读ID操作;④复位操作;⑤页编程操作;⑥复制回读操作;⑦块擦除操作;⑧读状态操作。

2.2 CY7C68013[3]固件程序开发

USB功能设备的硬件功能主要由硬件上的微处理器来实现,因此需要为USB设备编写固件程序。本设计的USB固件程序开发中,使用Keil Software公司推出的51系列兼容单片机软件开发系统Keil μVision3。

图4所示为68013A的固件程序流程图,下面介绍如何编程。本设计采用固件框架中的Dscr.a51文件,修改设备描述符中的ID码和字符串描述符,并修改相应的端口配置,其余保持默认状态。主机发送8字节的SETUPDAT数据包后[4],68013A将其进行解码存入 SETUPDAT寄存器中。SETUPDAT[1]中存储着USB发出的请求码。在固件程序中使用switch-case语句对不同的请求码进行分析,分别进行相应的响应。

图4 固件程序流程图

对于标准USB请求,在CY3684开发包内已有完善的函数框架,本设计在保持其默认状态下,修改其中的处理函数,使其符合本设计的要求。在Fw.c文件中,最主要的两个函数为Main( )函数和SetupCommand( ),其中Main( )函数控制整个68013A的程序流程,SetupCommand( )则对不同的设备请求进行分析,并调用响应的执行程序。

SetupCommand( )程序框架如下:

Void SetupCommand(void)

{ void*dscr_ptr; //指针变量

Switch(SETUPDAT[1]) //根据请求包类型分别处理

{//协议及请求处理代码

}

EP0CS|=bmHSNAK;

//握手

}

在本设计需要使用自定义请求来介绍上位机的FLASH操作命令,因此需要在USB固件程序中声明自定义请求。自定义请求和标准USB请求放在一起,但不能和已有的请求号相冲突。同时还需要编写自定义请求对应的处理函数。程序框架如下:

#define SC_SetData 0xa1 //自定义请求A1

此宏定义与标准USB请求的宏定义放在一起。

Switch(SETUPDAT[1]) //根据请求包类型分别处理

{ case SC_SetData: //协议请求代码

SC_SetData( ); //协议处理函数

}

此请求包处理放在SetupCommand(void)函数内。

对于对应的处理函数则在Periph.c文件中进行定义。所有的USB设备请求响应函数,中断函数都在此文件中定义。同时设备初始化函数TD_Init( ),用户功能函数TD_Poll( ),挂起函数TD_Suspend( )和USB复位函数( )也都在此文件中定义。

本设计采用在上位机发送自定义请求A1,并在自定义请求中包含对FLASH操作的命令字,68013A在分析得到自定义请求A1后,在自定义请求A1中把命令字保存入一个全局变量[5],在用户功能函数TD_Poll( )中执行对命令字的分析并调用相应的FLASH操作函数。对于传输到上位机上的数据通过自定义请求A2、A3来执行。

3 结论

本设计根据USB总线技术、FPGA技术及面向对象程序设计方法,对电路的组成原理、接口电路设计、系统控制信号的设计及USB上位机程序的设计做出详细的说明,设计出基本符合课题要求的USB读数装置及上位机程序,基本完成了工作要求。当然本设计在USB接口的速度方面还需考虑更完善的方案。希望在以后的学习工作中能够改进。

[1]潘建兵.基于USB总线的数据采集器的研制[D].重庆大学,2006.

[2]钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2006.

[3]Cypress Semiconductor Corporation.CY7C68013 EZ-USB FX2 USB Microcont-roller Highspeed USB Peripheral Controller[Z].2001 .

[4]孙航.Xilinx可编程逻辑器件应用与系统设计[M].北京:电子工业出版社,2008.

[5]徐钧.基于USB和FPGA技术的高性能数据采集系统设计与实现[D].南京理工大学,2007.

猜你喜欢

固件存储器上位
静态随机存储器在轨自检算法
特斯拉 风云之老阿姨上位
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
基于固件的远程身份认证
以新思路促推现代农业上位
提取ROM固件中的APP
存储器——安格尔(墨西哥)▲
一种通过USB接口的可靠固件升级技术
基于Nand Flash的高速存储器结构设计