《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于USB3.0的图像采集系统硬件设计
基于USB3.0的图像采集系统硬件设计
2014年微型机与应用第17期
杨晶菁1 ,张 浩2
1.福州大学 电气工程与自动化学院,福建 福州 350116; 2.福州大学 数学与计算机科学学院,福建 福州 350116
摘要: 介绍了一种由USB3.0控制器和CMOS图像传感器组成的图像采集系统的硬件设计;详细论述了CYUSB3014和OV7670的硬件连接方式和工作原理,包括如何利用FIFO芯片缓存一帧图像数据;介绍了系统的固件工作流程,包括CYUSB3014的初始化流程。本系统实现了摄像头采集的视频数据通过USB3.0总线的高速数据传输和在液晶屏上的实时显示。
Abstract:
Key words :

  摘 要: 介绍了一种由USB3.0控制器和CMOS图像传感器组成的图像采集系统的硬件设计;详细论述了CYUSB3014和OV7670的硬件连接方式和工作原理,包括如何利用FIFO芯片缓存一帧图像数据;介绍了系统的固件工作流程,包括CYUSB3014的初始化流程。本系统实现了摄像头采集的视频数据通过USB3.0总线的高速数据传输和在液晶屏上的实时显示。

  关键词: USB3.0;图像传感器;图像采集

  随着科技创新的不断推进,新媒体格式和大容量、低价格的存储设备层出不穷,需要更高的带宽和传输速度。目前市场上的高清摄像头大多通过网络或USB2.0传输数据。有线和无线网络适合远距离的图像传输,而近距离的图像传输,若采用网络则对带宽要求很高不经济;若采用USB2.0总线传输,则需要对高清图像数据进行压缩后再传输,很难实现实时传输。因此,针对近距离的高清图像传输,采用USB3.0总线是一个理想的选择,USB3.0理论最大传输速率为5.0 Gb/s,实际传输速率大约为3.2 Gb/s,可以很方便地实现图像不经处理的实时传输[1]。

1 系统硬件设计

  本设计是基于USB3.0的图像采集系统硬件,开发周期短,数据传输速度快,可应用于对图像质量要求不高的场合,如智能家居中的可视对讲和视频监控系统。

001.jpg

  本设计的物理连接结构如图1所示。采用CMOS OV7670图像传感器获得视频图像和数字化输出,通过FIFO芯片AL422B缓冲,USB3.0控制器CYUSB3014采集FIFO中的视频数据,一方面通过液晶屏实时显示,另一方面通过USB3.0接口将采集结果送至上位机,以进一步处理和存储。

  1.1 USB3.0控制器

  本设计采用CYPRESS公司USB3.0控制器EZ-USB FX3 CYUSB3014作为图像采集系统的核心。CYUSB3014内嵌32位的ARM926EJ核,核心运行频率可达200 MHz,具有5 Gb/s的数据传输能力,特别适合快速传输大量数据的应用,稳定性好,实际帧率高。带512 KB RAM 的片上内核可提供高达200 MIPS的计算能力,可以直接处理一些原来必须放在上位机应用软件中处理的如图像格式转换等工作,提高了系统的集成度。同时CYUSB3014有更多的外设控制接口,数据位宽,灵活性好,适合各种外设的周边扩展应用。

  CYUSB3014对图像数据的采集可用GPIF(通用可编程接口)、DMA(直接内存存取)、GPIO(通用输入/输出)3种方式。其中前2种方式可实现与外设的无缝连接,数据传输由硬件处理,速度快稳定性高,但开发周期较长;第3种方式数据传输速率低于前2种方式,但完全满足本设计的需要,且开发难度较低。因此本设计选用GPIO方式控制外设并采集图像数据。

  1.2 FIFO摄像头

  本设计选择OmniVision公司的包含30万像素CMOS图像感光芯片的摄像头OV7670。OV7670体积小、工作电压低,可提供单片VGA摄像头和影像处理器的所有功能[2]。采用OV7670采集图像数据有4种方法:(1)单片机直接采集;(2)带有camera接口的32位芯片直接使用;(3)具有DMA功能的16位以上芯片实现采集;(4)增加FIFO模块作为数据缓冲。其中第1种方法硬件连接最简单,但由于OV7670的时钟速度高达24 MHz,所以必须采用高速MCU或者降低CMOS输出速度,同时必须严格按照OV7670的控制和时序关系进行图像的采集。第2、3种方法需要主控芯片具有特定的功能。第4种方法在硬件上增加了FIFO作为数据缓冲,但在读取数据时仅需要关心如何读取数据而不需要关心数据采集的控制和时序,使得数据采集大大简便。因此本设计采用第4种方法。

  OV7670通过SCCB总线接口与微处理器通信。SCCB是简化的I2C协议,SIO_C是串行时钟输入线,SIO_D是串行双向数据线,分别相当于I2C协议的SCL和SDA[3]。但是SCCB与I2C总线存在一些细微差别,如SCCB没有重复起始的概念,在SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。因此采用CYUSB3014的GPIO模拟SCCB总线,GPIO_SCL始终设置为输出方式,GPIO_SDA在数据传输过程中根据需要通过设置相应寄存器的值动态地改变输入和输出方式。SCCB的写周期与I2C总线协议完全相同,可直接使用其时序;SCCB的读周期则需要增加总线停止条件。本设计选择SCCB总线的最大传输速度400 Kb/s,采用三相写数据的方式对需要更改数据的寄存器进行读写操作,配置OV7670的不同图像数据格式输出、分辨率、自动曝光、自动增益、自动白平衡、饱和度、亮度、对比度等参数。

  AL422B是AverLogic公司的FIFO存储芯片,存储容量为3 Mb(393 216 B×8 bit)。其所有的寻址、刷新等操作都由集成在芯片内部的控制系统完成。AL422B主要用于存放OV7670输出的完整的一帧图像数据,存储制式包括VGA、CCTR、NTSC、PAL、HDTV等[4]。

  AL422B的FIFO_WCK为FIFO内存写时钟控制端,写数据时应与此时钟信号同步,因此将OV7670的像素时钟PCLK连接至AL422B的FIFO_WCK。FIFO_RCK为FIFO内存读时钟控制端,由CYUSB3014的GPIO引脚控制。

002.jpg

  图2所示为OV7670 VGA全帧输出时序图。为了保证采集完整的一帧数据,必须做到帧同步和行同步。本系统将OV7670的帧同步信号VSYNC连接至CYUSB3014的外部中断INT上,下降沿时触发中断开始一帧的采集,实现帧同步。FIFO_WE用于控制使能/禁止数据输入至FIFO,低电平时输入数据在FIFO_WCK的上升沿取得,高电平时禁止数据写入FIFO。AL422B的写控制端FIFO_WR和OV7670的行同步信号HREF经过与非门后连接至AL422B的写使能控制端FIFO_WE,实现行同步。

  1.3 液晶屏

  本系统可通过USB3.0总线连接至上位机,通过相应的应用软件和显示屏查看实时或者处理过的视频,也可通过一块2.8英寸液晶屏ILI9325查看经过CYUSB3014处理过的视频。液晶屏在系统开发初期可作为直观的调试工具,也可在本系统作为移动端时作为显示工具,若采用上位机显示也可省略液晶屏以节约成本。USB3.0控制器采用GPIO向液晶屏发送控制指令和8位视频图像数据。

2 系统固件设计


003.jpg

  FX3软件开发工具组件(FX3 SDK)如图3所示。Cypress公司提供了完整的FX3软件和固件开发工具,包括丰富的应用例程帮助开发者缩短开发周期。

  本系统设计时主要应用到设备端的FX3固件栈(FX3 Firmware Stack)。它包含了一个完整的API库和一个详尽的固件框架。其中,API函数封装了所有对CYUSB3014寄存器的操作,使得开发者可以通过调用API函数实现对寄存器的配置。固件框架程序建立在ARM9和ThreadX实时操作系统的基础上,所有的FX3应用代码包含两个部分:(1)对于所有应用程序通用的初始化代码;(2)开发者根据特殊需要设计的应用程序代码。SDK包含了应用例程的源程序,开发者应用固件框架对例程进行相应的修改就可以得到自己的应用程序。SDK同时提供一个RTOS(实时操作系统)库,可用于开发更复杂的多线程应用程序。

  本设计的固件流程图如图4所示。

004.jpg

  首先,系统依次初始化CYUSB3014、液晶屏、OV7670和AL422B。初始化OV7670,使其输出格式为QVGA (320×240),图像数据的格式为RGB565,同时配置AWB(自动白平衡)等图像质量参数。CYUSB3014的初始化非常重要,它将本系统正确地枚举为USB3.0设备,并转入固件入口点、初始化工具链、设备和应用程序。其中设备的初始化与硬件关系最为密切,部分代码如下。

  Int main (void)

  { ……

  //CPU时钟设置、VIC(向量中断控制器)初始化、设置PLLs(锁相环)

  status = CyU3PDeviceInit (NULL);

  ……

  //设备Cache设置:设备有8 KB数据Cache和8 KB指令Cache

  status = CyU3PDeviceCacheControl (CyTrue, CyFalse, CyFalse);

  ……

  //IO矩阵设置:包括GPIF和串行接口(SPI/I2C/I2S/GPIO和UART)

  //本设计仅适用UART总线用于调试

  CyU3PMemSet ((uint8_t *)&io_cfg, 0, sizeof(io_cfg));

  io_cfg.isDQ32Bit = CyFalse;

  io_cfg.useUart = CyTrue;

  io_cfg.useI2C = CyFalse;

  io_cfg.useI2S = CyFalse;

  io_cfg.useSpi = CyFalse;

  io_cfg.lppMode = CY_U3P_IO_MATRIX_LPP_DEFAULT;

  //使能GPIO[56]和GPIO[55]用于模拟SCCB总线

  io_cfg.gpioSimpleEn[0] = 0;

  io_cfg.gpioSimpleEn[1] = 0x01800000;

  io_cfg.gpioComplexEn[0] = 0;

  io_cfg.gpioComplexEn[1] = 0;

  status = CyU3PDeviceConfigureIOMatrix (&io_cfg);

  ……

  CyU3PKernelEntry (); //进入操作系统的入口函数

  //直接开始执行CyFxApplicationDefine(void)

  //调用CyU3PThreadCreate()创建用户线程

  ……

  }

  接着等待上位机发出视频数据采集指令,此时若需要修改OV7670的配置,可以通过SCCB总线写入寄存器值进行设置。若接收到视频数据采集指令,则需要先复位AL422B,在帧同步信号VSYNC的下降沿启动采集一帧图像的流程,同时开启AL422B的FIFO写使能,开始向FIFO内写入数据。当外部中断检测到VSYNC下一个下降沿时,关闭FIFO写使能,结束一帧图像数据的采集。

  然后CYUSB3014通过USB3.0总线将采集到的一帧图像数据发送至上位机进行处理和存储,同时发送至液晶屏进行实时显示。继续采集图像数据直至上位机发出结束采集的指令。

  本系统采用USB3.0控制器CYUSB3014、30万像素的COMS摄像头OV7670、FIFO存储芯片AL422B和2.8英寸液晶屏共同组成了一种图像采集系统的硬件。经测试,液晶屏上的实时图像清晰流畅,同时上位机能接收到正确的视频数据,可用于进一步的处理和存储。

参考文献

  [1] 刘妍秀.USB3.0体系结构及发展前景[J].长春大学学报,2010,20(10):23-26.

  [2] 李德明,韩剑,江国强. 基于OV7570的图像采集及显示系统设计[J]. 仪器仪表学报,2010,31(8-增刊):30-33.

  [3] 任志敏. 一种基于C51单片机的图像采集处理系统设计[J]. 电脑开发与应用,2013,26(3):57-59.

  [4] 王晗,李翔,李忠敏,等.基于OV7670的图像采集与显示设计[J].中国科技息,2013(11):90-91.