基于AC6102_V2開發(fā)板的USB Video Class攝像頭實(shí)驗(yàn),實(shí)現(xiàn)了通過AC6102開發(fā)板上的USB3.0芯片將OV5640攝像頭采集到的圖像數(shù)據(jù)傳輸?shù)?/span>PC機(jī)上,并使用UVC圖像顯示軟件顯示的功能。
USB3.0速率等級(jí)
YUV422圖像格式傳輸
1280*720@30fps幀率
UVC,全稱為:USB video class 或USB video device class。是Microsoft與另外幾家設(shè)備廠商聯(lián)合推出的為USB視頻捕獲設(shè)備定義的協(xié)議標(biāo)準(zhǔn),目前已成為USB org標(biāo)準(zhǔn)之一。
如今的主流操作系統(tǒng)(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 andlater)都已提供UVC設(shè)備驅(qū)動(dòng),因此符合UVC規(guī)格的硬件設(shè)備在不需要安裝任何的驅(qū)動(dòng)程序下即可在主機(jī)中正常使用。使用UVC技術(shù)的包括攝像頭、數(shù)碼相機(jī)、類比影像轉(zhuǎn)換器、電視棒及靜態(tài)影像相機(jī)等設(shè)備。
最新的UVC版本為UVC 1.5,由USB Implementers Forum定義包括基本協(xié)議及負(fù)載格式。
網(wǎng)絡(luò)攝像頭是第一個(gè)支持UVC而且也是數(shù)量最多的UVC設(shè)備,目前,操作系統(tǒng)只要是 Windows XP SP2 之后的版本都可以支持 UVC,當(dāng)然 Vista 就更不用說了。Linux系統(tǒng)自2.4以后的內(nèi)核都支持了大量的設(shè)備驅(qū)動(dòng),并可以支持UVC設(shè)備。
使用 UVC 的好處 USB 在 Video這塊也成為一項(xiàng)標(biāo)準(zhǔn)了之后,硬件在各個(gè)程序之間彼此運(yùn)行會(huì)更加順利,而且也省略了驅(qū)動(dòng)程序安裝這一環(huán)節(jié)。
本實(shí)驗(yàn)基于Cypress廠家提供的應(yīng)用手冊(cè)AN75779。在該應(yīng)用手冊(cè)中,并未使用到FPGA芯片,而是直接使用FX3芯片連接圖像傳感器,如下圖1所示。即一個(gè)最精簡(jiǎn)的基于FX3芯片的UVC攝像頭是不需要FPGA芯片的參與的。但在實(shí)際的應(yīng)用中,可能需要先對(duì)圖像進(jìn)行一定的預(yù)處理再送往PC端顯示處理,為了降低PC端的運(yùn)算開銷,往往將這一部分預(yù)處理工作分配到FPGA中,利用FPGA強(qiáng)大的并行處理優(yōu)勢(shì)實(shí)現(xiàn)。
在AC6102開發(fā)板上,設(shè)計(jì)了一款擁有30K邏輯單元的FPGA主芯片EP4CE30和一個(gè)FX3芯片,FX3芯片的所有數(shù)據(jù)線和控制線,除IIC、IIS、SPI等以外,全部連接到了FPGA上。因此當(dāng)使用AC6102開發(fā)板進(jìn)行UVC實(shí)驗(yàn)時(shí),需要通過FPGA芯片進(jìn)行一個(gè)簡(jiǎn)單的橋接。
橋接有兩種方式,一種是直接使用組合邏輯,將輸入連接到輸出,例如:
assign LV = cmos_href; assign FV = cmos_vsync; assign DQ ={8'd0,cmos_data}; |
當(dāng)使用這種方式時(shí),是直接的輸入IO的信號(hào)經(jīng)過布線直接連接到了輸出IO上,沒有D觸發(fā)器,因此難以進(jìn)行時(shí)序約束。
另一種能夠支持時(shí)序約束的橋接方式是,使用cmos_pclk將所有信號(hào)打2拍之后輸出,如下圖2所示。這樣的話即每個(gè)信號(hào)從輸入到輸出,會(huì)經(jīng)過2級(jí)寄存器傳輸,這樣在進(jìn)行時(shí)序約束時(shí)就非常方便了,一級(jí)寄存器作為輸入寄存器,另一級(jí)作為輸出寄存器,既方便布局布線,也利于時(shí)序分析。

本實(shí)驗(yàn)中采用第二種方式進(jìn)行橋接,即在輸入和輸出信號(hào)之間插入2級(jí)寄存器的方式。
reg LV_r,FV_r,PCLK_r; reg[15:0]DQ_r;
always@(posedge cmos_pclk)begin LV_r <= cmos_href; FV_r <= cmos_vsync; DQ_r <={8'd0,cmos_data}; end
always@(posedge cmos_pclk)begin LV <= LV_r; FV <= FV_r; DQ <= DQ_r; end
assign PCLK = cmos_pclk; |
由此,整個(gè)基于AC6102開發(fā)板的UVC攝像頭框圖如下圖3所示。

可以看到,與Cypress提供的UVC應(yīng)用方案不同,該應(yīng)用方案在圖像傳感器和FX3之間插入了一片FPGA,用作圖像的轉(zhuǎn)發(fā),并將原本的控制圖像傳感器的IIC功能從FX3中移植到了FPGA中。實(shí)際上,直接使用FX3原本的IIC控制器來實(shí)現(xiàn)圖像傳感器的設(shè)置也是可以的,不過這涉及到FX3固件的修改,而且不同的圖像傳感器需要使用不同的初始化代碼,也就意味著需要使用不同的FX 3固件,會(huì)增加開發(fā)工作量,因此在本例中使用FPGA來完成圖像傳感器的配置初始化工作。這樣,對(duì)于FPGA開發(fā)工程師來說,可以避開不熟悉的FX3固件開發(fā),能夠有效減少開發(fā)工作量。
AC6102 UVC應(yīng)用工程共提供以下幾個(gè)文件
OV5640_USB30_UVC.qar
OV5640_UVC_30FPS.png
OV5640V2+AC6102V2.JPG
UVC_AN75779.img
UVC_AN75779.rar
VirtualDub_1_10_4_35456.1400664289.zip
? OV5640_USB30_UVC.qar文件為基于AC6102V2開發(fā)板和OV5640V2攝像頭模塊的FPGA應(yīng)用工程,該工程主要實(shí)現(xiàn)了攝像頭數(shù)據(jù)到FX3芯片的轉(zhuǎn)發(fā)工作和OV5640攝像頭的初始化配置工作。將該文件放置在一個(gè)非中文目錄下,雙擊就可以直接使用Quartus軟件打開。
? OV5640_UVC_30FPS.png文件為使用該工程進(jìn)行圖像采集顯示的效果圖
? OV5640V2+AC6102V2.JPG文件為進(jìn)行試驗(yàn)時(shí)的硬件連接圖
? UVC_AN75779.img文件為USB芯片的固件,由于該固件尺寸為139KB,超過了EEPROM存儲(chǔ)器的128K容量,因此實(shí)驗(yàn)時(shí)只能燒寫到RAM或SPI FLASH中。
? UVC_AN75779.rar文件為USB芯片的固件源碼,基于Cypress廠家提供的工程源碼,我們進(jìn)行了一定的修改,主要就是屏蔽了IIC部分,因?yàn)楸纠袥]有用到IIC,實(shí)際上廠家的源碼不做任何修改也是可以直接使用的。當(dāng)初屏蔽這部分是為了降低固件尺寸,以期能夠降低到128KB以內(nèi),不過沒有降下來。
? VirtualDub_1_10_4_35456.1400664289.zip文件是PC端的UVC圖像顯示軟件。
連接USB Blaster到JTAG下載口,連接OV5640攝像頭到網(wǎng)口左側(cè)的Camera接口,將USB3.0數(shù)據(jù)線一端插入AC6102開發(fā)板,另一端插入PC端的USB3.0接口。將電源開關(guān)撥到ON位置。如下圖5所示:

注意,這里一定要插入電腦的USB3.0接口,現(xiàn)在的電腦一般都帶有USB3.0接口了,識(shí)別某USB接口為USB3.0還是2.0的方式很簡(jiǎn)單,可以通過以下三種方式識(shí)別。
1、根據(jù)USB協(xié)會(huì)標(biāo)準(zhǔn)定義,USB3.0的typeA母口應(yīng)該為天藍(lán)色,如果您發(fā)現(xiàn)您的USB接口為藍(lán)色,那一定是USB3.0接口。如下圖6所示。當(dāng)然,現(xiàn)在很多電腦廠商在生產(chǎn)時(shí)并未嚴(yán)格遵守這一協(xié)定,因此,有的電腦單憑顏色還是無法區(qū)分USB3.0和USB2.0。

2、查看USB接口附近的圖案標(biāo)識(shí)。USB3.0一般稱作SuperSpeed USB,因此如果該USB接口對(duì)應(yīng)的圖案有SS標(biāo)識(shí),那一定是USB3.0接口。如下圖7,右側(cè)的帶有SS標(biāo)識(shí)的為USB3.0接口,而左側(cè)的沒有SS標(biāo)識(shí)的則不是USB3.0接口。

3、如果上述兩種方法還是無法區(qū)分的話,可以用最直接的辦法,看看這個(gè)USB接口里有幾個(gè)觸點(diǎn)和簧片,USB2.0的只有4個(gè),而USB3.0的有9個(gè),如下圖8所示:

雙擊OV5640_USB30_UVC.qar文件,打開之后進(jìn)行全編譯以得到sof文件。并將sof文件下載到FPGA中。
打開Cypress的Control Center軟件,燒寫UVC_AN75779.img文件到FX3芯片的RAM中。該軟件需要用戶已經(jīng)安裝了FX3-SDK,如未安裝,可參看AC6102的USB3.0開發(fā)教程相關(guān)章節(jié)先安裝軟件。如何燒寫img文件,也可參看AC6102的USB3.0開發(fā)教程相關(guān)章節(jié)。
燒寫完成后,系統(tǒng)會(huì)自動(dòng)安裝驅(qū)動(dòng),安裝完成后會(huì)在設(shè)備管理器下的圖像設(shè)備中出現(xiàn)一個(gè)名為FX3的設(shè)備,如下圖9所示。該設(shè)備就是我們的UVC攝像頭了。

將文件包提供的VirtualDub_1_10_4_35456.1400664289.zip解壓,并運(yùn)行VirtualDub.exe文件,如下圖10所示。打開之后,選擇File—>Capture AVI以進(jìn)入圖像捕獲模式,如下圖11所示:


然后選擇Device—>FX3(DirectShow),如下圖11所示,如果軟硬件配置都沒有問題的話,就可以在軟件中看到顯示的圖像了。

圖12為使用該UVC工程截圖的圖片,可以看得到實(shí)時(shí)幀率為30fps左右。
關(guān)于FX3固件代碼的理解和修改,請(qǐng)參看AC6102開發(fā)板USB3.0開發(fā)教程相關(guān)章節(jié)內(nèi)容。