基于USB 2.0协议的高速图像传输系统

分享到:
点击量: 214903
 

引 言

  传统的图像传输普遍采用由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函数负责处理上位机发出的用户自定义请求,通过控制PA0,PA1的高低电平,以控制整个硬件系统的运行。该系统中,使用0xB3使PA0置低进行图像数据的上行操作,用0xB4使PA0置高进行图像数据的下行操作,使用0xB5使PA1置低来通知硬件开始传输,使用0xB6请求使PA1置高以通知硬件系统停止传输。

  USB设备驱动程序负责建立起主机端和设备端的联系。驱动程序主要有两个:一是开机自动将固件程序下载至芯片RAM中,以由增强性8051执行。结合CYPRESS开发包EZ-Loader Drivers以及HEX2C和Windows DDK即可生成所需要固件自动下载程序*.sys文件。二是完成上位机应用程序和硬件设备之间的数据传输。其主要包括驱动程序入口例程、即插即用例程、分发例程、电源管理例程和卸载例程。本系统根据通用驱动结合自身需要,在DDK环境下修改编译,生成自己需要的驱动程序。USB上层应用程序都通过I/O控制来访问设备驱动程序。上层应用程序首先通过调用Win32函数CreaFile()来取得访问设备驱动程序的句柄;然后应用程序使用Win32函数Devi-ceIoControl()来提交I/O控制码,并且为CreatFile()函数返回的设备句柄设置I/O缓冲区。该系统中,设置USB端口缓冲区FIFO为1 024 B,端口非空即读取。保持了传输的连续性,并且每次以帧结构包形式传输,每包的大小为512 B。以实验中为例。每传输大小为245 KB的一幅图像,需要490个包进行传输。

 

 


  接收端应用程序流程图如图3所示。发送端应用程序流程类似,少了判断图像是否完整一幅,而多了传输完毕之后的图像数据校验。

 

 

 

 

 
 

 

  2 系统仿真及实现

  图4所示为图像发送系统主要端口的ChipScope实测波形,所用FPGA为V4-XC4VSX55。

 

 

 

  USB_Data为传输的图像数据。数据长度为16位,SLRD为异步读取FD总线的时钟,采用USB时钟源48 MHz四分频得到,FIFO指针在每次SLRD激活到撤消激活变化时累加,即每变化一次,读取FIFO里16 b缓存数据一次。SLOE引脚为读写使能信号,默认低电平有效。从该实测图可以看出,三路信号均符合异步读取的时序要求。

 

 

 

  主机接收端应用程序采用Delphi语言编写,图像传输它采取传输的同时显示图像的形式。从上位机应用程序截取一幅接收图像如图5所示。该应用程序主要用于各种调制方式下图像的传输。可以看到传输图像清晰完整,连续显示没有滞后,没有噪声斑点。图像经过USB接口传输后没有数据丢失,比较清晰。实验证明,图像传输过程中,没有出现丢帧的情况。满足实时高速的图像传输。

  3 结 语

  USB 2.0技术以其高速传输和使用方便受到广泛的关注,其应用也必将越来越广泛。上述设计方案有效地解决了图像传输过程中的高速通信问题。系统中采用异步方式传输,采用芯片所提供四分频时钟,*高速率可达到192 Mb/s。采用FPGA和USB 2.0相结合的方式,数据处理能力得到极大的提高,由于采用CY7C68013A的Slave FIFO模式,可使用外部FPGA并按照用户需求设计,增强使用功能的多样性和灵活性。该方案亦可应用于大容量、高速度的实时数据采集,音频及视频传输等领域。