基于USB 2.0协议的高速图像传输系统
0 引 言
传统的图像传输普遍采用由PC机主板所提供的各种接口来实现,如PCI接口、EPP接口、IEEE 1394接口等。PCI接口的最高速率可达到132 Mb/s,但其安装麻烦,价格昂贵,可扩展性差,无法专门对其做电磁屏蔽,在高速传输方面速度也不够理想。EPP接口无需用PC机中的其他卡,可无限制连接数目,设备安装使用容易,但最高速率只有2 Mb/s,速度比较慢,主要用于低端性能要求不高的场合。IEEE 1394接口允许连接多种高性能设备,使其高性能总线互连,传输速率可达400 Mb/s,其中IEEE 1394 b可达3.2 Gb/s,主要使用在高速的影像或者没有外围连接PC的场合,其外围电路复杂,且造价昂贵。与以上接口相对应的通用串行总线(Universal Serial Bus,USB),其数据速率明显高于一般的串口,既可支持控制、中断、同步、块传输四种数据传输方式,又可支持热插拔和即插即用,且具有占用系统资源少,功耗低,数据传输可靠的优点。
USB总线技术就是想利用单一的总线技术来满足多种应用领域的需要。USB 1.1协议支持两种传输速度,即低速1.5 Mb/s和全速12 Mb/s。2000年发布的USB 2.0协议,向下兼容USB 1.1协议,数据的最高传输速率可达到480 Mb/s,它可使USB的应用范围不断扩大。
该系统基于USB 2.0总线技术,将CY7C68013A芯片的Slave FIFO块传输接口模式和FPGA技术相结合,实现了计算机与外设之间高速的图像数据传输。
1 系统设计
1.1 硬件及外设控制设计
实现USB接口单元的主要芯片是CYPRESS公司的EZ-USB FX2LP系列中的CY7C68013A(对比之前FX2系列的CY7C68013具有更低功耗、更小电流、高性价比等优点),负责完成硬件系统与PC之间的图像传输。它与外设有三种接口方式:端口模式、可编程接口GPIF和Slave FIFO。Slave FIFO方式是从机工作方式,在具有外部数据处理逻辑的设备中,USB数据在主机和外部逻辑设备中传输,通常不需要FX2LP的CPU参与,而是经过FX2LP内部端点FIFO来传输。外部控制器可对多个端点的FIFO选择读写。FX2LP的Slave FIFO工作方式可设为同步或异步;工作时钟均可由内部产生或外部输入。基于该系统处理的是高速图像的传输,需要外部控制器直接对FIFO进行控制,故采用从机,即Slave FIFO方式。高速图像传输的原理框图如图1所示,首先图像可由计算机上层应用软件发送或者接收,再通过USB接口芯片连接高速缓存。
图1中USB接口采用CY7C68013A芯片的Slave FIFO,接口模式,使得上层PC与缓冲器之间能够高速通信,并利用FPGA控制USB的高速传输。如图2所示,CY7C68013A的主要功能信号及与FPGA之间的握手信号如:IFCLK为时钟信号,可以选择由外部输入或者内部输出;FIFOADR[1:0]引脚选择4个FIFO(2,4,6或8)中的一个与USB数据总线FD连接。定义该系统中上行数据传输为FIFOADR[1:0]=10,即为EP6端口;下行数据传输为FIFOADR[1:0]=01,即为EP2端口。FLAGB,FLAGC为所选择FIFO的标志信号,FLAGB代表FIFO为满;FLAGC代表FIFO为空;默认低电平有效。FPGA可以通过不断查询这两个标志信号决定是否进行读或写操作。SLOE为读/写使能信号;SLWR,SLRD分别为读写控制信号,在同步和异步模式下,控制信号不一;FD[15:0]为16位的双向数据总线。PA0,PA1为输出信号,作为硬件系统工作状态的控制信号。
1.2 软件设计
图像传输系统的软件设计主要包括三个部分:固件程序设计、驱动程序设计和计算机上层应用软件。固件程序是硬件中的软件部分,通过执行该软件可实现特定的硬件功能,主要包括初始化、处理标准的USB设备请求以及USB挂起时的电源管理等。固件首先初始化内部的状态变量,然后调用用户初始化函数TD_Init()。从该函数返回后,固件初始化USB接口到未配置状态并使能中断。然后每间隔1 s进行一次设备重枚举,直到端点0接收到一个SETUP包。一旦检测到SETUP包,固件函数将开始交互下述任务调度:调用用户函数TD_Poll();判断是否有标准设备请求等待处理。如果有,分析该请求并响应;判断USB内核是否收到USB挂起信号。如果有,则调用用户函TD_Suspend()。从该函数成功返回TRUE值后,在检测是否发生USB唤醒事件。如果未检测到,则处理器进入挂起方式;如果有,则调用用户函数TD_Resume(),程序继续运行。如果从TD_Suspend函数返回FALSE,则程序继续进行。TD_Init函数负责CY7C68013A进行初始化,首先设置时钟为48 MHz,然后设置芯片工作于从属FIFO块传输模式,并配置端点6工作于自动块传输IN,端点2自动块传输OUT模式。其主要程序段如下:
DR_VendorCmnd函数负责处理上位机发出的
- 利用FPGA实现外设通信接口之: 典型实例-USB 2.0接口的设计与实现(06-05)
- 利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口(06-05)
- 基于总线的嵌入式高速图像通信系统设计(12-21)
- 基于USB 2.0数据采集系统的程序设计(12-21)
- USB2.0接口全接触(12-14)
- 如何轻松地将USB 2.0变为USB Type-C(12-13)