摘 要: 利用USB2.0接口芯片CY7C68013的特點(diǎn),通過(guò)塊傳輸方式實(shí)現(xiàn)了視頻圖像的實(shí)時(shí)無(wú)損傳輸。詳細(xì)介紹了CY7C68013的Slave FIFO工作方式在視頻圖像傳輸中的應(yīng)用以及系統(tǒng)硬件設(shè)計(jì)。
關(guān)鍵詞: USB2.0 塊傳輸 Slave FIFO 視頻圖像
對(duì)于數(shù)據(jù)量很大的實(shí)時(shí)數(shù)據(jù)傳輸,USB2.0協(xié)議[1][2][3]有專門的等時(shí)傳輸方式來(lái)實(shí)現(xiàn),但等時(shí)傳輸不但實(shí)現(xiàn)困難,且由于在數(shù)據(jù)包傳輸過(guò)程中和主機(jī)不進(jìn)行握手,因此當(dāng)數(shù)據(jù)包出現(xiàn)錯(cuò)誤時(shí)主機(jī)不會(huì)要求USB重新發(fā)送數(shù)據(jù),這樣會(huì)造成數(shù)據(jù)丟失或錯(cuò)誤。因此不適用于視頻圖像的精密分析與測(cè)量。而USB2.0協(xié)議中的塊傳輸方式在數(shù)據(jù)包傳輸過(guò)程中和主機(jī)進(jìn)行握手,當(dāng)數(shù)據(jù)包出現(xiàn)錯(cuò)誤時(shí)會(huì)要求USB重新發(fā)送數(shù)據(jù),這就保證了傳輸數(shù)據(jù)的準(zhǔn)確性,而且開(kāi)發(fā)相對(duì)容易。本文利用USB2.0塊傳輸方式實(shí)現(xiàn)了CCD視頻圖像的實(shí)時(shí)無(wú)損傳輸。
1 USB2.0接口芯片CY7C68013簡(jiǎn)介
(1)內(nèi)置USB2.0收發(fā)器和智能串口引擎(Serial Interface Engine,SIE)。
(2)增強(qiáng)的8051內(nèi)核,其時(shí)鐘頻率可為12MHz、24MHz和48MHz,同時(shí)該芯片還帶有2個(gè)通用異步收發(fā)器(UART)、3個(gè)定時(shí)/計(jì)數(shù)器和2個(gè)數(shù)據(jù)指針,可支持外部中斷。
(3)可通過(guò)USB下載程序,也可從外部擴(kuò)展的E2PROM中下載程序。
(4)支持批量傳輸、同步傳輸、中斷傳輸和控制傳輸4種傳輸方式。
(5)具有8位或16位外部數(shù)據(jù)接口。
(6)具有通用可編程接口GPIF。
(7)內(nèi)置I2C接口,其工作速率為100kHz或400kHz。
(8)帶有最大達(dá)8Kb的FIFO,可運(yùn)行于Master或Slave方式(本文采用)。
2 USB2.0的4種傳輸方式及其比較
(1)控制傳輸:主機(jī)發(fā)送一些控制命令字給USB設(shè)備。
(2)中斷傳輸:主機(jī)發(fā)送中斷指令給USB設(shè)備。
(3)等時(shí)傳輸(Isochronous Transfer):用于視頻或音頻等數(shù)據(jù)流的傳輸,傳輸時(shí)維持一定的速度,高速時(shí)會(huì)有一定的錯(cuò)誤發(fā)生。其傳輸結(jié)構(gòu)如圖1所示。

(4)塊傳輸(Bulk Transfer):傳輸?shù)臄?shù)據(jù)量大,準(zhǔn)確性高(若出現(xiàn)錯(cuò)誤而發(fā)生傳送失敗,會(huì)重新傳一次),且無(wú)速度上的限制(即沒(méi)有固定傳輸速率)。其傳輸結(jié)構(gòu)如圖2所示。

通過(guò)比較塊傳輸和等時(shí)傳輸?shù)慕Y(jié)構(gòu)可以發(fā)現(xiàn):等時(shí)傳輸是以數(shù)據(jù)流的方式不斷傳輸數(shù)據(jù),可以充分保證實(shí)時(shí)數(shù)據(jù)的傳送。而塊傳輸比等時(shí)傳輸多了握手的部分(ACK/NAK/STALL/NYET),實(shí)時(shí)數(shù)據(jù)必須分包傳輸,而且每個(gè)包最大為1 024b。這樣塊傳輸?shù)乃俣葧?huì)受到一定的影響。從理論上看,在USB2.0協(xié)議中等時(shí)傳輸最高支持480Mbps,而塊傳輸最高支持416Mbps。
對(duì)于實(shí)時(shí)視頻圖像傳輸,采集到的視頻信號(hào)為PAL制式隔行掃描黑白全電視視頻信號(hào)。該信號(hào)每幀信號(hào)由奇場(chǎng)和偶場(chǎng)信號(hào)構(gòu)成,每場(chǎng)重復(fù)周期為20ms,場(chǎng)消隱脈沖寬度為1 612μs,在場(chǎng)消隱期間無(wú)有效數(shù)據(jù),每行重復(fù)周期為64μs,行消隱脈沖寬度為12μs。對(duì)于分辨率為800×600的實(shí)時(shí)圖像而言,其要求的最低傳輸速度約為800×8÷64=100Mbps。因此可以看出,用Bulk方式傳輸此分辨率的實(shí)時(shí)視頻圖像在理論上是可行的。這樣每次連續(xù)采集一場(chǎng)的數(shù)據(jù),如果可以在場(chǎng)消隱的時(shí)間內(nèi)完成一場(chǎng)數(shù)據(jù)的處理和顯示,那么在下一場(chǎng)數(shù)據(jù)到來(lái)時(shí)就不會(huì)耽誤數(shù)據(jù)的繼續(xù)采集,從而可以實(shí)現(xiàn)圖像的實(shí)時(shí)傳輸。實(shí)驗(yàn)證明,CY7C68013的塊傳輸中Slave FIFO工作方式完全可以滿足上面的要求。
3 Slave FIFO簡(jiǎn)介及其在視頻圖像傳輸中的應(yīng)用
Slave FIFO 作為USB2.0接口芯片CY7C68013的一種工作方式[4][5],其自身的特點(diǎn)如下:(1)采用外部Master的控制方式,減少了直接應(yīng)用內(nèi)部Master的繁雜。(2)直接利用芯片內(nèi)部集成的FIFO進(jìn)行工作,有效地將外部數(shù)據(jù)經(jīng)CY7C68013進(jìn)行傳遞。(3)同步和異步2種工作模式適應(yīng)多種數(shù)據(jù)傳輸要求。
采用Slave FIFO方式傳輸視頻圖像數(shù)據(jù)的原理框圖如圖3所示。其中IFCLK的設(shè)置決定了Slave FIFO工作在同步還是異步模式下。同步模式下,SLWR寫(xiě)信號(hào)受IFCLK上升沿控制,在異步模式下,SLWR寫(xiě)信號(hào)受讀信號(hào)SLOE控制。所以,采用異步工作模式,用視頻圖像的采集時(shí)鐘作為SLOE的觸發(fā)信號(hào)。這樣可以使SLWR信號(hào)和SLOE信號(hào)保持同步,經(jīng)FIFO直接將采集數(shù)據(jù)寫(xiě)入主機(jī)。其寄存器配置為:IFCONFIG=0xCB。為了充分利用CY7C68013的內(nèi)部FIFO進(jìn)行數(shù)據(jù)的緩沖,可以采用4倍Buffer的方式,可以用端點(diǎn)6對(duì)數(shù)據(jù)進(jìn)行讀入(IN)操作(由于只是將采集的圖像數(shù)據(jù)送入主機(jī),所以此時(shí)不用考慮端點(diǎn)2和端點(diǎn)4這2個(gè)OUT端點(diǎn)。這樣就只需要對(duì)IN端點(diǎn)6進(jìn)行配置),這樣按照其工作方式,可以應(yīng)用全部8KB緩沖。其寄存器配置為:EP6CFG=0xE0;PKTEND直接決定FIFO中數(shù)據(jù)的傳輸方向及方式。應(yīng)用CY7C68013芯片自身的AUTOIN方式,完全可以保證數(shù)據(jù)及時(shí)無(wú)誤地從采集設(shè)備到主機(jī)的傳輸,其配置為:EP6FIFOCFG=0x0C;端點(diǎn)(ENDPOINT)6的選擇可以通過(guò)對(duì)FIFOADR的寄存器進(jìn)行設(shè)置來(lái)確定。這樣,就可以用最短的時(shí)間將從采集到的芯片通過(guò)CY7C68013送到主機(jī)進(jìn)行處理。

在場(chǎng)消隱期間的處理工作是利用Slave FIFO方式傳遞實(shí)時(shí)視頻圖像的一個(gè)關(guān)鍵。當(dāng)USB傳完一場(chǎng)信息后,可以在IBN(IN Bulk NAK)中斷中應(yīng)用判斷標(biāo)志來(lái)實(shí)現(xiàn)??梢栽诠碳凶远x一個(gè)函數(shù)proc(void),在USB Interrupt Handlers中利用該函數(shù)調(diào)用IBN中斷,proc(void)定義如下:
void proc(void)
{
{
PE0=0x00;
}
IBNIRQ=bmEP6IBN;//clear the IBN IRQ
IBNIE|=bmEP6IBN;
}
在IBN中斷定義中,部分程序如下:
void ISR_Ibn(void) interrupt 0
{
EZUSB_IRQ_CLEAR( );
IBNIRQ=bmEP6IBN;
NAKIRQ|=bmBIT0;
PE0=0x01;
}
PE0為一個(gè)外部輸出腳,利用PE0輸出的高電平控制外圍采集邏輯采集數(shù)據(jù)的時(shí)間。每次調(diào)用IBN中斷前都設(shè)置PE0=0x00,一旦調(diào)用IBN中斷后,PE0=0x01,輸出為高電平??梢岳迷摳唠娖娇刂艭PLD的場(chǎng)同步信號(hào),利用CPLD把每場(chǎng)頭信號(hào)A0找出來(lái)。這樣利用PE0和A0做“與”運(yùn)算,就可以從每場(chǎng)開(kāi)始時(shí)就采集數(shù)據(jù),不會(huì)造成數(shù)據(jù)的丟失。隨后AD按照采樣時(shí)鐘進(jìn)行采集,通過(guò)設(shè)置所要求的分辨率和采集時(shí)鐘的大小,可以得到每場(chǎng)需要采集的數(shù)據(jù)點(diǎn)數(shù),當(dāng)數(shù)據(jù)采集完畢后,通過(guò)CPLD產(chǎn)生中斷請(qǐng)求送給INT。這時(shí)固件程序進(jìn)入中斷服務(wù),同時(shí)又將PE0設(shè)置為0x01,重復(fù)IBN中斷的工作過(guò)程。由于在場(chǎng)消隱期間沒(méi)有場(chǎng)頭信號(hào),PE0始終為高,AD不會(huì)采集數(shù)據(jù),因此可以利用場(chǎng)消隱的這段時(shí)間對(duì)數(shù)據(jù)進(jìn)行處理,實(shí)現(xiàn)和主機(jī)的數(shù)據(jù)傳輸。在主機(jī)端的上位機(jī)處理程序中,初始時(shí)通過(guò)在驅(qū)動(dòng)中定義MaximumTransferSize的大小可以使其足夠大于一場(chǎng)數(shù)據(jù)(800×600)。這樣當(dāng)USB通過(guò)線程中的DeviceIoControl將全部一場(chǎng)的數(shù)據(jù)送到主機(jī)的內(nèi)存后,就可以通過(guò)IBN中斷利用場(chǎng)消隱期間將采集的一場(chǎng)數(shù)據(jù)在主機(jī)中顯示出來(lái)。實(shí)驗(yàn)證明,主機(jī)將存儲(chǔ)于內(nèi)存中的一場(chǎng)圖像數(shù)據(jù)顯示出來(lái)大約用300~500μs,大大小于場(chǎng)消隱的1 612μs,所以此方法是完全可行的。當(dāng)場(chǎng)消隱結(jié)束后,IBN中斷自動(dòng)解除,又可以重新采集圖像數(shù)據(jù),實(shí)現(xiàn)每場(chǎng)圖像數(shù)據(jù)和主機(jī)中的傳輸和顯示,達(dá)到實(shí)時(shí)處理的效果。
4 系統(tǒng)硬件設(shè)計(jì)
結(jié)合CCD視頻圖像采集和Slave FIFO的外圍Master的控制及設(shè)計(jì),確定了無(wú)損視頻圖像采集系統(tǒng)的硬件設(shè)計(jì)方案,系統(tǒng)硬件結(jié)構(gòu)如圖4所示。系統(tǒng)由A/D轉(zhuǎn)換器、同步分離電路、鎖相環(huán)電路、CPLD及USB2.0傳輸模塊(CY7C68013)構(gòu)成。系統(tǒng)中A/D轉(zhuǎn)換器采用視頻采集芯片TDA8709,具有8位數(shù)據(jù)寬度,最高數(shù)據(jù)采樣率可達(dá)32MHz,內(nèi)置視頻放大及鉗位電路,可外加增益控制。同步分離芯片采用LM1881,可以方便地從0.5~2V標(biāo)準(zhǔn)負(fù)極性NTSC、PAL或SECAM制式視頻信號(hào)中提取行、場(chǎng)同步信息。鎖相環(huán)芯片采用高速鎖相環(huán)NE564,最高工作頻率可達(dá)到50MHz。CPLD采用ALTERA公司的EPM7128,可用門單元為2 500個(gè),管腳間最大延遲5ns。系統(tǒng)中的邏輯控制功能由CPLD和USB2.0傳輸模塊配合完成,比外加其他處理器速度快。

標(biāo)準(zhǔn)視頻輸入由同步分離電路分離出標(biāo)準(zhǔn)行同步信號(hào)HSYN和場(chǎng)同步信號(hào)VSYN,場(chǎng)同步信號(hào)送至CPLD,行同步信號(hào)經(jīng)鎖相環(huán)電路鎖相,產(chǎn)生每行N個(gè)點(diǎn)的鎖相脈沖VCOOUT輸入到CPLD。一個(gè)工作周期開(kāi)始時(shí),主機(jī)首先發(fā)出塊請(qǐng)求命令,USB2.0傳輸模塊響應(yīng)并設(shè)置位信號(hào)線PE0,指示CPLD開(kāi)始采集。CPLD檢測(cè)到場(chǎng)同步信號(hào)有效后,則將鎖相脈沖CLK加至A/D的轉(zhuǎn)換脈沖輸入端及USB2.0模塊的寫(xiě)脈沖輸入端。每次A/D轉(zhuǎn)換完畢,D[7..0]有效,并在CLK作用下將采集到的圖像數(shù)據(jù)寫(xiě)入U(xiǎn)SB2.0傳輸模塊并傳回主機(jī)。CPLD內(nèi)置一計(jì)數(shù)器,對(duì)鎖相脈沖進(jìn)行計(jì)數(shù),并由場(chǎng)同步信號(hào)復(fù)位,計(jì)數(shù)滿一場(chǎng)后置位信號(hào)線INT,輸入到USB2.0傳輸模塊的中斷端,USB2.0傳輸模塊響應(yīng)中斷并撤銷信號(hào)PE0,此時(shí)主機(jī)也已接收滿一場(chǎng)圖像,一個(gè)工作周期結(jié)束。下一個(gè)工作周期仍然由主機(jī)發(fā)出塊傳輸請(qǐng)求開(kāi)始?,F(xiàn)場(chǎng)采集的視頻圖像中的一幀如圖5所示,完全可以滿足精密分析和測(cè)量的需要。

5 結(jié)束語(yǔ)
綜上所述,根據(jù)CY7C68013的結(jié)構(gòu)特點(diǎn),使其工作在Slave FIFO模式下,應(yīng)用USB的Bulk傳輸方式實(shí)現(xiàn)了CCD視頻圖像的實(shí)時(shí)無(wú)損傳輸和顯示,不存在傳輸圖像失真或數(shù)據(jù)丟失的現(xiàn)象。目前這一系統(tǒng)已成功運(yùn)用于液體中化工試劑、油珠、微細(xì)顆粒的粒徑測(cè)量和統(tǒng)計(jì)上。
參考文獻(xiàn)
1 Compaq Hewlett-Packard Interetc.Universal Serial Bus Specification Revision 2.0.2000
2 Anderson D,Dzatko D.Universal Serial Bus Susterm Architecture(Second Edition).MindShare INC,2001
3 周振宇,谷海穎.基于USB總線的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì). 電子技術(shù)應(yīng)用,2002;28(2)
4 Cypress Semiconductor.EZ-USB FX2 Technical Reference Manual.2001
5 許永和.EZ-USB FX系列單片機(jī)USB外圍設(shè)備設(shè)計(jì)與應(yīng)用.北京:北京航空航天大學(xué)出版社,2002
