由于圖像采集系統采集的數據量大,帶寬要求高,以往的圖像采集系統通常使用PCI總線實現。但是計算機本身配置的PCI接口數量非常有限,而且拆裝PCI接口設備需要打開機箱,一般操作人員并不具備這樣的能力,導致系統應用受到限制。USB(通用串行總線)接口列可以完全解決以上難題。首先,USB2.0接口的速度已經達到480Mbps,完全可以滿足圖像采集系統對速度的要求。另外,USB接口是真正支持即插即用,且允許熱插撥的接口,所以目前大量數據采集系統都選擇使用USB2.0接口實現。
本文利用SAA7113H實現模擬視頻信號解碼,并借助EZ-USB FX2單片機CY7C68013將數字圖像數據直接通過USB2.0接口傳輸到計算機,通過PC機程序實現圖像的無損采集,大大簡化了采集卡的硬件設計,降低了采集卡硬件要求,有效降低了圖像采集卡的成本。
1 系統硬件設計
系統硬件結構如圖1所示。系統主要由視頻解碼芯片SAA7113H、USB控制芯片CY7C68013和一塊容量為1 kB的24C01EEPROM芯片組成。
圖1 系統硬件結構
1.1 視頻解碼芯片-SAA7113H
SAA7113H是飛利浦公司出品的一款視頻解碼芯片,它的作用是將輸入的模擬視頻信號解碼為標準的8位VPO數字信號。它可以輸入4路模擬視頻信號,通過I2C總線對內部寄存器的不同配置可以對4路復合視頻輸入進行轉換,改變亮度、對比度等參數。SAA7113H兼容PAL、NTSC等多種制式,可以自動檢測場頻,可以在PAL、NTSC之間自動切換控制。SAA7113H解碼后輸出的是標準的YUV 4:2:2格式數字信號。
1.2 USB控制芯片--CY7C68013A
CYTC68013A(EZ-USB FX2)是Cypress半導體公司推出的一款USB2.0芯片,它內部集成了增強的8051內核,支持最大48 MHz的時鐘頻率,在相同時鐘頻率下,FX2的平均指令執行速度可達到標準8051的2.5倍。CY7C68013芯片內部集成了一個與8051內核相對獨立的SIE(串行接口引擎),在不需要8051內核參與的情況下,通過USB端口和外部邏輯共享FIFO的方式,實現外部數據與USB端口的數據交換,大大加快了數據傳輸的速度,可實現的最大速度為480Mbps.
1.3 系統硬件實現
硬件連接方面,利用CY7C68013的I2C端口連接24C01,以便在系統上電后提取24C01中的信息,實現設備枚舉,下載相應固件。利用CY7C 68013模擬I2C端口連接SAA7113H,對其內部寄存器進行配置,實現解碼芯片初始化操作。CY7C68013工作在Slave FIFO(從屬的FIFO)模式,將SAA7113H的VPO數據總線直接連接到CY7C68013的FD總線,使用CY7C68013的IOAO端口檢測數字視頻的場標志信號,用于實現幀同步。將CY7C68 013的SLWR*(從屬寫)信號量為有效,SLRD(從屬讀)和SLOE(輸出有效)置為無效,由SAA7113H通過自身輸出的27MHz同步時鐘將數字視頻信號以同步方式直接寫入CY7C68013內部的FIFO,再通過SIE將FIFO中的數據以高速方式直接傳送到PC機,實現視頻數據的采集。
2 系統軟件設計
系統軟件設計主要包括固件程序設計、驅動程序設計和PC機采集程序3大部分。
2.1 固件程序設計
固件程序流程圖如圖2所示。該固件在采集卡上電后初始化CY7C68013,使其工作在Slave FIFO模式,設置總線位數為8位,以便接收SM7113H的8位數字視頻信號。將EP2端點設置為批量AUTO IN傳輸方式,512字節4倍FIFO緩沖。一次最大傳輸數據包大小為512字節。利用SAA7113H的時鐘信號實現同步從屬FIFO寫數據。
圖2 固件程序流程圖
通過模擬的I2C端口初始化SAA7113H,使其能夠接收CCD攝像機的模擬視頻信號,以標準的ITU656格式輸出,并設置RSTO輸出奇偶場標志,然后等待上位機的開始采集命令。
在收到PC機開始圖像采集命令后,固件程序首先通過IOAO端口檢查SAA7113H的奇偶場信號。如果外部模擬視頻信號源未連接,該信號將一直維持高電平。固件在一段時間等待并確認外部視頻信號未連接的情況下,向PC機回傳設備尚未準備好的信息,否則一直清空FIFO,將FIFO中已有效據清除,直到奇場信號到來,固件回送設備準備好信息給PC,以實現視頻圖像幀同步采集。圖像數據傳輸過程將由SIE完全控制,固件不參與傳輸操作。
2. 2 驅動程序設計
Cypress開發包中提供了一個通用驅動程序,即cyUSB.sys,該驅動程序符合Windows硬件質量實驗室WHQL標準,系統直接使用該驅動程序實現圖像數據采集。由于CY7C68013采用的是軟配置的方案,芯片中并沒有提供用于永久存放固件程序的存儲器,固件程序需要在每次上電后通過外部存儲器加載或從PC機下載到內部RAM中。驅動程序主要實現固件程序的裝載功能,以便系統上電后,可以自動從PC機下載固件到CY7C68013,然后使用通用驅動程序完成采集卡的設備重枚舉。
在Cypress提供的開發包中包含了一個固件下載驅動模板,即EZ-Loader Driver.系統固件下載驅動主要依賴它來實現。具體的步驟為:
1)利用hex2c.exe將Intel HEX格式文件轉換成C代碼數組。
2)將所有的EZ-Loader Driver文件連同子文件復制到一個新建的目錄中。并利用第一步得到的C代碼數組替換EZ-Loader Driver中firmwa re.c中的數組。
3)在WindowsXP DDK中使用build命令在新建目錄中創建固件下載驅動程序。
4)改寫驅動安裝信息文件。
2.3 PC機采集程序
PC機采集程序用Visual Studio.net 2003調用CyAPI函數庫實現。為提高圖片采集速度,程序使用兩個線程分別實現圖像數據采集和圖像甄別和處理。程序總流程圖如圖3所示。
圖3 PC和諧總流程圖
每次啟動采集程序時,系統通過創建USBDeviee實例獲得設備句柄,并嘗試打開USB設備。當點擊程序界面開始采集按鈕后,程序通過USB控制端點發送一個開始采集信號,并要求采集卡回傳一個設備狀態信號。如果設備提示無模擬視頻信號連接,則提示用戶連接。如果設備準備好,則開始接收圖像數據。
由于USB主控制器工作于Slave FIFO模式,采集卡上傳到上位機的數據量固定為27MB/S,如果上位機沒能及時接收數據必然會導致圖像數據丟失,所以程序中使用一個線程(線程1)以異步方式做圖像數據接收,實際效果非常好。線程1主要代碼如下:
SAA7113H輸出的是隔行視頻信號,每秒25幀圖像,一幀圖像需要分兩次傳輸,先傳輸全部奇場(奇數行)數據,然后傳輸全部偶場(偶數行)數據,采集卡中將SAA7113H的輸出設置為標準YUV4:2:2數據,分辨率為720x576.系統將所有的解碼數據不做任何處理直接傳送到PC機,數據格式如圖4所示。其中,"80 10…"為消隱數據。"FF 00 00 SAV"為一行數據塊的開始標志,作為奇場有效行,SAV的值為8X,作為偶場有效行,該值為CX."FF 00 00 EAV"為一行數據塊結束標志,作為奇場有效行結束,EAV的值為9X,作為偶場有效行結束,該值為DX.作為720像素的YUV4:2:2數據,每行一共有720x2=1 440個字節,PC程序需要從所有的數據中找出每一行中有效的1 440個字節數據,并按照實際行順序將奇場行相偶場行數據重新組合,轉換成RGB24位像素點并最終寫入BMP文件,實現圖像的采集、顯示和保存。
圖4 YUV4:2:2數據格式
數據查找及重組過程中,PC程序會根據YUV4:2:2數據格式做數據塊判別,如果發現有出錯數據程序會做自動拋棄處理,在對采集數據要求非常嚴格及單張采集間隔時間較長的場合,程序將發送重新采集信號給采集卡,再一次采集。系統實際使用過程中發現,數據出錯情況很少出現,且重發請求后可以得到正確數據。
3 結論
利用本方案設計的圖像采集卡可以實現圖像的連續采集,并最終以bmp圖像格式保存,采集速率每秒最大25幀,適用于所有支持PAL模擬視頻格式的攝像機及監控攝像頭的圖像無損采集,具有成本低、圖像清晰等特點,在光學顯微鏡序列切片圖像采集系統中得到了很好的應用。另外,系統經過簡單修改后也可實現4個復合視頻源輸入的分時采集功能。