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