APP下载

基于UVC协议的USB3.0视频采集系统设计

2016-11-26李江波马春庭王全赖彬

单片机与嵌入式系统应用 2016年10期
关键词:描述符固件缓冲区

李江波,马春庭,王全,赖彬

(1.军械工程学院,石家庄 050000;2.中国人民解放军 73136部队)

基于UVC协议的USB3.0视频采集系统设计

李江波1,2,马春庭1,王全2,赖彬2

(1.军械工程学院,石家庄050000;2.中国人民解放军73136部队)

以MT9M034作为光电成像元件,CYUSB3014作为主控芯片,通过GPIF II接口采集CMOS图像传感器的数据,并为每一帧数据添加UVC视频数据标头,将其转换为符合UVC协议标准的视频数据,最后通过USB3.0接口以乒乓DMA的方式将其传送至PC,实现了免驱动、高速率、高分辨率的UVC视频设备。实验结果表明,该系统运行稳定,传输速率高,更换CMOS图像传感器可以制成不同规格的UVC视频设备,具有良好的推广价值。

视频采集;CYUSB3014;MT9M034;UVC

引 言

随着科技的不断发展,图像传感器在性能上有了极大的提升,但普通用户对图像传感器的使用还存在诸多不便,例如对于某种图像传感器,用户必须安装相应的驱动程序;更换高速率、高分辨率的图像传感器时必须要更换相应驱动程序。而这些困难对于不熟悉图像传感器原理的用户是难以在短时间内克服的,在这种情况下,研究一种通用的、使用方便的视频采集系统具有重要意义[1]。

UVC(USB Video Class)是微软与另外几家设备厂商联合推出的、为USB视频设备定义的协议标准,目前已成为USB org标准之一。当前主流的操作系统(如Windows XP SP2 and later、Linux 2.4.6 and later、MacOS 10.5 and later)均已内置UVC设备驱动,因此符合UVC规格的硬件设备不需要安装任何驱动程序即可在终端(如PC)正常使用。本文以Aptina公司的CMOS图像传感器MT9M034采集外部视频数据,以CyPress公司的USB3.0控制器芯片CYUSB3014作为传输控制芯片,将原始视频数据转换为符合UVC协议的视频数据,经USB3.0接口上传至PC机实时显示。该设计可对各种类型的图像传感器进行调试,也可制成不同规格的UVC视频设备。其优点在于连接PC时不用安装驱动,利用现有的VLC媒体播放器或AMCAP软件可以方便地设置图像传感器的各类参数,极大地方便用户对各类图像传感器的调试和使用。

1 系统总体设计

该系统[2-8]由两部分组成,以图像传感器MT9M034模组作为视频采集单元,以CYUSB3014开发板作为传输控制单元。系统结构如图1所示。

图1 系统结构框图

该系统通过USB3.0接口将视频数据传送到PC机, CYUSB3014完成两项任务:

①通过GPIF II接口采集图像传感器发出的视频数据,并在固件中将视频数据转换为符合UVC协议的格式,之后以DMA方式通过USB3.0接口传送至PC机。

②以USB控制传输的方式与PC进行命令互动,固件程序通过I2C接口对图像传感器内部寄存器进行配置,并在图像传感器正常工作后,通过I2C接口向其发送控制命令。

该系统连接上PC后,USB3.0接口提供的5 V电源使得该系统正常启动,之后PC会自动识别该系统,并可通过VLC媒体播放器软件对该系统进行操作。

该系统应用框图如图2所示。

图2 系统应用框图

1.1 视频采集单元

选用Aptina公司的MT9M034图像传感器的原因是,MT9M034在高分辨率、低照度条件下具有良好的感光性、宽动态范围(WDR 120 dB)和高清画质(720P/60 HD),不受恶劣光照条件的约束,可以放置于任何地方,消除了低照度条件下对视频画面造成的不良影响。MT9M034模组的连接示意图如图3所示。

图3 MT9M034模组连接示意图

MT9M034通过12位同步并行数据接口DQ[0:11]输出YUY2格式的视频数据,每个像素占用2个字节,分辨率为1280×720,帧频为60 fps。

MT9M034模组正常工作时所需电压为1.8 V和2.8 V,由USB3.0接口电源线(5 V)经电源芯片RT9167/A转换后提供。电源模块如图4所示,以1.8 V为例。

1.2 传输控制单元

该单元[9-11]是整个系统的核心,而CYUSB3014又是该单元的核心,拥有主频为200 MHz的32位ARM 926EJ-S处理器,能在多种外设(如USB、GPIF II、SPI、UART)之间实现高效灵活的DMA连接。固件程序只需设定好外设数据传输的配置,DMA模块便可接管这些外设,实现特定的功能。下面以该单元实现的功能流程为例,分别予以分析:

图4 电源模块示意图

①要使MT9M034模组输出视频数据,必须进行初始化,故而CYUSB3014需通过I2C接口对其内部寄存器进行配置;

②要使PC能够自动识别该系统为UVC设备,CYUSB3014必须提供UVC特定的USB描述符进行枚举,并对PC中关于UVC设备视频属性或控制属性的SET/ GET(设置/获得)请求作出响应;

③要通过GPIF II接口采集MT9M034模组的视频数据,CYUSB3014必须根据MT9M034的输出引脚特性, 对GPIF II接口进行相应的配置;

④要使视频能够高速传输,CYUSB3014需构建DMA通道,将GPIF II模块的视频数据直接转移至DMA缓冲区,并配置DMA,使得视频数据可以被修改;

⑤要使视频数据的格式符合UVC协议,CYUSB3014需在每一帧数据前添加UVC视频数据标头;

⑥要使该单元既能够响应PC的UVC请求,又能够向PC实时传送视频数据,固件程序在启动完毕后,必须建立至少两个应用线程:一个线程负责实时视频传输,另一个线程负责等待PC的UVC请求,并在请求来临时能够调用相应的函数响应用户请求。

下面根据分析得到的6点要求,对传输控制单元进行详细阐述。该单元的内部流程如图5所示。

1.2.1 初始化MT9M034

通过I2C总线接口将数据写入MT9M034内部寄存器中,将其配置为12位并行输出,输出格式为YUY2, 720P(1280×720)高清画质。

注意:MT9M034的从设备地址为8位,内部寄存器的地址和值均为16位。当MT9M034的SADDR引脚接地时,其I2C从地址为0x20(写地址)和0x21(读地址),反之则为0x30(写地址)和0x31(读地址)。

图5 单元内部流程图

1.2.2 识别UVC设备

①根据USB规范中UVC描述符的定义,UVC设备需具有以下4种逻辑元素:IT为输入端;OT为输出端;PU为处理单元;EU为扩展单元。四者在UVC描述符中互相连接,如图6所示。

图6 四种逻辑元素连接图

输入端(IT)描述符用来描述图像传感器的相关信息;输出端(OT)描述符用来描述IT、PU、EU和PC之间的接口关系,如定义使用了哪个USB端点;处理单元(PU)描述符用来描述视频数据的各项属性,如亮度、对比度、色调等;扩展单元(EU)描述符可以自主添加任何想要实现的特性,此处为空。

此外,UVC描述符中重要的还有:视频控制(VC)接口描述符,定义了控制属性(如亮度、对比度、PTZ、白平衡等);视频流(VS)接口描述符,定义了视频属性(如宽度、高度、帧频、分辨率等)。

图7 UVC设备枚举流程图

注意:只有使用UVC协议规定的USB描述符进行枚举,PC的操作系统才能识别为UVC设备。

UVC设备枚举流程如图7所示。

②枚举之后,PC中的UVC驱动程序还会继续向UVC设备发送一系列请求,来确定设备状态,如查询UVC设备是否支持某种分辨率输出或者设置为MJPEG格式输出等,所有的请求都会通过USB控制端点(EP0)发送给CYUSB3014,故而固件程序必须能够对USB描述符中UVC设备的控制属性和传输能力作出正确的描述和准确的控制。

下面以更改UVC设备输出视频格式为MJPEG为例,以流程图的形式对这一过程进行说明,如图8所示。

1.2.3 配置GPIF II接口

CYUSB3014的GPIF II接口用于采集外部硬件的数据,先连硬件,后配软件。将MT9M034输出引脚连接至CYUSB3014的GPIF II接口的对应引脚,如图9所示。

根据CYUSB3014的例程,其中对如何配置GPIF II接口有详细说明,这里只需根据MT9M034 的Frame-Valid、Line-Valid、PCLK、DQ[0:11]引脚信号时序图,在例程基础上进行修改,下面分别予以阐述:

图8 PC应用程序更改UVC设备属性流程图

图9 GPIF II接口引脚连接图

①将GPIF II接口配置为12位数据总线,由于12位总线是非字节对齐方式,故而将GPIF II接口配置为16位数据总线,多余的4位用零填充。

②由于GPIF II接口无流量控制功能,而MT9M034输出数据时,帧(Frame-Valid)与帧之间、行(Line-Valid)与行之间有少许时间间隔,是断续状态,但一整行数据输出时是连续的,为保证数据完整性,一行数据输出时采集过程不能中断。如前所述,MT9M034输出分辨率为1280×720,即每行1280个像素,而YUY2格式下每一个像素占用2个字节,所以每一次行数据传输需要2 560个字节的存储空间。

图10 数据传输框图

③每一帧数据采集完毕后都向CPU发送中断,以便CPU及时准确地修改每一帧数据,使其符合UVC协议标准。

根据以上3点,结合GPIF II例程,借助GPIF II Designer软件可以方便地设计出符合要求的GPIF II配置文件。

1.2.4 构建和配置DMA通道

CYUSB3014数据的输出和输入与下面4个术语有关:

①插座:外部硬件与CYUSB3014内部RAM的连接点,CYUSB3014上的每个外设接口(如USB、GPIF、SPI 等)都有与其自身相连的插座,如GPIF插座包括一组寄存器,用于指向有效的DMA描述符,并可以使能或标记中断。

②DMA描述符:一组位于CYUSB3014内部RAM的寄存器,保存有DMA缓冲区的地址和长度数据,以及指向下一DMA描述符的指针。

③DMA缓冲区:属于内部RAM,可以存储GPIF II接口采集的视频数据。

④GPIF线程:是GPIF II模块的数据专用通道,用于将采集的外部视频数据与GPIF插座连接起来。

插座可以通过各种事件发信号,也可以通过中断向CPU发信号,均由固件配置。例如将视频数据从GPIF II模块传至USB模块,GPIF插座通知USB插座:我已将某DMA缓冲区填满,可以取出数据;或者USB插座通知GPIF插座:我已清空某DMA缓冲区。

插座填满或清空DMA缓冲区后,需要一段延时用于从一个DMA描述符转移至另一个描述符,在此期间,插座不能传输数据。而GPIF II模块支持多线程传输,GPIF线程的切换没有延迟,所以通常采用多个GPIF线程传输视频数据,这样可以屏蔽切换DMA描述符时GPIF插座所需要的延时。另外,切换DMA描述符时,对应的DMA缓冲区也相应切换,采用乒乓方式进行数据传输。

GPIF线程的切换策略在CyPress公司发布的CYUSB3014的开发例程中有详细介绍,此处只需在其基础上略做修改即可,采用两个GPIF线程传输数据的流程如图10所示。

1.2.5 添加UVC视频数据标头

YUY2格式是YUY格式中4∶2∶2的采样版本,UVC规范支持这一格式。亮度值Y是对所有像素采样,而色度值U和V仅对偶数像素采样,每个像素占用两个字节。

注意:UVC规范中,每一次的USB传输操作都需要添加UVC视频数据标头。USB批量传输数据包大小为1024字节,一次USB传输操作包括16个批量数据包,因此一次USB传输操作可以传送16×1024=16 384字节。而CYUSB3014架构要求DMA缓冲区大小区为16字节的倍数,由于DMA缓冲区需要保留供CPU填充数据标头的12字节空间,不再是16字节的倍数,所以DMA缓冲区大小应为16 384-16=16 368字节。而一帧视频数据为1280×720×2=1 843 200字节,1 843 200÷(1024× 16)=112.61,即当帧数据结束时,对应的DMA缓冲区未饱和,此时固件需要强制打包DMA缓冲区,触发发送事件。因而每一帧数据总共需要113次USB传输操作,即需添加113次数据标头。

数据标头描述一帧数据的各类属性,如表1所列。

表1 数据标头属性

添加数据标头的方法:采用手动DMA通道操作,当GPIF插座采集数据填满某一DMA缓冲区后,产生中断通知CPU;CPU将12字节的数据标头添加至该DMA缓冲区前面空闲的16字节位置,之后将新的DMA描述符(指向该DMA缓冲区前偏移16字节的位置)传递给USB模块;USB模块接到通知后,根据新的DMA描述符将视频数据取走。

1.2.6 建立两个线程

CYUSB3014固件负责视频流的采集、修改与发送,首先配置CPU及I/O引脚,之后初始化I2C、DMA通道、USB端点等模块,确保枚举为UVC设备。然后调用函数(Cy U3PKernelEntry)启动Thread X实时操作系统(RTOS)。该固件会创建两个应用线程:UVCApp Thread 和UVCApp EP0Thread,RTOS调配资源维护这两个应用线程的正常运转。

UVCApp Thread线程用于管理和传输视频流,它调用CYUSB3014内部模块的启动函数,枚举器件,然后开始视频传输。UVCApp Thread线程在流事件发生后,会调配DMA缓冲区开始视频传输,并在每一帧后或停止视频流时清除FIFO。该线程在没有视频流事件时,主应用线程将在该处循环等待,直到发生视频流事件为止。当终止视频流时,会复位与视频流事件相关的变量,并复位相关的DMA通道,等待下一个视频流事件的发生。

UVCAppEP0Thread线程用于等待接收特定的UVC请求,并调用相应的函数处理这些请求。该线程根据通过EP0端口发送来的UVC特定控制请求(SET_CUR、GET_CUR、GET_MIN和GET_MAX),对亮度、PTZ和PROBE/COMMIT控制,通过I2C接口对图像传感器传送相匹配的命令。

CYUSB3014固件程序运行流程如图11所示。

图11 固件程序流程图

2 硬件实验结果

使用上述方法进行设计,将名为cyfxuvc.img的固件程序输入该系统,然后接入PC的USB3.0接口,借助PC操作系统内置的UVC驱动,可以将该系统识别为UVC设备。之后打开VLC媒体播放器应用程序,选择视频源为该UVC设备,按下播放按钮,VLC媒体播放器就会向CYUSB3014发送请求视频数据命令,CYUSB3014将视频数据从图像传感器MT9M034发送至PC,VLC媒体播放器对视频数据进行解析并显示图像。

结 语

针对图像传感器使用不便的缺点,运用USB3.0传输控制芯片CYUSB3014将图像传感器输出的视频数据转换为符合UVC协议标准的数据并传输至PC实时显示,实现了免驱动、高速率、高分辨率的图像传感器测试模块设计。

实验结果表明,该系统运行稳定,传输速率高,更换CMOS图像传感器可以制成不同规格的UVC视频设备,具有良好的推广价值。

[1]殷开亮.基于UVC协议的USB3.0图像采集系统设计[D].苏州:苏州大学,2014.

[2]梁晓芬.USB3.0超高速数据采集卡的设计与实现[D].西安:中国科学院研究生院(西安光学精密机械研究所),2014.

[3]岳孝忠.基于USB3.0的高速数据传输系统设计与研究[D].太原:中北大学,2015.

[4]朱鸽,郑杰,肖宇峰.基于UVC协议的ROS视频监控系统设计[J].微型机与应用,2015,34(19):14-16,23.

[5]段建波.基于USB3.0高分辨率摄像头图像采集系统设计[D].宁波:宁波大学,2014.

[6]杨成禹,庄晓奇.基于ARM的图像采集与传输系统设计[J].电子测量技术,2015,38(12):59-62.

[7]卫建华,邓云兵,高燚,等.基于ARM的嵌入式视频采集系统的设计与实现[J].现代电子技术,2016,39(3):30-34.

[8]曾程.基于USB2.0免驱摄像头固件的设计[D].武汉:华中师范大学,2011.

[9]Cypress Semiconductor.Getting Started with EZ-USB FX3 [EB/OL].[201605].http://www.cypress.com/?rID= 72599.

[10]Cypress Semiconductor.How to Implement an Image Sensor interface Using EZ-USB FX3 in a USB video class(UVC) Framework[EB/OL].[2016-05].http://www.cypress. com/?rID=72599.

[11]Cypress Semiconductor.EZ-USB FX3 HD 720p Camera Kit[EB/OL].[2016-05].http://www.cypress.com/? rID=72599.

USB3.0 Video Acquisition System Based on UVC Protocol

Li Jiangbo1,2,Ma Chunting1,Wang Quan2,Lai Bin2

(1.Ordnance Engineering College,Shijiazhuang 050000,China;2.No.73136 Unit of PLA)

A USB3.0 video acquisition system based on UVC protocol is designed.The MT9 M034 is used as the photoelectric device and the CYUSB3014 is used as the controller chip.CYUSB3014 acquires the data from CMOS image sensor,then converts the data to video that conforms to the UVC protocol.At last,the video data is transferred to PC through the USB3.0 interface in the way of ping-pong DMA,so a UVC video equipment of free-drive,high-speed,high-resolution is achieved.The experiment results show that the system runs stably,has high transmission rate,and can be made into different specifications of UVC video equipment by replacing the CMOS image sensor.The system has a good value for promotion.

video acquisition;CYUSB3014;MT9M034;UVC

TP274

A

(责任编辑:薛士然2016-05-05)

猜你喜欢

描述符固件缓冲区
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
基于深度学习的局部描述符
基于SHA1的SCADA系统PLC固件完整性验证方法
特征联合和旋转不变空间分割联合的局部图像描述符
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
一类装配支线缓冲区配置的两阶段求解方法研究
关键链技术缓冲区的确定方法研究
提取ROM固件中的APP