内容发布更新时间 : 2024/12/27 10:35:07星期一 下面是文章的全部内容请认真阅读。
基于CY7C68013的USB2.0数据传输模块设计2009-11-10 20:45出处:中华电子网作者:刘吉名 裴东兴【我要评论】
[导读] 芯片的可编程特性提高了系统工作的可靠性, 数据不会丢失,便于数据的传输和处理。另外,USB设备具有“热插拔”和即插即用的特性具有较高的实用价值,设计的USB数据传输模块适合于旧测试系统接口的改造。 1 引 言
通用串行总线(USB)[1]是一种电缆总线。它支持主计算机与许多可同时访问的外设之间进行数据交换。使外设的连接具有单一化、即插即用、热插拔等特点,已经成为个人笔记本电脑和台式机的标准配置接口。USB支持3种传输速率:1.5Mb/s的低速传输、12Mb/s的全速传输、480Mb/s的高速传输。Cypress公司的EZ-USB FX2是一款集成 USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控 制器和可编程的外围接口。每条指令占四个时钟周期,在48M晶振下工作时,单指令周 期为83.3ns,执行速度远快于标准的8051单片机。本文的数据传输模块采用CY7C68013 高速芯片设计的USB接口可以实现外部的存储测试电路数据的快速下载,并且上传至计 算机保存,显示,处理。文中重点介绍CY7C68013的GPIF接口功能及其在设计中的实现 机理。
2 硬件连接设计
2.1系统连接框图及硬件各部分功能
系统的连接框图如下图1所示:主要有计算机主机USB接口,程序存储EEPROM,内置MCU的USB接口芯片,电平转换部分组成。
硬件各部分功能:
设备接口:实现模块与测试电路的连接;
电平转换:单片机的输出和工作电压为3.3V的电压值,而设备的电压是3.3~5V之间,电平转换器件实现电压值的匹配;
USB总线控制器:采用CY7C68013接口芯片的GPI接口模式完成控制信号的发送和16bit宽度数据的读取;
串行EEPROM:存储单片机固件,并被下载到单片机。
2.2硬件部分工作过程
硬件工作过程:
数据传输中核心器件是CY7C68013控制器芯片,主要完成USB的事务处理和单片机的控制功能。系统采用总线供电模式,数据传输模块连接到计算机后,上电复位后,USB功
能设备以全速的模式进行设备的识别并枚举。设计中将程序存储到串行EEPROM中,主芯片首先检测I2C总线上的EEPROM,判断其首字节是0xC2,下载固件和USB的描述符标装入到自身的RAM中执行,并且根据信息设置定义设备,完成了重枚举。 CY7C68013包含8.5KB的片上RAM,可以用于“软配置”,4KB的FIFO存储器可以给4个端点共享。实现数据的高速读取和传输,根据实际的需要,设计中配置了端点2采用三缓冲,使用3KB,端点4采用双缓冲使用1KB。
采用GPIF主机模式,EZ-USB FX2由软件编程输出读写控制波形,FD[15:0]双向数据总线12位与外部测试电路的静态存储器(SRAM)的相连,CTL[5:0]输出可编程控制信号,如SRAM的读写选通信号等。数据在GPIF控制下读入到CY7C68013后,在软件的配置下,完成1024字节的最大封包,输入计算机,由主机端的主控制器的串行接口引擎完成数据流串行化和解码。
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波形文件的次数,数据短包的处理方式等,实现数据的读取。
3.3 应用程序的设计
应用程序编写的关键是如何实现从USB设备读取指定数量的数据以及向其发送指定的数据。另外,还有向USB设备发送USB标准设备请求和特定的命令,包括厂商定义的命令和用户自定义的命令。
大型的应用程序大部分是很多模块组成, 这些模块完成相对独立的功能,协作来完成整个软件系统的工作。部分模块的功能较为通用, 在构造其它软件系统时仍会被使用。测试系统的应用程序采用VisualBasic6.0编写,具有界面友好,操作简单的特点。
动态链接库文件的使用,需要在应用程序的全局定义变量定义模块中调用.dll文件, 应用程序会在其所在目录和系统目录下查找.dll。在声明过程中需要注意数据类型的匹配问题。
Public Declare Function
BulkRead Lib \(ByVal pipenum As Long, ByRef rec As Integer, ByVal length As Integer) As Integer
Public Declare Function BulkWrite Lib \(ByVal pipenum As Long, ByRef send As Byte, ByVal length As Integer) As Long