第二章 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可查看固件支持的圖像數據格式。