第二章 UVC协议固件开发
本章说明:
本章在cypress官方文档说明的基础上,对如何修改固件做出直接、详细的说明,以降低开发难度。固件修改部分包括:
1、修改图像分辨率、图像帧率;
2、修改UVC传输数据格式;
3、修改UVC传输数据位宽。
一:修改图像分辨率、图像帧率
1、cypress官方驱动安装完成后,默认安装有EZ USB Suite工具,在开始目录打开。新建空白文件目录UVC_test。初次打开时需要选择工作目录,选择UVC_test目录,进入软件界面。选择file->Import,点击General->Existing Projects into Workspace->Next。
2、如果工作目录已经存在一个工程,则不能再创建工程,这时需要Switch Workspace->Other重新选择一个可用的工程目录。
3、选择UVC_AN75779目录,勾选Copy projects into workspace,Finish。这时会在UVC_test目录下新创建一个工程,整个的编辑都在这个新工程下进行。
4、打开cyfxuvcdscrc.c,寻找CyFxUSBSSConfigDscr函数,此函数对应USB3.0的开发,USB2.0需更改与其对应的函数。寻找程序中如下图部分。黄线为横纵轴的比例,蓝线为横纵轴的分辨率,红线为每帧耗时,对应帧率。
以修改为640*480@50fps为列。640/480=8/6,黄线部分对应填入0x08、0x06;640=0x280,480=0x1E0,蓝线部分对应填入0x80,0x02和0xE0,0x01(注意高低位顺序);1/50fps=20ms=200000*100ns,200000=0x30D40,红线部分对应填入0x40,0x0D,0x03,0x00。可见下图。
二:修改图像数据格式
源固件默认为YUY2数据格式,Windows下还支持大量其他数据格式,并为每种格式都分配了固定的GUID,图中只显示其中一部分,详情参考UVC_GUID。
将原有代码注释,以RGB32格式修改为例,修改如下。
二:修改图像数据位宽
不同的数据格式要求不同的数据位宽,如YUY2-8bit,RGB565-16bit,RGB32-32bit。
高数据位宽可向下兼容低数据位宽。源码中默认为8bit,对其进行更改为32bit。
1、打开cypress驱动默认安装的GPIF II Designer工具。选择File->Open Project,选择正在编辑的工程目录下的fx3_uvc.cydsn\fx3_uvc.cyfx,打开工程。
2、在Interface Definition目录下修改Data bus witdh为32Bit,点击State machine。
2、分别点击LD_DATA_COUNT、LD_ADDR_COUNT,将数据长度改为4091(16bit对应8183,8bit对应16367)。保存、编译。
3、原fx3_uvc.cydsn目录下会新生成cyfxgpif2config.h文件,用其替代原工程相同名称文件。
4、将CyFxUSBSSConfigDscr函数中Number of bits per pixel行改为0x20,对应32bit(默认为0x10)。
5、32bit情况下,打开uvc.c文件,确保最后部分按下图红线处设置。
6、保存更改,在工程名上右键,点击Build Project,生成固件镜像文件。
7、固件修改完成,用cypress驱动Control Center工具烧录。给入图像数据后,打开VirtualDub工具,选择File->Capture AVI,等待几秒钟,即可显示图像。选择Video-Capture pin可查看固件支持的图像数据格式。