??? 關鍵詞:PCI總線,TM1300,以太網通信接口,視頻通信?
1 引言
??? TM1300是Philip公司推出的多媒體DSP,它不僅具有強大的處理能力,還具有非常友好的音頻和視頻以及SSI和PCI等I/O接口,可以根據應用的需要靈活地構造各種視頻通信系統。在本文之前,已經有了TM1300上的H.263軟硬件平臺,并利用TM1300的SSI(通用串行口)接口輸出編碼碼流,通過兩種專門設計的外圍接口板實現了通過modem在電話線上的低碼率傳輸和通過E1接口在專線的高速傳輸。鑒于目前計算機網絡的普及和網上視頻業務的發展,很有必要再為TM1300視頻編碼系統開發一個以太網接口,拓寬應用范圍。開發以太網接口的一種合理思路是,利用TM1300集成的PCI接口驅動專用的以太網接口芯片。因目前多數以太網接口芯片,如realtek8029,realtek8139等都是PCI接口的,可以用PCI總線將數據從TM1300傳輸到這些專用的以太網接口芯片,然后由它們發送數據。而且,TM1300可以運行嵌入式操作系統pSOS,pSOS帶有TCP/IP協議棧,所以,可以方便地完成編碼碼流的 TCP/IP封裝。
??? 根據以上思路,我們首先進行了前期測試,證明這樣是可行的,接下來進行了電路板的設計,并順利完成了調試。目前,這個以太網接口已經基本開發成功。本文將對這個設計的技術要點從硬件和軟件兩方面進行詳細介紹。
2 硬件設計
??? 系統框圖如圖1所示。
??? 硬件設計的重點是PCI總線接口, PCI總線根據數據位的寬度有32位和64位之分,64位的數據線對32位是兼容的。PC中常見的是32位PCI總線,它的有用引腳總數是110個,可以分成3組。第一組是基本功能信號線,包括32位共享數據地址線AD〔00..31〕、接口控制線、仲裁線、時鐘線、系統復位線、中斷線;第二組是附加功能信號線,包括錯誤報告線、cache功能支持線、JTAG邊界掃描線;第三組是電源線,包括設備耗電量標示線、3.3V電源線(12根)、5V電源線(13根)、地線(22根)。
??? 因為PCI的附加功能信號線支持的cache功能和JTAG邊界掃描功能8029都不具備,而且雖然8029具有奇偶校驗錯報告功能引腳,但是可以懸空不用,所以,只需要考慮第一組功能信號線的連接。
??? PCI接口的設計有以下幾個要點:
??? (1) PCI總線的仲裁。
??? 這里先說明兩個概念。首先,PCI總線是多設備共享的,由于PC里有多個PCI設備,所以需要使用仲裁器;其次,PCI設備有主設備和從設備之分,主設備可以發起PCI數據的傳送,從設備只能被動地響應主設備的操作,對讀操作和寫操作做出響應。PCI的仲裁引腳是REQ#和GNT#,分別稱為請求線和授權線,只有PCI主設備有這兩個引腳。REQ#和GNT#成對地連到仲裁器,設備與設備的REQ#和GNT#是互不相連的。
??? PCI總線的仲裁過程是這樣的:PCI主設備把REQ#電平拉低,表示向仲裁器請求占用總線,經仲裁獲準后,仲裁器把這個設備的GNT#電平拉低,表示請求獲準,該設備就可以使用總線了。當它不再使用總線時,使REQ#信號變為高電平,仲裁器就不再會給它分配總線資源。在本系統中,TM1300是PCI主設備,8029是PCI從設備,不存在共享總線的問題,所以不需要仲裁器,可以簡單地把REQ# 和GNT#短接,相當于TM1300自己給自己授權。
??? (2) PCI_IDSEL信號線在設備的PCI配置讀寫中起關鍵作用。
??? PCI有一種特殊的讀寫周期,稱為配置讀寫,這是在系統引導時,還沒有給設備配置I/O或內存地址,軟件只能通過配置讀寫訪問設備。配置讀寫有兩種,分別稱為0型和1型,采用哪一種取決于總線的硬件連接。當配置讀寫操作不經過PCI橋時,使用0型,當要經過PCI橋時要用1型,0型讀寫的地址直接就是總線上的地址,1型讀寫的地址則要經過PCI橋的譯碼才成為最終的總線地址。本設計中,TM1300和8029是用PCI總線直連的,所以使用了0型配置讀寫。
??? AD〔00..31〕是PCI總線的共享地址和數據線,每一次PCI傳送都分為地址周期和數據周期。在地址周期, 0型讀寫時AD〔00..31〕的內容如下:AD〔00〕和AD〔01〕總為“00”,因為配置讀寫是以雙字為單位的;AD〔02〕-AD〔07〕是要讀寫的PCI配置空間的寄存器號;AD〔08〕~AD〔10〕是設備的功能號,在一塊PCI卡上有多個功能設備時,為了進一步區分這些設備就要用到這幾位,8029是單功能設備,這幾位全為0;AD〔11〕-AD〔31〕是設備選擇位,其中必須有且僅有一位為"1"(如圖2所示),物理上這表現為總線的AD〔11〕-AD〔31〕中有一根為高電平,如果出高電平的這根線與某塊PCI卡的PCI_IDSEL引腳相連,這塊卡就會被激活,在緊接著的數據周期,它就會將其PCI配置空間相應寄存器的內容放到總線上供讀取。?
??? (3)PCI_FRAME#,PCI_DEVSEL#,PCI_IRDY#,PCI_TRDY#引腳的處理。
??? 這四個引腳均是低電平有效,需要接上拉電阻,保證在設備未驅動該引腳時處于穩定的無效狀態, 上拉電阻的阻值在1kΩ到10kΩ范圍內,阻值越小則芯片將該信號驅動為有效的時間越短,但是太小會導致電流過大,所以,要權衡考慮,本設計選用4.7kΩ。
??? 上述三點對脫機情況下PCI設備的互連具有較普遍的參考意義,除此之外,本設計還有以下幾點比較特殊:
??? ·TM1300的PCI_INTA#引腳配置為輸入,以接收8029的中斷;?
??? · PCI時鐘由TM1300提供;?
??? ·8029的復位信號也就是TM1300的復位信號,由外部電路提供;?
??? ·TM1300的PCI_STOP#,PCI_SERR#引腳懸空,因為8029不具備相應的附加功能。另外TM1300的PCI_INTB#,PCI_INTC#,PCI_INTD#引腳可以用作用戶中斷。
3 軟件設計
??? 軟件的結構框圖如圖3所示。其中,TM1300運行pSOS,它是一個簡單的實時多任務嵌入式操作系統,帶有pNA+網絡組件,pNA+相當于TCP/IP協議棧的擴展,它向上提供應用程序編程的socket接口,向下定義了一個與網絡接口層交互的接口,包括8個函數,分別是:ni_init(接口芯片初始化)、ni_broadcast(發送廣播分組)、ni_send(發送普通分組)、ni_getpkb(申請發送緩沖區)、ni_retpkb(歸還接收緩沖區)、ni_ioctl(I/O控制操作)、ni_pool(統計量查詢)、Announce(網絡接口驅動調用它把接收到的數據包提交給pSOS)。網絡接口層在本應用中就是8029的驅動程序,它通過硬件抽象層來驅動8029。硬件抽象層是PCI總線的配置讀寫和I/O讀寫指令集的總稱。
??? 軟件執行的流程大致是:系統首先啟動pSOS,pSOS加載網絡接口驅動程序,然后調用驅動程序的ni_init函數,初始化8029的PCI配置空間并設置8029的工作參數,之后啟動用戶任務。在這里,用戶任務是H.263編碼進程。它對VI口讀入的源圖像進行壓縮編碼后,調用socket的接口函數sendto(sendto是UDP套接口專用的發送函數),把碼流發送給pSOS,pSOS根據UDP協議進行封裝后,調用ni_send函數,ni_send完成數據包從系統主內存到8029片上RAM的拷貝,然后啟動8029發送數據。在接收的情況下,8029收到一個完整的數據包后,用中斷通知CPU,CPU轉而執行中斷服務程序,中斷服務程序將數據包從8029片上RAM中拷貝到系統的主內存,然后調用Announce函數,把數據塊的指針,數據長度和其它信息提交pSOS,pSOS將數據包沿協議棧一層層上傳,作出相應的處理。
??? 軟件的設計和pSOS操作系統的關系比較密切,限于篇幅,本文不對pSOS作詳細介紹,可以參閱參考文獻〔1〕和〔2〕的相關內容。另外,8029驅動程序的編寫可以參照參考文獻〔3〕。本文接下來重點介紹PCI配置空間的配置過程,這部分對于類似的設計有較普遍的參考意義。
??? PCI配置空間有64個字節,PCI片內都集成了這些寄存器,其中存儲了該芯片的廠商號、設備號、設備類型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線行為的寄存器,它們必須在設備初始化時正確配置,否則設備不能工作。
??? 對8029PCI空間的配置需要三個步驟:?
??? 首先,掃描總線,這一步的目的是找到8029的配置地址,直觀地講就是它的PCI_IDSEL引腳和哪根AD線相連,因為后續的配置寫要根據這個地址尋址。掃描總線時,要對AD〔11〕到AD〔31〕每根線進行一次掃描,如果這根AD線連接了一個PCI設備的PCI_IDSEL引腳,那么用配置讀函數讀取PCI配置空間的0號寄存器時,應該返回該設備的設備和廠商代碼,如果這根線實際未連接設備,則返回值是0,已知8029的設備和廠商代碼是"0x802910ec",如果返回值與之相同,說明找到了8029,這時要記下這根AD線的序號。例如,我們在硬件上把8029的PCI_IDSEL和AD〔20〕相連,則掃描到的序號就應該是“20”。
??? 其次,用配置寫函數配置I/O讀寫使能,即在command寄存器寫入“0x1”。
??? 最后,用配置寫函數配置I/O地址,即在I/O Base Adddress寄存器寫入分配給該設備的I/O地址,例如“0xe400”。程序流程圖如圖4所示。
4 調試結果
??? 根據以上設計,我們在原TM1300視頻編碼硬件系統的基礎上加入了PCI接口,并編寫了pSOS下8029的驅動程序。然后,在這個硬件平臺上對8029的驅動部分進行了數據傳送測試。
??? 首先,我們用一個單獨的UDP發送任務進行發送速率測試。這個任務高速向網絡上的一臺PC發送數據包,數據包的大小是變長的。該PC接收并對丟包數進行統計,其結果如表1。實驗表明,在用網線直連的各種測試速率情況下都沒有出錯,當接入局域網后在發送速率為4.5Mbps時有突發的少量錯誤。由于UDP是不可靠的傳輸方式,所以這種錯誤是正常的。測試中UDP發送的最高速率可以達到5Mbps左右,它與硬件的最高速率(10Mbps)相比還有一定差距,主要原因是數據從系統主內存到8029片上RAM的拷貝過程目前尚未采用DMA方式,這是需要改進的地方。
??? 然后,我們進行了編碼和傳送的聯合測試。編碼任務執行H.263數據壓縮,然后把碼流從以太網接口發出,在網絡上的另一臺PC上接收這個碼流和進行解碼播放。通過調整編碼器的量化步長可以控制編碼的輸出碼率。在實驗環境下發現,在量化步長大于等于5、碼率在700kbps以下時,基本沒有丟包的情況,解碼得到的圖像比較穩定;當量化步長進一步減小、碼率接近1Mbps時,出現丟包現象,解碼的圖像出現彩色方塊。出現這種現象是因為H.263編碼器對CPU資源的消耗很大,而且數據在主內存和8029片上RAM之間的復制采用的是I/O讀寫方式,也需要一定的CPU資源,當量化步長小于5時,處理復雜度超過了CPU的能力,從而產生了一定的誤碼。解決問題的途徑一方面是改進數據的傳送方式(采用DMA),另一方面需要對編碼任務進行優化。
5 結束語?
??? 本文把介紹重點放在了對于類似的設計有較普遍參考意義的部分,例如PCI總線接口的設計,PCI空間初始化的步驟等。對測試結果進行了較詳細的分析,提出了以后改進的方向。?
參考文獻?
1 倪強. 基于TM1300的視頻監控系統碼率控制和遠端設備控制接口技術研究:〔學位論文〕. 南京:南京郵電學院信息工程系,2002
2 倪強,胡明. 基于PSTN的視頻監控系統的遠端設備.?電子工程師,2002(4): 14~16
3 ***. 計算機通信技術及其程序設計. 西安:西安電子科技大學出版社,1998
評論
查看更多