视频技术
由于图像采集系统采集的数据量大,带宽要求高,以往的图像采集系统通常使用PCI总线实现。但是计算机本身配置的PCI接口数量非常有限,而且拆装PCI接口设备需要打开机箱,一般操作人员并不具备这样的能力,导致系统应用受到限制。USB(通用串行总线)接口列可以完全解决以上难题。首先,USB2.0接口的速度已经达到480Mbps,完全可以满足图像采集系统对速度的要求。另外,USB接口是真正支持即插即用,且允许热插拨的接口,所以目前大量数据采集系统都选择使用USB2.0接口实现。
本文利用SAA7113H实现模拟视频信号解码,并借助EZ-USB FX2单片机CY7C68013将数字图像数据直接通过USB2.0接口传输到计算机,通过PC机程序实现图像的无损采集,大大简化了采集卡的硬件设计,降低了采集卡硬件要求,有效降低了图像采集卡的成本。
1 系统硬件设计
系统硬件结构如图1所示。系统主要由视频解码芯片SAA7113H、USB控制芯片CY7C68013和一块容量为1kB的24C01EEPROM芯片组成。
图1 系统硬件结构
1.1 视频解码芯片-SAA7113H
SAA7113H是飞利浦公司出品的一款视频解码芯片,它的作用是将输入的模拟视频信号解码为标准的8位VPO数字信号。它可以输入4路模拟视频信号,通过I2C总线对内部寄存器的不同配置可以对4路复合视频输入进行转换,改变亮度、对比度等参数。SAA7113H兼容PAL、NTSC等多种制式,可以自动检测场频,可以在PAL、NTSC之间自动切换控制。SAA7113H解码后输出的是标准的YUV 4:2:2格式数字信号。
1.2 USB控制芯片--CY7C68013A
CYTC68013A(EZ-USB FX2)是Cypress半导体公司推出的一款USB2.0芯片,它内部集成了增强的8051内核,支持最大48MHz的时钟频率,在相同时钟频率下,FX2的平均指令执行速度可达到标准8051的2.5倍。CY7C68013芯片内部集成了一个与8051内核相对独立的SIE(串行接口引擎),在不需要8051内核参与的情况下,通过USB端口和外部逻辑共享FIFO的方式,实现外部数据与USB端口的数据交换,大大加快了数据传输的速度,可实现的最大速度为480Mbps。
1.3 系统硬件实现
硬件连接方面,利用CY7C68013的I2C端口连接24C01,以便在系统上电后提取24C01中的信息,实现设备枚举,下载相应固件。利用CY7C68013模拟I2C端口连接SAA7113H,对其内部寄存器进行配置,实现解码芯片初始化操作。CY7C68013工作在Slave FIFO(从属的FIFO)模式,将SAA7113H的VPO数据总线直接连接到CY7C68013的FD总线,使用CY7C68013的IOAO端口检测数字视频的场标志信号,用于实现帧同步。将CY7C68013的SLWR*(从属写)信号量为有效,SLRD(从属读)和SLOE(输出有效)置为无效,由SAA7113H通过自身输出的27MHz同步时钟将数字视频信号以同步方式直接写入CY7C68013内部的FIFO,再通过SIE将FIFO中的数据以高速方式直接传送到PC机,实现视频数据的采集。
2 系统软件设计
系统软件设计主要包括固件程序设计、驱动程序设计和PC机采集程序3大部分。
2.1 固件程序设计
固件程序流程图如图2所示。该固件在采集卡上电后初始化CY7C68013,使其工作在Slave FIFO模式,设置总线位数为8位,以便接收SM7113H的8位数字视频信号。将EP2端点设置为批量AUTO IN传输方式,512字节4倍FIFO缓冲。一次最大传输数据包大小为512字节。利用SAA7113H的时钟信号实现同步从属FIFO写数据。
图2 固件程序流程图
通过模拟的I2C端口初始化SAA7113H,使其能够接收CCD摄像机的模拟视频信号,以标准的ITU656格式输出,并设置RSTO输出奇偶场标志,然后等待上位机的开始采集命令。
在收到PC机开始图像采集命令后,固件程序首先通过IOAO端口检查SAA7113H的奇偶场信号。如果外部模拟视频信号源未连接,该信号将一直维持高电平。固件在一段时间等待并确认外部视频信号未连接的情况下,向PC机回传设备尚未准备好的信息,否则一直清空FIFO,将FIFO中已有效据清除,直到奇场信号到来,固件回送设备准备好信息给PC,以实现视频图像帧同步采集。图像数据传输过程将由SIE完全控制,固件不参与传输操作。
2.2 驱动程序设计
Cypress开发包中提供了一个通用驱动程序,即cyUSB.sys,该驱动程序符合Windows硬件质量实验室WHQL标准,系统直接使用该驱动程序实现图像数据采集。由于CY7C68013采用的是软配置的方案,芯片中并没有提供用于永久存放固件程序的存储器,固件程序需要在每次上电后通过外部存储器加载或从PC机下载到内部RAM中。驱动程序主要实现固件程序的装载功能,以便系统上电后,可以自动从PC机下载固件到CY7C68013,然后使用通用驱动程序完成采集卡的设备重枚举。
在CyprESS提供的开发包中包含了一个固件下载驱动模板,即EZ-Loader Driver.系统固件下载驱动主要依赖它来实现。具体的步骤为:
1)利用hex2c.exe将Intel HEX格式文件转换成C代码数组。
2)将所有的EZ-Loader Driver文件连同子文件复制到一个新建的目录中。并利用第一步得到的C代码数组替换EZ-Loader Driver中firmwa re.c中的数组。
3)在WindowsXP DDK中使用build命令在新建目录中创建固件下载驱动程序。
4)改写驱动安装信息文件。
2.3 PC机采集程序
PC机采集程序用Visual Studio.net 2003调用CyAPI函数库实现。为提高图片采集速度,程序使用两个线程分别实现图像数据采集和图像甄别和处理。程序总流程图如图3所示。
图3 PC程序总流程图
每次启动采集程序时,系统通过创建USBDeviee实例获得设备句柄,并尝试打开USB设备。当点击程序界面开始采集按钮后,程序通过USB控制端点发送一个开始采集信号,并要求采集卡回传一个设备状态信号。如果设备提示无模拟视频信号连接,则提示用户连接。如果设备准备好,则开始接收图像数据。
由于USB主控制器工作于Slave FIFO模式,采集卡上传到上位机的数据量固定为27MB/S,如果上位机没能及时接收数据必然会导致图像数据丢失,所以程序中使用一个线程(线程1)以异步方式做图像数据接收,实际效果非常好。线程1主要代码如下:
SAA7113H输出的是隔行视频信号,每秒25帧图像,一帧图像需要分两次传输,先传输全部奇场(奇数行)数据,然后传输全部偶场(偶数行)数据,采集卡中将SAA7113H的输出设置为标准YUV4:2:2数据,分辨率为720x576.系统将所有的解码数据不做任何处理直接传送到PC机,数据格式如图4所示。其中,"80 10…"为消隐数据。"FF 00 00 SAV"为一行数据块的开始标志,作为奇场有效行,SAV的值为8X,作为偶场有效行,该值为CX."FF 00 00 EAV"为一行数据块结束标志,作为奇场有效行结束,EAV的值为9X,作为偶场有效行结束,该值为DX.作为720像素的YUV4:2:2数据,每行一共有720x2=1 440个字节,PC程序需要从所有的数据中找出每一行中有效的1 440个字节数据,并按照实际行顺序将奇场行相偶场行数据重新组合,转换成RGB24位像素点并最终写入BMP文件,实现图像的采集、显示和保存。
图4 YUV4:2:2数据格式
数据查找及重组过程中,PC程序会根据YUV4:2:2数据格式做数据块判别,如果发现有出错数据程序会做自动抛弃处理,在对采集数据要求非常严格及单张采集间隔时间较长的场合,程序将发送重新采集信号给采集卡,再一次采集。系统实际使用过程中发现,数据出错情况很少出现,且重发请求后可以得到正确数据。
3 结论
利用本方案设计的图像采集卡可以实现图像的连续采集,并最终以bmp图像格式保存,采集速率每秒最大25帧,适用于所有支持PAL模拟视频格式的摄像机及监控摄像头的图像无损采集,具有成本低、图像清晰等特点,在光学显微镜序列切片图像采集系统中得到了很好的应用。另外,系统经过简单修改后也可实现4个复合视频源输入的分时采集功能。
全部0条评论
快来发表一下你的评论吧 !