摘 要:为了充分利用USB2.0的带宽,解决数据传输时存在的速度瓶颈问题,提出了一种基于CY7C68013A的USB2.0高速接口设计方法。采用CY7C68013A的SLAVE FIFO工作模式,芯片内部CPU不参与数据传输,FPGA设计的外部控制电路直接读写芯片内部FIFO,有效避免了内部CPU参与数据传输时带来的时间开销,从而提高了传输速度。
关键词:USB 2.0; CY7C68013A; FPGA
USB(Universal Serial Bus)是一种通用串行总线,主要用于USB主机和USB设备的通信。USB接口以其快速、即插即拔、接口规范统一及使用方便等优点成为现代数据传输的发展趋势[1-2]。虽然USB2.0接口最高可达到60 MB/s(480 Mb/s)的传输速度,但是目前多数USB2.0设备的传输速度通常低于30 MB/s,难以满足某些系统对高速数据传输的需求,如高清图像、高清视频的实时采集。本文所设计的USB2.0传输速度可达约49 MB/s,满足了高速数据传输的要求。
1 芯片介绍
CY7C68013A芯片是赛普拉斯半导体公司USB2.0控制器中的旗舰产品,单片集成USB2.0收发器、智能串行接口引擎和增强型8051微处理器,16 kB代码/数据RAM,4 kB FIFO,可配置为2倍、3倍和4倍缓冲区,一个可编程GPIF接口,支持USB2.0协议规定的控制传输、同步传输、中断传输以及批量传输。支持速率为12 Mb/s的全速传输和速率为480 Mb/s的高速传输[3-4]。
2 接口设计
2.1 硬件连接
采用ALTERA公司CycloneIII系列的FPGA芯片作为主控器, CY7C68013A工作在SLAVE FIFO模式, 内部的CPU不参与数据传输,FPGA直接对芯片内部FIFO进行读取,硬件连接如图1所示,各信号功能如表1所示。
2.2 固件设计
为了缩短开发周期,赛普拉斯半导体公司为用户提供了固件框架,用户只需在此固件的基础上进行修改即可实现二次开发。固件的工作流程为:上电复位后,首先初始化全局变量,然后调用TD_Init()函数来配置传输所用到的端点和FIFO,初始化用户自定义变量。使能中断后,CPU进入循环中,每次循环都调用一次TD_Poll()函数,用户程序放在此函数中。需要用户修改的函数是TD_Init()和TD_Poll()。
CY7C68013A内部集成8个512 B缓冲区,有12种配置方法。为了实现高速传输,本设计用到所有缓冲区,设置成2个端点:端点2为输出端点,端点深度4×512 B;端点6为输入端点,端点深度4×512 B。具体代码如下:
void TD_Init( void )
{
CPUCS=0x12; //CPU工作时钟为48 MHz
IFCONFIG=0x43; //同步SLAVE FIFO工作模式,
同步时钟由FPGA提供,频率为
48 MHz
SYNCDELAY;
EP2CFG=0xA0; //端点2方向为OUT,4倍缓冲,
每个缓冲区大小为512 B
SYNCDELAY;
EP6CFG=0xE0; //端点6方向为IN,4倍缓冲,每
个缓冲区大小为512 B
SYNCDELAY;
FIFORESET=0x80; //激活AK-ALL
SYNCDELAY;
FIFORESET=0x02; //复位端点2
SYNCDELAY;
FIFORESET=0x06; //复位端点6
SYNCDELAY
FIFORESET=0x00; //关闭AK-ALL
SYNCDELAY;
PINFLAGSAB=0xE6; //FLAGB为端点6满标志
SYNCDELAY;
PINFLAGSCD=0xF8; //FLAGC为端点2空标志
SYNCDELAY;
FIFOPINPOLAR=0x00; //所有控制信号低有效
SYNCDELAY;
EP2FIFOCFG=0x11; //端点2为自动模式,宽度
为16 bit
SYNCDELAY;
EP6FIFOCFG=0x09; //端点6为自动模式,宽度
为16 bit
}
void TD_Poll( void )
{
//为了实现高速传输,内部低速CPU不参
//与数据传输,读写FIFO由FPGA来完成,
//此处不需代码
}
3 工作过程
3.1 写入数据
FPGA不断检测FLAGB(端点6满信号),当FLAGB为高时,端点6非满,FPGA拉低SLWR信号,在每个IFCLK上升沿写入一个16 bit数据;当FLAGB为低时,端点6满,FPGA拉高SLWR信号,停止写数。工作流程如图2所示。
4 调试结果
实验用Quartus II自带逻辑分析仪Signal Tap II对读写数据进行实时采样。
4.1 写入数据
图4为写入数据的波形, FIFOADDR指向端点6,FPGA检测到端点6非满时,拉低SLWR信号,在SLWR低电平期间每个IFCLK上升沿写入一个16 bit数据。为了便于看清整体传输过程,将写入波形缩小,如图5所示。
图5显示了一次性将512 B数据写入端点6所用的时间,约为5.3 ?滋s,突发数据传输速率为96 MB/s。在每次写入512 B数据后会有一段约为4.9 μs的空闲时间,空闲时间是主机用来处理数据的时间,即是主机而不是CY7C68013A限制着传输速度。由突发传输阶段和空闲阶段可以算出平均写入数据的速率约为49.8 MB/s。
4.2 读出数据
图6为读出数据的波形,FIFOADDR指向端点2,FPGA检测到端点2非空时,拉低SLRD和SLOE信号,在SLRD低电平期间每个IFCLK上升沿读出一个16 bit数据。为了便于看清整体传输过程,将写入波形缩小,如图7所示。
图7显示了从端点2一次性读出512 B数据所用的时间,约为5.3 ?滋s,突发数据传输速率为96 MB/s。在每次读出512 B数据后会有一段约为5.1 ?滋s的空闲时间,空闲时间是主机用来处理数据的时间,即是主机而不是CY7C68013A限制着传输速度。由突发传输阶段和空闲阶段可以算出平均读出数据的速率约为48.9 MB/s。
本文阐述了一种高速USB2.0接口的整体设计过程,充分利用了USB2.0带宽,读写速度可达49 MB/s。实践表明,该接口可应用于高清图像、高清视频的实时采集系统中。
参考文献
[1] Cypress Semiconductor Corporation. EZ-USB[R]. FX2LP Datasheet.USA,2012.
[2] Cypress Semiconductor Corporation. EZ-USB[R]. Technical Reference Manual. USA, 2011.
[3] 胡晓军.USB接口开发技术[M]. 西安:西安电子科技大学出版社, 2005.
[4] 戴小俊.基于USB和DSP的数据采集系统设计[J]. 电子技术应用,2007,33(1):84-86.