0 引言
在当今信息化的时代,在机器获取现实世界信息方面,图像由于具有信息面全、直观、方便直接的特点而受到广泛的研究。图像采集与处理系统在工业检测、智能控制、医学成像、安全监控、航空航天等方面得到了广泛的应用。人们在图像获取渠道上不断的提升图像传感器的性能,改进图像获取的硬件组件与系统结构;同时在图像的处理上提出一系列的新型或是改进的处理技术来改进图像的处理质量与处理速度,以便能够满足当前应用对图像质量、实时性能、精准控制等方面的要求。
现有的图像传感器芯片有CCD和CMOS两种类型。CCD图像传感器具有良好的性能,但其外部电路复杂,不适合于低成本系统;而随着CMOS集成电路工艺技术的发展,CMOS图像传感器得到了快速的发展,与CCD相比,它具有制造工艺成熟、易集成、低成本、低功耗、体积小以及使用简单等优点。随着集成电路工艺技术的提高,CMOS图像传感器在分辨率、噪声等方面都有显著的改善,使得它在越来越多的领域上得到应用,它适用于低功耗的小型图像采集系统。
目前大量的图像采集系统采用CPLD或者单片机作为图像采集的时序控制接口,如文献,或者是用DSP作为图像处理的主处理器,如文献。这二者在各自的方面都有各自的优势,但它们的专用性太强,CPLD与单片机在时序控制方面有优势而图像处理能力弱,DSP则是图像处理能力强而时序控制能力差。FPGA是介于专用集成电路与原有的可编程逻辑器件之间的一种半定制电路器件。它具有丰富的I/O接口、低功耗、兼容CMOS和TTL电平、可重复擦写,易于在线调试等优点,可以使系统开发具有周期短,风险小,费用低的优点。它的时序控制能力强,在并行处理的算法方面具有较大优势,具有较强的图像处理能力,同时在嵌入式系统方面的应用也具有较好的前景。
USB总线接口技术是一种PC与外围设备进行高速通信的接口,它具有可以即插即用、连接方便简单、易于扩展外围设备以及高速传输等优点,适用于有大量数据传输的场合,满足图像传输数据量大的特点,同时作为一种通用串行总线,它的使用使得系统能够被移植到更多的应用场合当中。
1 系统硬件组成
系统硬件的整体结构如图1所示,它包括有搭载有OV7620图像传感器的C3188模组、FPGA、SRAM存储器、USB 2.0接口芯片、以及PC端上位机几部分组成。
在系统上电时,由FPGA通过模拟SCCB总线,完成对图像传感器的初始化工作;在完成初始化工作以后,FPGA开始在OV7620产生的时序信号控制下进行图像数据的采集,并将之存储在SRAM当中;当存满一帧的图像后,在FPGA的控制下,图像数据由SRAM通过CY7C68013A传送到PC端,USB芯片被设置在从模式的工作状态下;上位机程序接收来自USB芯片的数据并将之实时的显示,完成图像数据的采集与传输。
2 OV7620的性能参数及初始化
OV7620是CMOS彩色/黑白图像传感器。它支持连续和隔行两种扫描方式,VGA与QVGA两种图像格式;最高像素为664×492,帧速率为30 f/s;数据格式包括YUV,YCrCb,RGB三种,能够满足一般图像采集系统的要求。OV7620具有丰富的编程功能,应用开发者可以通过SCCB控制总线来对芯片相关参数进行设置,以达到控制输出图像大小、增益、颜色、爆光时间、输出格式等,以使所获得的图像满足应用的需要。
SCCB接口是采用一种简单、双向二线制的同步串行总线。它是简化的I2C协议,其中SIO-1是串行时钟输入线,SIO-O是串行双向数据线,分别相当于I2C协议的SCL和SDA。图中其中的SDA,SCL两根线由于是开漏输出,因此需要有上拉电阻,在本系统中接1 kΩ的上拉电阻。SCCB的总线时序与I2C基本相同,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和NA。Don’t care位由从机产生;NA位由主机产生,由于SCCB不支持多字节的读写,NA位必须为高电平。另外,SCCB没有重复起始的概念,因此在SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能产生Don’t care响应信号,其二线制的控制时序与I2C相仿,如图2所示。
在FPGA当中,采用普通IO口模拟SCCB的时序,由于本系统只需要在上电时对图像传感器进行初始化的参数设置,而SCCB的写时序与I2C的写时序完全兼容,因此,在程序中只需要模拟I2C的单字节写过程。C3188模组与FPGA的连接关系图如图3所示。
将要初始化的寄存器地址以及所要设置的值直接存放于parameter定义的参数中;在上电时,通过I2C程序将这些写到OV7620当中,实现图像传感器的初始化工作。
3 CY7C68013A芯片SLAVE FIFO模式固件编写
由于系统用于图像的采集,具有数据量大,实时性要求高的特点,因此采用USB 2.0接口,以便能满足实时,高速的数据传输。为了达到最快的传输速率,使用SLAVE FIFO模式,在该模式下,USB芯片的数据传输不需要8051的参与,便于大量连续的数据传输,在这种模式下需要有一个外部的控制时序,而FPGA恰能提供相关的时序,同时为了能够与图像数据同步,采用外部输入时钟,同步传输方式,采用8位数据传输。在该应用中,寄存器EP2CFG配置了端点2作为IN端点传输FPGA来的数据至上位机,寄存器EP2FIFOCFG使能自动传输;寄存器EP6CFG配置端点6为OUT端点,寄存器EP6FIFOCFG使能自动传输;并在寄存器FIFOPINPOLAR中设置了端点的满标志为高电平有效,这是由于在刚上电下载完FPGA程序后,FPGA即对图像进行采集并存储至SRAM当中,而上电时FPGA的引脚默认为高电平,如果没有设置高电平为EP2的满有效,则在下载USB固件之前FPGA会误认为是USB的端点一直处于非满状态而一直传送数据,这样,在下载完USB固件后,主机端所得到的图像就不能保证它是从一帧图像的第一个数据开始传输而是与下一帧的图像有一定的错位。在设置EZ-USB FX2LP为SLAVE FIFO模式的过程大致是:配置IFCONFIG[1:0]=11,先把SLAVE FIFO模式;复位相应端点,即使用FIFOREST寄存器;配置所要用的端点大小,类型,以及传输方向,使用EPxCFG,式中x代表2,4,6,8;设置各端点的空标志,满标志和可编程标志值,使用PINFLAGAB和PINFLAGCD寄存器;配置是否使能自动传输以及传输的位宽,使用EPxFIFOCFG,式中x代表2,4,6,8;本应用中的USB固件程序的部分代码如下:
4 FPGA对图像数据的采集、存储及对USB的传输控制
4.1 FPGA对图像的采集控制
FPGA对图像的采集控制是通过OV7620的VSYNC,HREF,PCLK三个源同步时序信号来对图像进行采集。首先是在1个状态机中检测VSYNC信号,当VSYNC的高电平来临时,初始化所有的内部寄存器,包括SRAM的地址寄存器,SRAM的写控制信号,数据总线读写方向的选择信号,USB的写使能信号,内部计数寄存器等;等VSYNC来临之后,表示新的一帧开始了,接下来等待图像的行信号使能来临,当HREF到来之后,就可以将图像的数据写进SRAM当中了,这个写过程需要两个CLK,在第一个时钟周期中更改SRAM的写地址,第2个CLK周期将连接在数据总线上的图像数据写进SRAM中,同时对内部的图像计数器进行计数,这个过程中要在HREF为高电平的时候进行存储;当计数达到一帧,也就是153 600 B的时候结束采集的过程,并更改相应的控制信号,准备USB的操作信号,进行FPGA对USB芯片的控制,将SRAM当中的一幅完整的图像能过USB传至USB当中,整个采集与传送的状态流程如图5所示。
4.2 FPGA对USB芯片的控制
在FPGA完成了一幅图像的采集并将图像的数据存储在片外的SRAM当中以后,接下来要做的事情就是将所存储的图像传给USB芯片,这个过程当中,FPGA要控制SRAM的写信号,同时使能数据总线的方向为输出方向。FPGA对USB的写首先是花费一个CLK的时间从SRAM当中取出一个数据,之后在第2个CLK时间内判断它的端点满标志,如果USB端点已经满了,则等待,如果非满,则拉低写信号使能信号同时地址计数器加1,返回上一个取数据的状态继续取下一个数据,直到传完一幅图片,之后返回初始的状态重新等新的一帧开始信号的到来。
应用程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。本应用中使用VC++6.0进行开发。EZ-USB Fx2LP开发套件提供了主机端驱动程序(cyusb.sys),当中提供了快捷方便的设备接口类,基于这些类,可以使用户快速的完成系统相应部分的开发。程序中使用单线程异步数据的传输,每次的传输取一帧图像,并显示在对话框中。
程序的部分代码如下,在该段代码中,首先是调用WaitForXfer函数启动异步传输,如果数据传输成功,则返回相应字节的数据,调用自定义的显示函数就可以将图像显示在对话框当中,否则断开线程,结束数据传输。以下为部分代码:
6 系统测试结果
系统的硬件架构为:FPGA开发板使用北京威视锐科技有限公司的红色飓风Ⅱ代RC2-1C6开发板,其板上搭载Altera公司的EPIC6Q240C8芯片,配有Cypress公司的USB 2.0芯片CY7C68013A、ISSI公司的IS61LV25616AL芯片,并提供了三组扩展接口JE1,JE2,JE3供用户使用,图像传感器芯片使用OmnniVision Corporation的OV7620芯片。整个系统的连接关系如图6所示,C3188板所需要的5V与3.3V电源由板上扩展接口JE1上的电源引脚提供,OV7620与FPGA开发板的数据通过JE3,JE2相连,传感器使用的SCCB配置线SCL,SDA通过外接1kΩ的上拉电阻至3.3V。
实验的部分图像如图7,图8所示,其中图7大小为320×240,图8的大小为160×240。
7 结语
本文以FPGA为控制核心,介绍了CMOS图像传感器的数据采集与存储,并应用USB 2.0芯片CY7C68013A进行数据的传输。FPGA为控制核心主要完成了OV7620的初始化工作,数据采集与存储以及CY7C68013A芯片的时序控制;USB 2.0芯片工作在SLAVE FIFO模式下,便于图像数据的快速传输。充分利用了FPGA丰富的接口资源以及USB 2.0的高速传输特点。与文献相比,具有更快的传输速度,便于实时的监测。整个系统结构简单,便于维护扩展;而FPGA的加入可作为并行计算的平台,对于图像数据的实时处理具有一定的优势。本系统可应用于如工业检测等需要高的图像处理速度以及实时的监测能力,而FPGA的应用使得它可以作为小型嵌入式系统,USB2.0接口的使用提高了系统有着较好的可移植性。