引 言
传统的图像传输普遍采用由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并按照用户需求设计,增强使用功能的多样性和灵活性。该方案亦可应用于大容量、高速度的实时数据采集,音频及视频传输等领域。
便宜2000块 特殊版iPhone到底特殊在哪里?
4种常用的电压比较器
为止颓势!三星推出Note7老铁版 专卖粉丝!说好的销毁提纯呢?
Linux资料汇总之内存管理
盘点最具潜力的国产嵌入式系统
基于USB 2.0协议的高速图像传输系统
[图文]多元折合振子天线
大功率电力电子技术对智能电网的重要性
关于SRC漏洞挖掘经验及工具分享
如何在Linux使用dig命令查询DNS
半岛医疗携半岛超声炮及家用产品亮相CMEF,民族品牌显实力
液晶拼接屏的安装步骤是什么你知道吗
软包锂硫电池实现商业化将要面临哪些挑战
专业移动办公解决方案!远程控制软件RayLink内测火热进行中!
Power Integrations发布InnoSwitch3系列高效率(94%)离线 反激式开关电源IC
硅晶圆销售于第三季度开始下滑
Imagination的智能家居关键模块及解决方案
基于虚拟仪器技术的705D雷达自动检测系统
全球汽车行业的三支创新力量_重塑十年后的汽车产业
基于声卡的QPSK信号的实时软解调