張海堂
(廣州中智融通金融科技有限公司,廣東 廣州 510663)
隨著國家大力推動(dòng)政務(wù)信息化工作,智能政務(wù)自助服務(wù)終端機(jī)成為了政務(wù)大廳的一種新型設(shè)備,終端機(jī)集成了政務(wù)信息化系統(tǒng)的軟件服務(wù)模塊,為辦事群眾提供諸如身份證認(rèn)證、資料采集、資料回執(zhí)打印等服務(wù)。票據(jù)圖像掃描模塊是終端機(jī)的一個(gè)關(guān)鍵模塊,它采用CIS(Contact Image Sensor)接觸式圖像傳感器,相比高拍儀有更高的鑒偽能力可保證掃描件的真實(shí)性,用于擴(kuò)展服務(wù)內(nèi)容和范圍、提升服務(wù)質(zhì)量[1]。
票據(jù)圖像掃描模塊傳統(tǒng)實(shí)現(xiàn)方法一般是采用DSP+FPGA的技術(shù)平臺(tái),模塊采集兩級(jí)CIS圖像傳感器信號(hào),經(jīng)模數(shù)轉(zhuǎn)換后送入FPGA 進(jìn)行灰度值補(bǔ)償預(yù)處理,F(xiàn)PGA 積累到完整一行圖像數(shù)據(jù)后,觸發(fā)一次DSP 中斷接收,然后DSP 中斷觸發(fā)EDMA模式通過EMIF并口總線從FPGA讀取一行圖像數(shù)據(jù)。該方法每次只能接收一行圖像數(shù)據(jù),存在CPU觸發(fā)中斷次數(shù)多和資源使用率高的缺點(diǎn),一般在老一代圖像處理平臺(tái)例如DSP C6000系列有廣泛應(yīng)用,但在新一代圖像處理平臺(tái)例如AM5706已淘汰,取而代之的是VIP(Video Input Port)這種高效的圖像數(shù)據(jù)傳輸接口。
本文介紹了一種AM5706通過VIP接口與FPGA實(shí)現(xiàn)圖像數(shù)據(jù)傳輸?shù)姆椒?,AM5706 VIP 設(shè)備每接收到一幅完整的圖像數(shù)據(jù),才會(huì)觸發(fā)一次CPU 中斷,相比傳統(tǒng)EMIF 并行總線+EMDA 方法的每次只能接收一行圖像數(shù)據(jù),采用VIP 接口傳輸圖像數(shù)據(jù)可極大減少CPU中斷次數(shù)、降低CPU資源使用率,這對(duì)提升系統(tǒng)性能和降低硬件成本都具有重要意義。
技術(shù)方案基于TI ARM+DSP 多核AM5706 和XILINX FPGA Spartan-6 XC6SLX25 平臺(tái),AM5706 作為為主處理器負(fù)責(zé)應(yīng)用軟件的功能實(shí)現(xiàn),F(xiàn)PGA ARTIX-6 XC6SLX25 負(fù)責(zé)CIS 打光時(shí)序控制和圖像數(shù)據(jù)預(yù)處理。技術(shù)方案總體框圖如圖1所示。
圖1 技術(shù)方案總體框圖
票據(jù)圖像掃描模塊可采集兩個(gè)通道CIS 圖像傳感器的模擬信號(hào),模擬信號(hào)送入專用ADC 進(jìn)行模數(shù)轉(zhuǎn)換后輸出原始圖像數(shù)據(jù),然后原始圖像數(shù)據(jù)送入FPGA進(jìn)行圖像灰度值補(bǔ)償預(yù)處理,得到補(bǔ)償后的圖像數(shù)據(jù),補(bǔ)償后的圖像數(shù)據(jù)以一個(gè)完整行為基本單位,最后送入AM5706的VIP接口(Video Input Port),AM5706 ARM內(nèi)核驅(qū)動(dòng)通過VIP 接口被動(dòng)接收來自FPGA 的補(bǔ)償后CIS 圖像行數(shù)據(jù),當(dāng)積累到一幅完整的圖像數(shù)據(jù)后,應(yīng)用程序跳出阻塞狀態(tài)并保存這一幅完整的圖像數(shù)據(jù),然后對(duì)該幅圖像進(jìn)行鑒別、OCR識(shí)別等操作,最后通過USB 2.0 Device 通信接口把識(shí)別結(jié)果和圖像數(shù)據(jù)上傳到上位機(jī)。
AM5706 VIP 接口是一個(gè)從設(shè)備,在FPGA 連續(xù)發(fā)送圖像數(shù)據(jù)行到AM5706的VIP接口過程中,DMA會(huì)自動(dòng)接收數(shù)據(jù)放入事先配置好的圖像緩沖區(qū)中,完全無需中斷ARM 的當(dāng)前任務(wù),傳輸效率明顯要高于傳統(tǒng)的DSP圖像處理平臺(tái)。
硬件電路采用TI ARM+DSP 多核AM5706 和XILINX Spartan-6 XC6SLX25 作為主芯片。AM5706 外接64MB QSPI FLASH 和512MB DDR3L SDRAM 的 運(yùn) 行 內(nèi) 存,QSPI FLASH 用來存放ARM Linux 系統(tǒng)鏡像、ARM 應(yīng)用程序、FPGA介質(zhì)程序、灰度值補(bǔ)償參數(shù)和運(yùn)行日志,DDR3L SDRAM是ARM 的運(yùn)行內(nèi)存,上電后ARM Linux 系統(tǒng)鏡像、ARM 應(yīng)用程序會(huì)搬送到DDR然后運(yùn)行。AM5706采用GPIO時(shí)序模擬來實(shí)現(xiàn)FPGA 程序的加載,采用I2C 來配置FPGA 工作參數(shù)。電路設(shè)計(jì)了一路USB 2.0 Device,實(shí)現(xiàn)和上位機(jī)的通信和圖像數(shù)據(jù)上傳[3,4]。
硬件電路設(shè)計(jì)有兩路CIS 輸入,每路CIS 支持R、G、B、IRF 光色。兩路CIS 采集使用一片CIS 專業(yè)ADC 芯片HT82V48進(jìn)行采集,LED打光控制由FPGA輸出控制信號(hào)驅(qū)動(dòng)ULN2003A 進(jìn)行電流放大。CIS 光色模擬信號(hào)經(jīng)過HT82V48模數(shù)轉(zhuǎn)換后輸出2路8-bit數(shù)字信號(hào),數(shù)字信號(hào)輸入FPGA 進(jìn)行圖像緩沖和灰度補(bǔ)償,最后輸出到AM5706 的VIP外設(shè)接口[2]。
圖2 硬件電路框圖
圖3 VIP接口電路
軟件實(shí)現(xiàn)首先編寫ARM 端的設(shè)備驅(qū)動(dòng)FPGACIS,設(shè)備驅(qū)動(dòng)開發(fā)可參考SDK 目錄/kernel/drivers/media/i2c/下面的CMOS 驅(qū)動(dòng)源代碼和具體實(shí)現(xiàn)思路[4,5],本設(shè)計(jì)設(shè)備驅(qū)動(dòng)FPGACIS描述符為“fpgacis”,設(shè)定輸入分辨率800*480,輸入格式SBGGR8,8-bit數(shù)據(jù)寬度,設(shè)備樹設(shè)備節(jié)點(diǎn)compatible屬性“grg,fpgacis1”,摘取關(guān)鍵代碼如下:
然后對(duì)VIP 相關(guān)DTS 設(shè)備樹字段進(jìn)行配置,需要打開vip1,然后把設(shè)備fpgacis_1 掛載在i2c 總線下面,并與端點(diǎn)vin1a_ep建立連接[4,5],摘取關(guān)鍵配置如下:
FPGACIS 設(shè)備驅(qū)動(dòng)完成配置和掛載成功后,Linux 系統(tǒng)便會(huì)產(chǎn)生設(shè)備節(jié)點(diǎn)如/dev/video0、/dev/video1,編寫應(yīng)用程序通過V4L2 接口采集視頻數(shù)據(jù),因篇幅原因不詳細(xì)列舉應(yīng)用程序的源代碼,具體實(shí)現(xiàn)過程參考軟件流程圖,如圖4所示。
圖4 軟件流程圖
硬件上電正常后進(jìn)入Linux系統(tǒng)后,先掛載FPGACIS設(shè)備驅(qū)動(dòng),Linux 系統(tǒng)會(huì)產(chǎn)生設(shè)備節(jié)點(diǎn)如/dev/video0、/dev/video1,然后運(yùn)行應(yīng)用程序/run/user/app,app 首先讀取在rootfs存放的FPGA firmware,通過GPIO時(shí)序模擬下載到FPGA然后啟動(dòng)FPGA,下一步繼續(xù)完成對(duì)FPGA的采集參數(shù)配置,驅(qū)動(dòng)通道步進(jìn)電機(jī),就可以實(shí)現(xiàn)對(duì)多張票據(jù)的連續(xù)圖像采集了。樣張采集的圖像效果如圖5所示,使用大批量樣張進(jìn)行壓力測試,圖像采集穩(wěn)定,未出現(xiàn)卡頓、圖像丟失、圖像缺行,圖像亮線等異?,F(xiàn)象。在設(shè)定最大采集速度下連續(xù)采集樣張圖像,CPU資源使用率穩(wěn)定在42%左右,如圖6所示,相比老一代圖像處理平臺(tái)的CPU資源使用率得到明顯下降。
圖5 采集樣張圖像
圖6 連續(xù)模式下資源使用率
本文介紹了一種AM5706 通過VIP 接口與FPGA 圖像數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)方法,該方法是票據(jù)圖像掃描模塊的一個(gè)關(guān)鍵技術(shù),票據(jù)圖像掃描模塊可采集兩級(jí)CIS 圖像傳感器信號(hào),經(jīng)模數(shù)轉(zhuǎn)換后送入FPGA進(jìn)行灰度值補(bǔ)償預(yù)處理,F(xiàn)PGA積累完整一行圖像數(shù)據(jù)后,輸出到AM5706的VIP接口,實(shí)現(xiàn)方法主要技術(shù)難點(diǎn)有:硬件電路圖設(shè)計(jì)和PCB設(shè)計(jì),ARM內(nèi)核Linux 系統(tǒng)下VIP 設(shè)備驅(qū)動(dòng)和配置,ARM 應(yīng)用程序開發(fā),F(xiàn)PGA VIP接口時(shí)序?qū)崿F(xiàn)和圖像預(yù)處理程序編寫。本文詳細(xì)介紹了模塊的硬件電路設(shè)計(jì)、ARM內(nèi)核Linux系統(tǒng)下的VIP設(shè)備驅(qū)動(dòng)編寫和配置,以及應(yīng)用程序從FPGA 接收CIS 圖像數(shù)據(jù)的實(shí)現(xiàn)方法。采用VIP 接口傳輸大分辨率圖像數(shù)據(jù)以整張圖像為單位,相比傳統(tǒng)DSP 平臺(tái)采用的EMIF 并行總線+EDMA 的圖像傳輸傳輸方法,可極大減少CPU 中斷次數(shù),通過實(shí)測數(shù)據(jù)證實(shí)了較低的CPU資源使用率,該平臺(tái)和數(shù)據(jù)傳輸方法在票據(jù)圖像掃描模塊產(chǎn)品中應(yīng)用,實(shí)現(xiàn)了提升性能和降低硬件成本的設(shè)計(jì)目標(biāo)。