摘 要: 本文介紹了一種基于USB2.0接口的MPEG視頻卡的設計方案及其軟硬件設計方法。
關鍵詞 :USB; 視頻卡; MPEG; WDM
通用串行總線(Universal Serial Bus,即USB)以其方便的即插即用和熱插拔特性,以及較高的傳輸速率,成為PC領域廣為應用的外設連接規(guī)范。目前,國內外普遍采用的是USB1.1規(guī)范,它支持兩種傳輸速率:1.5Mbps和12Mbps,主要應用在低速傳輸要求的場合。2000年發(fā)布的USB2.0規(guī)范提供了480Mbs的傳輸速率,以滿足更快的數據傳輸要求。
為了使MPEG視頻卡快速地向PC機傳送大量的數據,我們在設計MPEG視頻卡與PC機的接口時采用USB2.0技術。對USB的設計與開發(fā),我們是基于CYPRESS公司的EZ-USB FX2系列的CY7C68013芯片及其FX2開發(fā)包。
1、 硬件設計
傳統(tǒng)的采用PCI接口的MPEG視頻卡, 不但占用了有限的PCI插槽,安裝不方便,而且不支持熱插拔和即插即用。所以,在本設計中,我們選用USB2.0接口芯片對傳統(tǒng)的MPEG視頻卡進行了改進。
改進后的USB2.0接口的方案如圖1所示。
該USB2.0接口的MPEG視頻卡的工作原理為:音視頻信號經AK4550音頻處理芯片及AA7113視頻處理芯片進行A/D轉換,將模擬信號轉換成8bit的PCM格式的數字信號,傳入SZ1510音視頻壓縮采集芯片進行處理,將編碼調制PCM格式的數據轉化為符合格式MPEG-1的混合影視文件,最后MPEG-1數據經USB接口芯片送給PC機作進一步的處理,如存儲、顯示等。
設計中,我們選用的USB接口芯片是EZ-USB FX2 系列的CY7C68013芯片。該芯片是針對USB2.0的,而且和USB1.1兼容,它支持兩種傳輸速率:全速(Full_speed)12Mbps和高速(High_speed)480Mbps,它不支持低速(Low_speed)1.5Mbps。該芯片的內部結構如圖2所示。
CY7C68013-128AC內部集成了一個增強的8051內核,它既與標準的8051兼容,又有諸多的改進:最高工作頻率48MHZ,一個指令周期只需4個時鐘周期,比標準的8051平均提高了2.5倍;2個UARTS端口;3個定時/記數器;擴展的中斷系統(tǒng)及其更多I/O口等。CY7C68013內部集成的USB2.0的SIE能完成大部分USB2.0協(xié)議的處理工作,減少了用戶對繁雜的USB協(xié)議的處理。另外,用戶在開發(fā)時,可以利用GPIF和FIFO方式實現(xiàn)與高速外圍設備之間的邏輯連接,并進行高速數據的傳輸。在該改進方案中,我們選用的是GPIF方式,實現(xiàn)和Z1510之間的通信。
2、 軟件設計
USB 軟件設計包括三方面的工作:固件(Fireware)設計,驅動程序設計和主機端應用程序的設計。
(1) 固件設計
設計中,我們考慮到MPEG視頻卡要求快速地持續(xù)地傳送大量數據,并對數據的完整性要求不太高,我們采用ISO傳輸方式。另外,我們讓CY7C68013工作在GPIF模式下的FIFO Read方式,最多可以傳輸4G byte(WORDWIDE=0)或word(WORDWIDE=1)。外設的數據由于不需8051的處理,我們采用自動打包的方式(AUTOIN=1),直接從FIFO到SIE,這樣有利于提高傳輸速率。其主要實現(xiàn)代碼如下:
void TD_Init( )
{
CPUCS = 0X01; file://CLKSPD[1:0]=10; for 48MHz operation.
GpifInit( );
……
SYNCDELAY;
EP6CFG = 0XDA; file://端點配置: 同步IN方式、緩沖大小1024字節(jié)
SYNCDELAY;
FIFORESET = 0X80; // activate NAK_ALL to avoid race conditions
SYNCDELAY;
FIFORESET = 0X06; file://reset, FIFO 6
SYNCDELAY;
FIFORESET = 0X00; file://deactivate NAK_ALL
SYNCDELAY;
EP6FIFOCFG = 0X0D; file://wordwide=1
SYNCDELAY;
……
}
(2) 驅動程序設計
在WINDOWS平臺下,USB 驅動程序由三部分組成:USB設備驅動程序,USB總線驅動程序和USB主控制器驅動程序,它們必須遵循WIN32驅動程序模型(WDM)。其中,WINDOWS操作系統(tǒng)已經提供了處于驅動程序棧底的USB總線驅動程序和USB主控制器驅動程序。而USB設備驅動程序由設備開發(fā)者編寫,它通過向USB總線驅動程序發(fā)送包含URB(USB Request Block)的IRP(I/O Request Packet),來實現(xiàn)USB外設之間的信息交換。當主機應用程序要對USB設備進行I/O操作時,它調用Windows API函數對Win32子系統(tǒng)進行Win32調用,由I/O管理器將此請求構造成一個合適的IRP,并把它傳遞給USB設備驅動程序。USB設備驅動程序接受到這個IRP后,根據IRP中包含的具體操作代碼,構造響應的URB并把它放到一個新IRP中,然后把此IRP傳遞到USB總線驅動程序,USB總線驅動程序根據IRP中所包含的URB執(zhí)行響應的操作,并把操作結果通過IRP返還給USB設備驅動程序。USB設備驅動程序接受到此IRP后,將操作結果通過IRP返還I/O管理器。最后,I/O管理器將此IRP中操作結果返還給應用程序,至此應用程序對USB設備的一次I/O操作完成。
開發(fā)USB設備驅動程序,可采用Numega公司的開發(fā)包Driver Works和 Microsoft公司的2000DDK,并以VC++6.0作為輔助開發(fā)環(huán)境。Driver Works提供的驅動向導,,可根據用戶的需要,自動生成代碼框架。減少了開發(fā)的難度,縮短了開發(fā)的周期。
在CYPRESS公司的EZ-USB FX2開發(fā)包中,有一個通用的驅動程序,該程序可不加修改經DDK編譯后直接使用。在本設計中,由于時間關系,我們采用的就是這個通用驅動程序(GPD)。
(3) 應用程序設計
USB主機應用程序是計算機中完成特定功能的程序,其關鍵是實現(xiàn)從USB 外設讀取或發(fā)送特定數量的數據,USB標準設備請求和特定的命令等。另外,可以對數據做進一步的處理,如:存儲、顯示、快速傅立葉變換等。在WINDOWS 2000下,我們所使用的應用程序開發(fā)工具是VC++6.0。
3、 結束語
該卡是對傳統(tǒng)的PCI接口的MPEG視頻卡的改進,它支持熱插拔和即插即用。由于采用USB2.0接口,其傳輸速率也高于后者,滿足了數據高速傳輸的要求,解決了USB1.1存在的傳輸瓶頸。相信隨著各大電腦主板商對USB2.0的支持,USB2.0必將在PC機應用的各個領域得到廣泛的應用。