基于USB 2.0的视频传输系统设计
2016-09-13李江波马春庭陈志伟
李江波,马春庭,杨 帆,陈志伟
(军械工程学院 火炮工程系,石家庄 050000)
基于USB 2.0的视频传输系统设计
李江波,马春庭,杨帆,陈志伟
(军械工程学院 火炮工程系,石家庄050000)
采用CMOS图像传感器作为光电成像器件,以USB 2.0控制器芯片CY7C68013A对CMOS图像传感器数据进行处理并传输至上位机实时显示,实现了通过USB接口对视频图像数据的直接采集和成像;该设计结构简单,不仅可作为手持设备进行拍照、录像,还可功能扩展为对各种类型的CMOS图像传感器进行成像调试。
USB;图像采集;图像传输
本文引用格式:李江波,马春庭,杨帆,等.基于USB 2.0的视频传输系统设计[J].兵器装备工程学报,2016(8):127-130.
随着科技进步,CMOS图像传感器对影像的处理能力已经达到可以和CCD相媲美的程度,且具有节能省电、生产成本低的优势,在市场上占据的份额不断提高[1]。本文以CMOS图像传感器采集图像数据,以CyPress公司的USB 2.0控制器芯片CY7C68013A作为传输控制通道,将图像数据上传至PC机实现实时显示。该设计结构小巧,可对各种类型的图像传感器进行调试,也可实现图像数据的实时采集与显示,其应用侧重于对内部空间狭小、人眼难以观测的领域进行实时监控,可根据实际需要对图像数据进行分析判定。
1 系统总体设计
本系统[2]由图像采集、传输控制和图像显示3个单元构成,系统结构框图如图1。
图1系统结构框图
1) 图像采集单元即是CMOS图像传感器,由此获取图像数据并传输至下一单元。此处使用的是MICRON公司的MT9D112[3],这是一款200万像素的CMOS图像传感器,最高分辨率为1 600×1 200,支持多种视频输出格式,可通过I2C总线进行初始化配置。
2) 传输控制单元由CY7C68013A负责,完成两部分工作:一是初始化CMOS图像传感器,二是接收图像数据并将之传送至上位机。
Cypress公司的USB芯片CY7C68013A[4-5]是一款集成了USB 2.0接口的微控制器,它将USB 2.0收发器、SIE(串行接口引擎,Serial Interface Engine)、增强型的8051以及可编程的外部接口集成于一个单片中,在SLAVE模式下,外部电路可将其视为FIFO直接向上位机不间断地传送数据,最大带宽56 Mbyte/s。
3) 图像显示单元即是上位机将接收到的图像数据进行插值和特效处理后在屏幕上予以显示。硬件连接示意图如图2。
图2 硬件连接示意图
1.1图像采集单元
1.1.1图像传感器的硬件连接
图像数据源于CMOS图像传感器MT9D112,为使其正常输出视频数据须完成两方面工作:
一是为图像传感器供电,须提供二组电源:2.8 V和1.8 V,设计时通过主电源(本系统主电源为USB供电,5 V)输入到相应的电源芯片CAT6219,产生相对应的电压[1];
二是对图像传感器进行初始化,使其按照指定的方式输出数据,具体操作是由USB芯片CY7C68013A通过图像传感器的I2C接口对其内部寄存器进行配置完成[1,6]。
注意:虽然USB芯片CY7C68013A本身已经集成I2C引脚并提供了相应读写函数,但经多次实验表明:该I2C接口在设备无响应时不能自动恢复高电平状态,故采用USB芯片CY7C68013A的任意两根空闲IO引脚模拟I2C接口。
图像传感器MT9D112的硬件连接示意图如图3。
图3 MT9D112的硬件连接示意图
1.1.2图像传感器的初始化步骤
图像传感器MT9D112的I2C写地址为0x78,读地址为0x79[3],初始化时需要对寄存器和变量分别进行配置[7]。配置寄存器时直接对相应地址的寄存器进行赋值即可,注意寄存器的地址和数据均是16位;配置变量则不同,是通过对R[0x338C] 和 R[0x3390]这两个寄存器分别赋值完成的,其中R[0x338C]代表变量的地址,R[0x3390]代表相应的变量值。
初始化流程如图4所示。
1) 供电。3种电源:数字电源(DVDD),模拟电源(AVDD)和IO电源(DOVDD),3种电源间没有严格的先后上电顺序。
2) 依次检查图像传感器的RESET、PWDN、MCLK引脚是否正常。
RESET引脚接硬件复位电路,供电一段时间后测得应为高电平;PWDN引脚为低功耗引脚,若全程不需要图像传感器处于低功耗状态,则须接地;MCLK引脚作为图像传感器的时钟信号,此处以PLL(锁相环)为像素时钟,故直连到USB芯片的24 MHz输出引脚即可;STROBE引脚接外部按钮,可实现手动拍照,若不用可悬空。
3) 读取图像传感器的版本号,如果与所用产品的版本一致,就代表I2C总线能够正常工作。例如本文中读取寄存器R[0x3000]的傎为0x1580,与所用图像传感器版本一致,故I2C接口正常。
4) 对寄存器和变量进行赋值,主要是完成PLL(锁相环)的配置和输出图像分辨率和格式等一系列工作。
注意:在写某些改变图像传感器内部工作状态的寄存器时要注意延时,必要时可对一个寄存器多次写入,以保证正常工作。这一过程中涉及的重要寄存器有:
设置PLL(锁相环)的寄存器有:R[0x3214]、R[0x341E]、R[0x341C];
使能引脚输出的寄存器:R[0x301A];
其他重要的设置如输出分辨率和格式都是对变量[3]进行赋值,涉及到的寄存器是R[0x338C]和 R[0x3390]。
5) 用示波器检查MT9D112的引脚VSYNC(帧同步信号)、HSYNC(行同步信号)、D[0:7](8位图像数据)是否有波形输出,若有则证明图像传感器MT9D112已被成功初始化。此处初始化后输出格式为8-bit RAW,1600×1 200预览模式。
图4 MT9D112的初始化步骤
1.2传输控制单元
该单元[4-5]主要任务是完成USB芯片CY7C68013A的初始化,与上位机进行命令交互,接收来自图像传感器的图像数据,并将其通过USB总线上传至上位机。下面分别予以阐述。
1.2.1USB芯片的初始化
CyPress公司为该USB芯片提供有配套的开发包,开发包中配有原理图和大量的固件例程。借助原理图,可以方便地搭建该芯片的驱动电路;而固件例程则为用户提供了程序架构,它完成了大部分与USB协议相关的工作,用户仅需要在相应的函数中填写少量的代码即可完成开发。
USB芯片的初始化主要包括设置时钟频率及工作模式、配置FIFO端口及INT0中断服务程序3项内容,涉及的寄存器主要有CPUCS、EP1OUTCFG、EP1INCFG、EP2CFG、PORTACFG、FIFOPINPOLAR、FIFORESET。初始化后该芯片使用48MHz的工作时钟,配置使用FIFO中的端口2收发数据,芯片处于正常模式,在INT0中断服务程序中设置芯片进入SLAVE模式,此时传输数据使用异步FIFO传输。
1.2.2USB芯片和图像传感器的硬件连接与软件工作过程
图像传感器MT9D112与USB芯片CY7C68013A的引脚连接如图5所示。
图5 MT9D112与CY7C68013A的引脚连接图
工作过程:当图像传感器的帧同步VSYNC信号来临时,即可触发USB芯片的INT0中断,在INT0的中断处理函数中配置寄存器,使得USB芯片CY7C68013A进入SLAVE模式。之后当行同步HSYNC信号为高电平时,USB芯片的SLWR引脚被相应置于高电平,此时开始有效的视频数据采集。图像传感器的每个像素时钟并行输出8位的RAW数据,在满分辨率(1 600×1 200)的情况下,一帧图像的数据量为:1 600×1 200×1=1 920 000(Byte),按最高帧速每秒15帧计算,则每秒的数据吞吐量为1 920 000×15=28 800 000(Byte),即所需带宽至少为28.8 MB/s,而USB芯片CY7C68013A在SLAVE模式下可达到56 MB/s,满足要求。
1.2.3USB芯片与上位机的命令交互
实际应用中需要由上位机发出采集命令,而后USB芯片才能将图像传感器的数据上传至上位机,故而上位机与USB芯片CY7C68013A之间需要进行命令的交互,此处以用户自定义请求的方式实现。处理用户自定义请求流程如图6所示。
工作过程:上位机发送开始采集图像数据的命令,此命令以用户自定义请求的方式发送至USB芯片CY7C68013A,使INT0中断。当图像传感器MT9D112的某一个帧信号到来时,触发USB芯片的INT0中断,该中断处理函数将USB芯片CY7C68013A由正常模式转入SLAVE模式,以确保能够接收到完整的帧数据,之后通过选定的端点,不间断地将完整的图像数据传送至上位机。
图6 处理用户自定义请求流程
1.3图像显示单元
1.3.1USB驱动程序
驱动程序用来完成USB芯片CY7C68013A芯片与上位机间的底层通信,CYPRESS公司 针对该芯片提供了通用驱动程序CYUSB.SYS,只要硬件电路搭建无误,安装该驱动后,电脑即会自动识别该芯片[5]。
1.3.2下载固件程序
下载固件的程序用于把写好的固件程序下载到USB芯片CY7C68013A的RAM 或外部EEPROM中,其作用是使USB芯片的CPU 重启,模拟断开与USB总线的连接以完成对芯片的重新配置。
CyPress公司已经提供了下载固件的程序CyConsole.exe,并附有操作手册,用户借助这个工具可以方便地将固件下载至USB芯片。
1.3.3上位机程序
上位机程序在VS2010环境下采用MFC编写,主要实现图像数据的处理、显示和保存,具体分为以下3个方面:
1) 接收数据。借助CYPRESS公司提供的C++类库和例程代码,可以轻松完成接收图像数据的任务。CYPRESS 提供了9 个类,调用这些类就可以与USB芯片通信,本文中用到的类有:
CCyUSBDevice类:包含建立USB设备、获取USB设备手柄、打开USB设备、统计当前端点数目等功能;
CCyUSBEndPoint类:包含建立端点对象、枚举端点、获取端点属性等功能;
CCyControlEndPoint类:包含定义控制端点,设置控制端点属性等功能,通过XferData()函数发送命令与USB芯片进行交互(见1.2.3节);
CCyUSBEndPoint类:其中包含的BeginDataXfer()、WaitForXfer()和FinishDataXfer() 3个函数用于上位机与USB芯片进行数据传输,来自图像传感器的数据就是从这3个函数中获得。
借助上述4个类提供的功能,即可完成建立USB设备、获取USB设备句柄、建立端点对象,发送控制传输命令,与USB芯片进行数据传输的任务。
注意:使用时需要加上头文件CyAPI.h,在项目中还要引用CyAPI.lib。
2) 渲染图像。渲染图像最简单的方法是采用GDI方式,利用绘图函数StretchDIBits()实现[9],该函数的功能是将矩形区域内像素数据拷贝到指定的目标矩形中进行显示。注意:StretchDIBits()只能播放RGB格式的数据,本文中RAW格式的数据只能先行转换为RGB格式才能正确显示。
RAW格式的数据没有经过任何图像处理(如锐化、增加色彩对比)过程,记录的是图像传感器拍摄到的原始数据,将其转化为RGB格式最简单的方法就是扩充,即将一个像素的单字节数据直接转换为RGB格式的3个字节数据(如RAW格式下某个像素值为255,则直接变为RGB格式的255,255,255)。
3) 保存图像。据第二小节,在RGB图像格式的基础上,每一帧数据前加入BMP文件头和数据头信息,即可保存为一幅bmp格式的图像[10]。若是需要对图像数据做进一步的分析处理,或是保存为视频文件,则须在此处添加相应等功能。
2 硬件实验结果
使用上述方法进行设计,系统实物如图7所示,左图为图像传感器模组,右图是以USB芯片CY7C68013A为核心搭建的测试平台。
图7 系统实物图
设置图像传感器MT9D112输出分辨为1 600×1 200,预览模式,每秒10帧。图8为拍摄现场,图9为预览模式下的拍摄画面。
图8 拍摄现场图
图9 预览模式下拍摄图
3 总结
以CyPress公司的USB 2.0芯片CY7C68013A为核心搭建平台,以CMOS图像传感器MT9D112为例,探讨了如何通过USB技术将图像传感器的图像数据在电脑上显示。经实验,该平台可对200万像素以下的多种类型的CMOS图像传感器进行分辨率、帧频、成像品质等性能进行测试,目前已经对OV7670、OV2640、OV5640三种图像传感器在上位机测试程序中成功进行了实验,以OV5640为例实验结果如图10。
图10 OV5640的测试结果图
另外,因手工焊接需要,本设计所用主要芯片的规格如表1所示。而目前可供选择的USB芯片CY7C68013A最小尺寸为8 mm×8 mm,QFN封装。凭借其结构小巧且能够自主设计的优势,该系统可以设计在宽为10 mm的长条电路板上,进而能够为空间狭小且需要监控的区域设计符合其规格要求的监控系统。
表1 主要芯片的规格
[1]周应发,黄泽锷.基于FPGA的USB视频传输系统设计[J].价值工程,2014(13):192-193.
[2]梁风梅.基于USB 2.0的高速实时图像采集系统[J].电脑开发与应用,2009(6):26-27.
[3]1/4-Inch System-On-A-Chip (SOC) CMOS Digital Image Sensor MT9D112[EB/OL].Micron Technology.http://m.doc88.com/p-798379716410.html/.
[4]EZ-USB FX2LP DataSheet[EB/OL].Cypress Semiconductor Co.Ltd.http://www.cypress.com/documentation/datasheets/.
[5]EZ-USB Development Kit User Guide[EB/OL].Cypress Semiconductor Co.Ltd.http://www.cypress.com/documentation/datasheets/.
[6]权晓红,虚拟I2C在停车场门禁系统中的应用[J].自动化与仪器仪表,2014(3):71-74.
[7]张宇,杨世洪.基于CMOS图像传感器的高帧频相机的设计[J].仪器仪表用户,2011(18):41-44.[8]孙鑫.VC++深入详解[M].北京:电子工业出版社,2009.[9]最简单的视音频播放示例2:GDI播放YUV,RGB[EB/OL].http://m.blog.csdn.net/blog/leixiaohua1020/4026
6503/.
[10]韩英.一种基于BMP图片的显示方法[J].仪表技术,2011(2):61-62.
(责任编辑杨继森)
Design of Video Transmission System Based on USB 2.0 Technology
LI Jiang-bo, MA Chun-ting, YANG Fan, CHEN Zhi-wei
(Ordnance Engineering College,Department of Artillery Engineering, Shijiazhuang 050000, China)
CMOS image sensor was used as photoelectric device. CY7C68013A was used as the USB 2.0 controller chip for the image information transmission channel. The video data of the CMOS was processed and transferred to the USB chip. Finally, the picture was displayed on the PC. The design with clear structure could be used not only as handheld device, but also as measurement of several types of image sensor.
USB; image capture; image transmission
2016-01-04;
2015-02-15
李江波(1980—),男,硕士研究生,主要从事嵌入式系统研究。
10.11809/scbgxb2016.08.029
format:LI Jiang-bo, MA Chun-ting, YANG Fan, et al.Design of Video Transmission System Based on USB 2.0 Technology[J].Journal of Ordnance Equipment Engineering,2016(8):127-130.
TP37
A
2096-2304(2016)08-0127-05
【信息科学与控制工程】