白會(huì)東 趙成成 田青青 魏巍
摘要:在USB協(xié)議中定義了多種類,它們不僅可以實(shí)現(xiàn)不同的功能,還能促進(jìn)USB設(shè)備的普及。網(wǎng)絡(luò)攝像頭和USB采集卡中就用到了USB視頻類,它的好處是能夠?qū)崿F(xiàn)即插即用,省去驅(qū)動(dòng)的開發(fā)工作。一般情況下采用UVC協(xié)議的系統(tǒng)是單獨(dú)采用USB控制芯片來完成整個(gè)設(shè)計(jì)。為了增加設(shè)計(jì)的多元性,文章采用了 FPGA和USB3.0架構(gòu)的方式,實(shí)現(xiàn)了一種基于UVC協(xié)議的圖像采集系統(tǒng)。
關(guān)鍵詞:UVC協(xié)議;USB3.0;圖像采集;固件
1 系統(tǒng)組成與工作流程
系統(tǒng)構(gòu)成如圖1所示,分別為:含有OV5642傳感器的攝像頭模塊、Cyclone IV系列的FPGA芯片、Cypress公司的USB3.0芯片和主機(jī)[1]。系統(tǒng)的工作流程為:第一步,上電后在線配置USB3.0的固件程序和下載邏輯程序到FPGA中;第二步,程序加載到FPGA完成后會(huì)自動(dòng)地通過SCCB接口配置攝像頭的寄存器,完成攝像頭的初始化工作;第三步,等待攝像頭模塊穩(wěn)定輸出后開始接收?qǐng)D像數(shù)據(jù),并轉(zhuǎn)換成符合UVC(USB視頻類)格式;第四步,數(shù)據(jù)經(jīng)過USB的DMA通道傳輸給上位機(jī)進(jìn)行顯示。
2 程序設(shè)計(jì)
2.1 攝像頭配置程序設(shè)計(jì)
攝像頭的配置不是用USB芯片內(nèi)的IIC接口進(jìn)行加載,而是用FPGA內(nèi)嵌的功能模塊完成的[2]。在FPGA中創(chuàng)建片上系統(tǒng)(SOC),用Verilog HDL語言設(shè)計(jì)硬件模塊,用C++語言設(shè)計(jì)配置邏輯程序。先調(diào)用Quartus II軟件中的Qsys工具完成硬件工程的創(chuàng)建,按照需求添加功能模塊,這里主要添加了Nios2處理器、On-chip Memory、oc_iic和PIO功能模塊。然后連接時(shí)鐘信號(hào)到每一個(gè)模塊上,把數(shù)據(jù)總線連接到相應(yīng)的接口上,并設(shè)置中斷等級(jí),完成硬件模塊的創(chuàng)建。在配置文件邏輯程序設(shè)計(jì)時(shí),先調(diào)用Eclips完成軟件工程的創(chuàng)建,通過手動(dòng)添加配置文件把工程映射到硬件上。同時(shí)把輸出文件配置成on-chip mm模式,然后編寫SCCB讀寫控制邏輯和配置文件。通過這種方式可以把軟件和硬件邏輯編輯到同一個(gè)文件中,減少了配置過程中多次配置的繁瑣步驟。最后由Quartus Ⅱ編譯產(chǎn)生包含軟件和硬件的sof文件。
2.2 USB固件程序設(shè)計(jì)
固件的開發(fā)使用了Cypress提供的框架和API。通過GPIF Ⅱ Designer工具設(shè)計(jì)通用可編程接口(GeneralProgrammable Interface,GPIF Ⅱ),生成包含接口配置信息的C頭文件[3]。其中GPIF Ⅱ接口是一個(gè)具有256種狀態(tài)的可編程狀態(tài)機(jī),應(yīng)用起來非常靈活,既可以作為主控接口也可以作為從設(shè)備接口。通過GPIF Ⅱ接口模塊把EZ-USB FX3數(shù)據(jù)傳輸通道轉(zhuǎn)變成FIFO,簡(jiǎn)化了處理器的操作,讓數(shù)據(jù)經(jīng)過DMA通道傳送給USB端點(diǎn)。GPIF Ⅱ接口數(shù)據(jù)傳輸?shù)膶?shí)際通道是GPIF線程,傳輸時(shí)把發(fā)送套接字映射到GPIF物理線程上,讓接口數(shù)據(jù)能夠存儲(chǔ)到緩沖區(qū)中。首先將第一個(gè)DMA描述符加載到套接字,獲取第一個(gè)DMA緩沖區(qū)的信息,然后把數(shù)據(jù)寫入第一個(gè)緩沖區(qū),當(dāng)?shù)谝粋€(gè)緩沖區(qū)寫滿時(shí),套接字會(huì)根據(jù)描述符指針讀取第二個(gè)DMA描述符信息,把數(shù)據(jù)繼續(xù)寫入所對(duì)應(yīng)的緩沖區(qū),以此順應(yīng)描述符鏈循環(huán)操作。當(dāng)全部緩沖區(qū)寫滿或者收到傳輸結(jié)束信號(hào)時(shí),自動(dòng)把數(shù)據(jù)傳輸?shù)経SB端點(diǎn),避免了CPU操作帶來的開銷,提高了數(shù)據(jù)傳輸速率。設(shè)計(jì)中GPIF II狀態(tài)機(jī)要滿足在VSYNC和HSYNC都有效時(shí),才能連續(xù)傳輸一行數(shù)據(jù),而且都要保證在每幀開始傳輸前標(biāo)頭位已經(jīng)更新。通過乒乓操作對(duì)兩個(gè)Buffer的交替讀寫,實(shí)現(xiàn)了數(shù)據(jù)的連續(xù)傳輸。
C頭文件添加到固件框架中,調(diào)用API函數(shù)實(shí)現(xiàn)DMA通道。DMA通道是由套接字、DMA描述符和Buffer構(gòu)成的,主要用于數(shù)據(jù)的緩存和傳輸。DMA通道的啟動(dòng)是用CyFxUVCApplnlnit函數(shù)完成的,而函數(shù)中的dmaMultiConfig結(jié)構(gòu)里描述了DMA通道的具體信息。固件運(yùn)行時(shí)通過入口函數(shù)CyU3PFirmwareEntry ()進(jìn)入主程序main (),完成硬件的初始化和啟動(dòng)實(shí)時(shí)操作系統(tǒng),然后執(zhí)行創(chuàng)建線程和注冊(cè)回調(diào)函數(shù)等操作,完成USB的配置[4]。
3 系統(tǒng)驗(yàn)證
系統(tǒng)驗(yàn)證時(shí)要先下載USB固件,再加載FPGA控制邏輯。一旦使用USB-Blaster線纜通過JTAG接口加載配置文件,程序會(huì)立即執(zhí)行并進(jìn)行數(shù)據(jù)的采集。PC系統(tǒng)中提供UVC的驅(qū)動(dòng)程序,所以開源應(yīng)用上位機(jī)VirtualDub可以直接進(jìn)行圖像的顯示,結(jié)果如圖2所示,圖像采集系統(tǒng)工作穩(wěn)定。
4 結(jié)語
一般UVC模式的圖像采集系統(tǒng)只采用USB芯片完成,為了增加設(shè)計(jì)的多樣性,充分利用開發(fā)板的功能部件,增加了 FPGA的參與。在設(shè)計(jì)中FPGA主要用作配置攝像頭模塊,主要的控制邏輯是在FX3中實(shí)現(xiàn),改變以往只使用USB芯片的設(shè)計(jì)模式。實(shí)驗(yàn)結(jié)果表明,基于USB和FPGA架構(gòu)使用UVC協(xié)議的采集系統(tǒng)具有可行性,能夠滿足圖像實(shí)時(shí)采集的要求。
[參考文獻(xiàn)]
[1]殷開亮.基于UVC協(xié)議的USB3.0圖像采集系統(tǒng)設(shè)計(jì)[D].蘇州:蘇州大學(xué),2014.
[2]李江波,馬春庭,王全,等.基于UVC協(xié)議的USB3.0視頻采集系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,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設(shè)備控制器的固件設(shè)計(jì)[J].電子器件,2013(3):383-388.