TM1300 DSP系統的以太網(wǎng)通信接口的設計與實(shí)現
關(guān)鍵詞:PCI總線(xiàn) TM1300 以太網(wǎng)通信接口 pSOS+內核 pNA+
1 概述
TM1300是Philips公司推出的新一代高性能多媒體數字信號處理器芯片?;冢裕停保常埃暗模模樱袘?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/系統">系統適合于實(shí)時(shí)聲音、圖像處理,可廣泛應用于會(huì )議電視、可視電話(huà)、數字電視等應用場(chǎng)合。它不僅具有強大的處理能力,同時(shí)還具有非常友好的音頻和視頻以及SSI和PCI等I/O接口,因此可以根據應用的需要靈活地構造各種視頻通信系統。鑒于目前計算機網(wǎng)絡(luò )的普及和網(wǎng)上視頻業(yè)務(wù)的發(fā)展,很有必要為TM1300視頻編碼系統開(kāi)發(fā)一個(gè)以太網(wǎng)接口以拓寬其應用范圍。開(kāi)發(fā)以太網(wǎng)接口的一種合理思路是利用TM1300集成的PCI接口來(lái)驅動(dòng)專(zhuān)用的以太網(wǎng)接口芯片。由于目前多數以太網(wǎng)接口芯片(如Real-tek8029,Realtek8139等)都采用PCI接口,因此,可以用PCI總線(xiàn)將數據從TM1300傳輸到這些專(zhuān)用的以太網(wǎng)接口芯片后,再由它們發(fā)送數據,而且TM1300可以在嵌入式操作系統pSOS中運行,同時(shí)由于系統pSOS帶有TCP/IP協(xié)議棧?因此可以方便地完成編碼碼流的TCP/IP封裝。
根據以上思路?筆者在進(jìn)行了前期測試的基礎上進(jìn)行了電路板的設計?并順利完成了調試。目前?這個(gè)以太網(wǎng)接口已經(jīng)基本開(kāi)發(fā)成功。本文將對這個(gè)設計的技術(shù)要點(diǎn)從硬件和軟件兩個(gè)方面進(jìn)行詳細介紹。
2 TM1300及PCI總線(xiàn)接口
該系統的硬件結構框圖如圖1所示。本系統硬件設計的重點(diǎn)是PCI總線(xiàn)接口。PCI總線(xiàn)根據數據位的寬度有32位和64位之分,64位的數據線(xiàn)與32位是兼容的。PC機中常見(jiàn)的是32位PCI總線(xiàn),它的有用引腳總數是110個(gè),可以分成3組。第一組是基本功能信號線(xiàn),包括32位共享數據地址線(xiàn)AD〔00..31〕、接口控制線(xiàn)、仲裁線(xiàn)、時(shí)鐘線(xiàn)、系統復位線(xiàn)、中斷線(xiàn);第二組是附加功能信號線(xiàn),包括錯誤報告線(xiàn)、cache功能支持線(xiàn)、JTAG邊界掃描線(xiàn);第三組是電源線(xiàn),包括設備耗電量標識線(xiàn)、3.3V電源線(xiàn)(12根)、5V電源線(xiàn)(13根)、地線(xiàn)(22根)。
因為Realtek8029不具備PCI的附加功能信號線(xiàn)所支持的cache功能和JTAG邊界掃描功能,同時(shí)雖然它具有奇偶校驗錯誤報告功能引腳,但該腳可以懸空不用。所以,設計時(shí)只需考慮第一組功能信號線(xiàn)的連接即可。
PCI接口的設計有以下幾個(gè)要點(diǎn):
(1)PCI總線(xiàn)的仲裁
這里先說(shuō)明兩個(gè)概念。首先,PCI總線(xiàn)是多設備共享的,由于PC機里可以有多個(gè)PCI設備,所以需要使用仲裁器;其次,PCI設備有主設備和從設備之分,主設備可以發(fā)起PCI數據的傳送?從設備只能被動(dòng)地響應主設備的操作以對讀操作和寫(xiě)操作做出響應。PCI的仲裁引腳是REQ和GNT,分別為請求線(xiàn)和授權線(xiàn),而且只有PCI主設備有這兩個(gè)引腳。一般情況下,REQ通常和GNT成對地連到仲裁器,而設備與設備的REQ和GNT通常是互不相連的。
PCI總線(xiàn)的仲裁過(guò)程是這樣的:PCI主設備把REQ電平拉低以表示向仲裁器請求占用總線(xiàn)。經(jīng)仲裁獲準后,仲裁器把這個(gè)設備的GNT電平拉低以表示請求獲準,此后該設備便可以使用總線(xiàn)了。當它不再使用總線(xiàn)時(shí),應使REQ信號變?yōu)楦唠娖?仲裁器就不再給它分配總線(xiàn)資源。在本系統中,TM1300是PCI主設備,而Realtek8029是PCI從設備。由于它們不存在共享總線(xiàn)的問(wèn)題,所以不需要仲裁器,而只是簡(jiǎn)單地把REQ和GNT短接即可,這就相當于TM1300自己給自己授權。
(2)PCI_IDSEL信號線(xiàn)在設備的PCI配置讀寫(xiě)中的作用
PCI有一種特殊的讀寫(xiě)周期,稱(chēng)為配置讀寫(xiě)。這是因為在系統引導時(shí),如果沒(méi)有給設備配置I/O或內存地址,軟件就只能通過(guò)配置來(lái)讀寫(xiě)訪(fǎng)問(wèn)設備。配置讀寫(xiě)有兩種,分別稱(chēng)為0型和1型?具體采用哪一種取決于總線(xiàn)的硬件連接。配置讀寫(xiě)操作不經(jīng)過(guò)PCI橋時(shí),使用0型,當需要經(jīng)過(guò)PCI橋時(shí),則要用1型,0型讀寫(xiě)的地址直接就是總線(xiàn)上的地址,1型讀寫(xiě)的地址則要經(jīng)過(guò)PCI橋的譯碼才能成為最終的總線(xiàn)地址。本設計中,TM1300和Realtek8029是用PCI總線(xiàn)直連的,所以使用0型配置讀寫(xiě)。
AD〔00..31〕是PCI總線(xiàn)的共享地址和數據線(xiàn),每一次PCI傳送都分為地址周期和數據周期。在地址周期,采用0型讀寫(xiě)時(shí),AD〔00..31〕的內容如下,AD〔00〕和AD〔01〕總為“00”,因為配置讀寫(xiě)是以雙字為單位的,AD〔02〕~AD〔07〕是要讀寫(xiě)的PCI配置空間的寄存器號?AD〔08〕~AD〔10〕是設備的功能號?在一塊PCI卡上有多個(gè)功能設備時(shí),為了進(jìn)一步區分不同的設備就要用到這幾位,由于Realtek8029是單功能設備,故這幾位全為0,AD〔11〕~AD〔31〕是設備選擇位,其中必須有且僅有一位為“1”,如圖2所示,這在物理上表現為總線(xiàn)的AD〔11〕~AD〔31〕中有一根為高電平?如果輸出高電平的這根線(xiàn)與某塊PCI卡的PCI IDSEL引腳相連,這塊卡就會(huì )被激活,這樣,在緊接著(zhù)的數據周期中,它就會(huì )將其PCI配置空間相應寄存器中的內容放到總線(xiàn)上以供讀取。
(3) PCI_FRAME、PCI_DEVSEL、PCI_IRDY、PCI_TRDY引腳的處理
上述四個(gè)引腳均是低電平有效,因此需要接上拉電阻,以保證在設備未驅動(dòng)該引腳時(shí)處于穩定的無(wú)效狀態(tài),上拉電阻的阻值在1kΩ~10kΩ范圍內,阻值越小,則將該信號驅動(dòng)為有效的時(shí)間越短,但太小又會(huì )導致電流過(guò)大,所以,要權衡考慮,本設計選用4.7kΩ。
上述三點(diǎn)對脫機情況下PCI設備的互連具有較普遍的參考意義,除此之外,本設計還有以下比較特殊的幾點(diǎn):
●應將TM1300的PCI,INTA引腳配置為輸入,以便接收Realtek8029的中斷;
●PCI時(shí)鐘由TM1300提供;
●Realtek8029的復位信號也就是TM1300的復位信號,該信號由外部電路提供;
●TM1300的PCI STOP、 PCI SERR引腳懸空,表示Realtek8029不具備相應的附加功能。另外,TM1300的PCI INTB、PCI INTC、PCI INTD引腳可以用作用戶(hù)中斷。
3 軟件設計
該接口設計的軟件結構框圖如圖3所示。其中TM1300運行于pSOS,它是一個(gè)簡(jiǎn)單的實(shí)時(shí)多任務(wù)嵌入式操作系統,帶有pNA+網(wǎng)絡(luò )組件,其pNA+相當于TCP/IP協(xié)議棧的擴展,它向上可提供應用程序編程的socket接口,向下可定義一個(gè)與網(wǎng)絡(luò )接口層交互的接口,其中包括8個(gè)函數,分別是:ni_(kāi)init(接口芯片初始化)、ni_(kāi)broad-cast(發(fā)送廣播分組)、ni_(kāi)send(發(fā)送普通分組)、ni_(kāi)getpkb(申請發(fā)送緩沖區)、ni_(kāi)retpkb(歸還接收緩沖區)、ni_(kāi)ioctl(I/O控制操作)、ni_(kāi)pool(統計量查詢(xún))、Announce(網(wǎng)絡(luò )接口驅動(dòng)調用它把接收到的數據包提交給pSOS)。其中網(wǎng)絡(luò )接口層在本應用中就是Realtek8029的驅動(dòng)程序,它通過(guò)硬件抽象層來(lái)驅動(dòng)Realtek8029(硬件抽象層是PCI總線(xiàn)的配置讀寫(xiě)和I/O讀寫(xiě)指令集的總稱(chēng))。
軟件執行的流程大致是:系統首先啟動(dòng)pSOS,并由它加載網(wǎng)絡(luò )接口驅動(dòng)程序,然后調用驅動(dòng)程序的ni_(kāi)init函數,同時(shí)初始化Realtek8029的PCI配置空間并設置Realtek8029的工作參數,之后啟動(dòng)用戶(hù)任務(wù)。在這里,用戶(hù)任務(wù)為H.263編碼進(jìn)程。它對VI口讀入的源圖像進(jìn)行壓縮編碼后,將調用socket的接口函數sendto(sendto是UDP套接口專(zhuān)用的發(fā)送函數),然后把碼流發(fā)送給pSOS由pSOS根據UDP協(xié)議進(jìn)行封裝后,再調用ni_(kāi)send函數,并由ni_(kāi)send完成數據包從系統主內存到Realtek8029片上RAM的拷貝,然后啟動(dòng)Realtek8029發(fā)送數據。在接收情況下,Realtek8029收到一個(gè)完整的數據包后會(huì )用中斷通知CPU,然后由CPU執行中斷服務(wù)程序。當中斷服務(wù)程序將數據包從Realtek8029片上RAM中拷貝到系統的主內存后,系統將調用Announce函數并把數據塊的指針、數據長(cháng)度和其它信息提交pSOS,最后由pSOS將數據包沿協(xié)議棧一層層上傳并作出相應的處理。
軟件的設計和pSOS操作系統的關(guān)系比較密切,限于篇幅,本文不對pSOS作詳細介紹,。本文接下來(lái)重點(diǎn)介紹PCI配置空間的配置過(guò)程,這部分對于類(lèi)似的設計有較普遍的參考意義。PCI配置空間有64個(gè)字節,PCI片內的這些寄存器存儲了該芯片的廠(chǎng)商號、設備號、設備類(lèi)型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線(xiàn)行為的寄存器,它們必須在設備初始化時(shí)正確配置,否則設備不能工作。
對Realtek8029 PCI空間的配置需要三個(gè)步驟:
首先是掃描總線(xiàn),這一步的目的是找到Real-tek8029的配置地址,直觀(guān)地講,就是找到它的PCI_IDSEL引腳和哪根AD線(xiàn)相連,因為后續的配置寫(xiě)要根據這個(gè)地址來(lái)尋址。掃描總線(xiàn)時(shí),要對AD〔11〕到AD〔31〕每根線(xiàn)進(jìn)行一次掃描,如果哪根AD線(xiàn)連接了一個(gè)PCI設備的PCI IDSEL引腳,那么用配置讀函數讀?。校茫膳渲每臻g的0號寄存器時(shí),應該返回該設備的設備和廠(chǎng)商代碼,如果這根線(xiàn)實(shí)際未連接設備,則返回值是0。已知Realtek8029的設備和廠(chǎng)商代碼是“0x802910ec”,如果返回值與之相同,說(shuō)明找到了Realtek8029,這時(shí)要記下這根AD線(xiàn)的序號。例如,在硬件上把Realtek8029的PCI IDSEL和AD〔20〕相連,則掃描到的序號就應該是“20”。
其次,用配置寫(xiě)函數配置I/O讀寫(xiě)使能,即在command寄存器中寫(xiě)入“0x1”。
最后,用配置寫(xiě)函數配置I/O地址,也就是在I/OBaseAdddress寄存器寫(xiě)入分配給該設備的I/O地址(例如“0xe400”)。具體程序流程圖如圖4所示。
4 調試結果
根據以上設計,筆者在原TM1300視頻編碼硬件系統的基礎上加入了PCI接口,并編寫(xiě)了pSOS下Realtek8029的驅動(dòng)程序。然后,在這個(gè)硬件平臺上對Realtek8029的驅動(dòng)部分進(jìn)行了數據傳送測試。
筆者首先用一個(gè)單獨的UDP發(fā)送任務(wù)進(jìn)行發(fā)送速率測試。這個(gè)任務(wù)主要是高速地向網(wǎng)絡(luò )上的一臺PC發(fā)送數據包,數據包的大小是變長(cháng)的。PC接收并對丟包數進(jìn)行統計的結果如表1所列。實(shí)驗表明,在用網(wǎng)線(xiàn)直連的各種測試速率情況下都沒(méi)有出錯,而當接入局域網(wǎng)后,在發(fā)送速率為4.5Mbps時(shí)有突發(fā)的少量錯誤。由于UDP是不可靠的傳輸方式,所以這種錯誤是正常的。測試中,UDP發(fā)送的最高速率可以達到5Mbps左右,它與硬件的最高速率(10Mbps)相比還有一定差距,主要原因是數據從系統主內存到Realtek8029片上RAM的拷貝過(guò)程目前尚未采用DMA方式,這是需要改進(jìn)的地方。
表1 丟包數統計表(單位:丟包個(gè)數/分鐘)
連接方式 | 發(fā) 送 速 率 | ||
800kbps | 1.8Mbps | 4.5Mbps | |
網(wǎng)絡(luò )直連 | 0 | 0 | 0 |
接入局域網(wǎng) | 0 | 0 | 2.5 |
接下來(lái)筆者進(jìn)行了編碼和傳送的聯(lián)合測試。編碼任務(wù)執行H.263數據壓縮后,把碼流從以太網(wǎng)接口發(fā)出,然后在網(wǎng)絡(luò )上的另一臺PC上接收這個(gè)碼流,并進(jìn)行解碼播放。通過(guò)調整編碼器的量化步長(cháng)可以控制編碼的輸出碼率。在實(shí)驗環(huán)境下發(fā)現?在量化步長(cháng)大于等于5、碼率在700kbps以下時(shí),基本沒(méi)有丟包現象,解碼得到的圖像比較穩定,而當量化步長(cháng)進(jìn)一步減小,碼率接近1Mbps時(shí),就會(huì )出現丟包現象,解碼的圖像會(huì )出現彩色方塊。出現這種現象是因為H.263編碼器對CPU資源的消耗很大,而且數據在主內存和Realtek8029片上RAM之間的復制采用I/O讀寫(xiě)方式也需要一定的CPU資源。這樣,當量化步長(cháng)小于5時(shí),處理的復雜度超過(guò)了CPU的能力從而產(chǎn)生了一定的誤碼。解決的途徑一方面是改進(jìn)數據的傳送方式(采用DMA),另一方面是需要對編碼任務(wù)進(jìn)行優(yōu)化。
5 小結
本文介紹了PCI總線(xiàn)接口的設計以及PCI空間初始化的步驟,同時(shí)對測試結果進(jìn)行了較詳細的分析,提出了以后改進(jìn)的方向。
評論