基于CY7C68013的USB2.0数据传输模块设计
3 系统软件设计
3.1GPIF接口模式
FX支持3种接口方式:端口、Slave FIFOs和可编程接口GPIF。
在“端口”模式下,所有I/O引脚都可作为8051的通用I/O口。在“从FIFO”模式下,外部逻辑或外部处理器直接与FX2端点FIFO相连。在这种模式下,GPIF 不被激活,这种模式下,外部主控端既可以是异步方式,也可以是同步方式,并可以为FX2 接口提供自己的独立时钟。“GPIF主控”接口模式使用PORTB 和PORTD构成通向四个FX2端点FIFO(EP2、EP4、EP6和EP8)的16位数据接口。GPIF 作为内部的主控制器与FIFO直接相连, 并产生用户可编程的控制信号与外部接口进行通信。GPIF使用内部时钟。用户将波形文件程序存在内部RAM的程序存储区中。
根据系统需要,设计中采用GPIF接口模式将CY7C68013设为FIFO READ和SINGLE READ两种模式, 让GPIF中的端点FIFO与USB通信中端点缓冲直接建立连接, 数据的传送不再需要CPU 的参与。 根据外部测试电路的要求,适用于不同测试环境预设电路的CPLD编程信号,根据实际的测试信号的频率采用不同的采样频率,设定不同的触发电平,使用单次写模式可以完成编程数据的输出。针对的测试数据采用FIFO多次读模式,实现数据的批量传输。设计中采用48M晶振,由于静态存储器的在使能信号(OE)的上升沿后推地址(Adr),而数据在总线上的保持时间至少需要85ns,因此在波形设计中数据有效时间应该为4个时钟周期,才能够满足地址有效的要求。静态存储器读操作时序图如图2所示。
3.2固件程序设计
固件是指存储在USB接口芯片或微控器中的代码,用于控制硬件系统运行,各种USB标准请求的处理,以及USB闲置模式的电源管理服务,实现主机与外设之间的通信和数据传输。主要是根据系统需求设计相应的程序框架图。Cypress 公司为FX2 固件开发提供了一个固件库和固件框架,都是在KeilC51集成开发环境下开发的,固件库提供了一些常量、数据结构、函数来简化用户对芯片的使用。C 语言环境, 同时保留了汇编代码高效、快速的特点,将代码在KeilC51环境中进行编译。编译通过后,将固件代码下载到USB单片机中,就可以实现GPIF多字节读等操作。在程序起始时,固件架构会执行下列步骤:
(1)首先,设置所有的内部状态变量。
(2)然后,调用用户的初始设置函数TD_Init()。待返回后固件架构就会设置USB接口成为未配置的状态,并且使能中断。
(3)接下来,在1秒的间隔内开始重新设备列举(ReNumerate)设备,并直到设置(SETUP)封包收到端点0为止。
(4)一旦SETUP封包被检测到,固件架构就会启动与PC主机合作的工作分配器。而这个工作分配器就会顺序重复执行下列的工作:
①调用用户函数TD_Poll()。
②判断标准设备请求是否决定。如果已决定,它将解析所收到的命令请求并加以响应。
③判断USB核心是否己经报告了USB中止(suspend)事件。
用户需要编写TD_Poll()中的代码完成特定的功能,判断USB设备枚举的状态决定每次出发FIFO波形文件的次数,数据短包的处理方式等,实现数据的读取。
评论