白会东 赵成成 田青青 魏巍
摘要:在USB协议中定义了多种类,它们不仅可以实现不同的功能,还能促进USB设备的普及。网络摄像头和USB采集卡中就用到了USB视频类,它的好处是能够实现即插即用,省去驱动的开发工作。一般情况下采用UVC协议的系统是单独采用USB控制芯片来完成整个设计。为了增加设计的多元性,文章采用了 FPGA和USB3.0架构的方式,实现了一种基于UVC协议的图像采集系统。
关键词:UVC协议;USB3.0;图像采集;固件
1 系统组成与工作流程
系统构成如图1所示,分别为:含有OV5642传感器的摄像头模块、Cyclone IV系列的FPGA芯片、Cypress公司的USB3.0芯片和主机[1]。系统的工作流程为:第一步,上电后在线配置USB3.0的固件程序和下载逻辑程序到FPGA中;第二步,程序加载到FPGA完成后会自动地通过SCCB接口配置摄像头的寄存器,完成摄像头的初始化工作;第三步,等待摄像头模块稳定输出后开始接收图像数据,并转换成符合UVC(USB视频类)格式;第四步,数据经过USB的DMA通道传输给上位机进行显示。
2 程序设计
2.1 摄像头配置程序设计
摄像头的配置不是用USB芯片内的IIC接口进行加载,而是用FPGA内嵌的功能模块完成的[2]。在FPGA中创建片上系统(SOC),用Verilog HDL语言设计硬件模块,用C++语言设计配置逻辑程序。先调用Quartus II软件中的Qsys工具完成硬件工程的创建,按照需求添加功能模块,这里主要添加了Nios2处理器、On-chip Memory、oc_iic和PIO功能模块。然后连接时钟信号到每一个模块上,把数据总线连接到相应的接口上,并设置中断等级,完成硬件模块的创建。在配置文件逻辑程序设计时,先调用Eclips完成软件工程的创建,通过手动添加配置文件把工程映射到硬件上。同时把输出文件配置成on-chip mm模式,然后编写SCCB读写控制逻辑和配置文件。通过这种方式可以把软件和硬件逻辑编辑到同一个文件中,减少了配置过程中多次配置的繁琐步骤。最后由Quartus Ⅱ编译产生包含软件和硬件的sof文件。
2.2 USB固件程序设计
固件的开发使用了Cypress提供的框架和API。通过GPIF Ⅱ Designer工具设计通用可编程接口(GeneralProgrammable Interface,GPIF Ⅱ),生成包含接口配置信息的C头文件[3]。其中GPIF Ⅱ接口是一个具有256种状态的可编程状态机,应用起来非常灵活,既可以作为主控接口也可以作为从设备接口。通过GPIF Ⅱ接口模块把EZ-USB FX3数据传输通道转变成FIFO,简化了处理器的操作,让数据经过DMA通道传送给USB端点。GPIF Ⅱ接口数据传输的实际通道是GPIF线程,传输时把发送套接字映射到GPIF物理线程上,让接口数据能够存储到缓冲区中。首先将第一个DMA描述符加载到套接字,获取第一个DMA缓冲区的信息,然后把数据写入第一个缓冲区,当第一个缓冲区写满时,套接字会根据描述符指针读取第二个DMA描述符信息,把数据继续写入所对应的缓冲区,以此顺应描述符链循环操作。当全部缓冲区写满或者收到傳输结束信号时,自动把数据传输到USB端点,避免了CPU操作带来的开销,提高了数据传输速率。设计中GPIF II状态机要满足在VSYNC和HSYNC都有效时,才能连续传输一行数据,而且都要保证在每帧开始传输前标头位已经更新。通过乒乓操作对两个Buffer的交替读写,实现了数据的连续传输。
C头文件添加到固件框架中,调用API函数实现DMA通道。DMA通道是由套接字、DMA描述符和Buffer构成的,主要用于数据的缓存和传输。DMA通道的启动是用CyFxUVCApplnlnit函数完成的,而函数中的dmaMultiConfig结构里描述了DMA通道的具体信息。固件运行时通过入口函数CyU3PFirmwareEntry ()进入主程序main (),完成硬件的初始化和启动实时操作系统,然后执行创建线程和注册回调函数等操作,完成USB的配置[4]。
3 系统验证
系统验证时要先下载USB固件,再加载FPGA控制逻辑。一旦使用USB-Blaster线缆通过JTAG接口加载配置文件,程序会立即执行并进行数据的采集。PC系统中提供UVC的驱动程序,所以开源应用上位机VirtualDub可以直接进行图像的显示,结果如图2所示,图像采集系统工作稳定。
4 结语
一般UVC模式的图像采集系统只采用USB芯片完成,为了增加设计的多样性,充分利用开发板的功能部件,增加了 FPGA的参与。在设计中FPGA主要用作配置摄像头模块,主要的控制逻辑是在FX3中实现,改变以往只使用USB芯片的设计模式。实验结果表明,基于USB和FPGA架构使用UVC协议的采集系统具有可行性,能够满足图像实时采集的要求。
[参考文献]
[1]殷开亮.基于UVC协议的USB3.0图像采集系统设计[D].苏州:苏州大学,2014.
[2]李江波,马春庭,王全,等.基于UVC协议的USB3.0视频采集系统设计[J].单片机与嵌入式系统应用,2016(10):31-35.
[3]Cypress Semiconductor.How to implement an image sensor interface using EZ-USB FX3 in a USB video class(UVC)framework[EB/OL].(2018-01-11)[2018-06-06].http://www.cypress.com, 2018 ,1-11.
[4]张聪,张涛.基于USB3.0设备控制器的固件设计[J].电子器件,2013(3):383-388.