基于DSP的以太網(wǎng)通信接口設(shè)計(jì)方案
3 軟件設(shè)計(jì)
該接口設(shè)計(jì)的軟件結(jié)構(gòu)框圖如圖3所示。其中TM1300運(yùn)行于pSOS,它是一個(gè)簡(jiǎn)單的實(shí)時(shí)多任務(wù)嵌入式操作系統(tǒng),帶有pNA+網(wǎng)絡(luò)組件,其pNA+相當(dāng)于TCP/IP協(xié)議棧的擴(kuò)展,它向上可提供應(yīng)用程序編程的socket接口,向下可定義一個(gè)與網(wǎng)絡(luò)接口層交互的接口,其中包括8個(gè)函數(shù),分別是:ni_init(接口芯片初始化)、ni_broad-cast(發(fā)送廣播分組)、ni_send(發(fā)送普通分組)、ni_getpkb(申請(qǐng)發(fā)送緩沖區(qū))、ni_retpkb(歸還接收緩沖區(qū))、ni_ioctl(I/O控制操作)、ni_pool(統(tǒng)計(jì)量查詢)、Announce(網(wǎng)絡(luò)接口驅(qū)動(dòng)調(diào)用它把接收到的數(shù)據(jù)包提交給pSOS)。其中網(wǎng)絡(luò)接口層在本應(yīng)用中就是Realtek8029的驅(qū)動(dòng)程序,它通過硬件抽象層來(lái)驅(qū)動(dòng)Realtek8029(硬件抽象層是PCI總線的配置讀寫和I/O讀寫指令集的總稱)。 軟件執(zhí)行的流程大致是:系統(tǒng)首先啟動(dòng)pSOS,并由它加載網(wǎng)絡(luò)接口驅(qū)動(dòng)程序,然后調(diào)用驅(qū)動(dòng)程序的ni_init函數(shù),同時(shí)初始化Realtek8029的PCI配置空間并設(shè)置Realtek8029的工作參數(shù),之后啟動(dòng)用戶任務(wù)。在這里,用戶任務(wù)為H.263編碼進(jìn)程。它對(duì)VI口讀入的源圖像進(jìn)行壓縮編碼后,將調(diào)用socket的接口函數(shù)sendto(sendto是UDP套接口專用的發(fā)送函數(shù)),然后把碼流發(fā)送給pSOS由pSOS根據(jù)UDP協(xié)議進(jìn)行封裝后,再調(diào)用ni_send函數(shù),并由ni_send完成數(shù)據(jù)包從系統(tǒng)主內(nèi)存到Realtek8029片上RAM的拷貝,然后啟動(dòng)Realtek8029發(fā)送數(shù)據(jù)。在接收情況下,Realtek8029收到一個(gè)完整的數(shù)據(jù)包后會(huì)用中斷通知CPU,然后由CPU執(zhí)行中斷服務(wù)程序。當(dāng)中斷服務(wù)程序?qū)?shù)據(jù)包從Realtek8029片上RAM中拷貝到系統(tǒng)的主內(nèi)存后,系統(tǒng)將調(diào)用Announce函數(shù)并把數(shù)據(jù)塊的指針、數(shù)據(jù)長(zhǎng)度和其它信息提交pSOS,最后由pSOS將數(shù)據(jù)包沿協(xié)議棧一層層上傳并作出相應(yīng)的處理。 軟件的設(shè)計(jì)和pSOS操作系統(tǒng)的關(guān)系比較密切,限于篇幅,本文不對(duì)pSOS作詳細(xì)介紹。
本文接下來(lái)重點(diǎn)介紹PCI配置空間的配置過程,這部分對(duì)于類似的設(shè)計(jì)有較普遍的參考意義。PCI配置空間有64個(gè)字節(jié),PCI片內(nèi)的這些寄存器存儲(chǔ)了該芯片的廠商號(hào)、設(shè)備號(hào)、設(shè)備類型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線行為的寄存器,它們必須在設(shè)備初始化時(shí)正確配置,否則設(shè)備不能工作。 對(duì)Realtek8029 PCI空間的配置需要三個(gè)步驟: 首先是掃描總線,這一步的目的是找到Real-tek8029的配置地址,直觀地講,就是找到它的PCI_IDSEL引腳和哪根AD線相連,因?yàn)楹罄m(xù)的配置寫要根據(jù)這個(gè)地址來(lái)尋址。掃描總線時(shí),要對(duì)AD〔11〕到AD〔31〕每根線進(jìn)行一次掃描,如果哪根AD線連接了一個(gè)PCI設(shè)備的PCI IDSEL引腳,那么用配置讀函數(shù)讀取PCI配置空間的0號(hào)寄存器時(shí),應(yīng)該返回該設(shè)備的設(shè)備和廠商代碼,如果這根線實(shí)際未連接設(shè)備,則返回值是0。已知Realtek8029的設(shè)備和廠商代碼是“0x802910ec”,如果返回值與之相同,說(shuō)明找到了Realtek8029,這時(shí)要記下這根AD線的序號(hào)。例如,在硬件上把Realtek8029的PCI IDSEL和AD〔20〕相連,則掃描到的序號(hào)就應(yīng)該是“20”。 其次,用配置寫函數(shù)配置I/O讀寫使能,即在command寄存器中寫入“0x1”。 最后,用配置寫函數(shù)配置I/O地址,也就是在I/OBaseAdddress寄存器寫入分配給該設(shè)備的I/O地址(例如“0xe400”)。具體程序流程圖如圖4所示。
4 調(diào)試結(jié)果
根據(jù)以上設(shè)計(jì),筆者在原TM1300視頻編碼硬件系統(tǒng)的基礎(chǔ)上加入了PCI接口,并編寫了pSOS下Realtek8029的驅(qū)動(dòng)程序。然后,在這個(gè)硬件平臺(tái)上對(duì)Realtek8029的驅(qū)動(dòng)部分進(jìn)行了數(shù)據(jù)傳送測(cè)試。 筆者首先用一個(gè)單獨(dú)的UDP發(fā)送任務(wù)進(jìn)行發(fā)送速率測(cè)試。這個(gè)任務(wù)主要是高速地向網(wǎng)絡(luò)上的一臺(tái)PC發(fā)送數(shù)據(jù)包,數(shù)據(jù)包的大小是變長(zhǎng)的。PC接收并對(duì)丟包數(shù)進(jìn)行統(tǒng)計(jì)的結(jié)果如表1所列。實(shí)驗(yàn)表明,在用網(wǎng)線直連的各種測(cè)試速率情況下都沒有出錯(cuò),而當(dāng)接入局域網(wǎng)后,在發(fā)送速率為4.5Mbps時(shí)有突發(fā)的少量錯(cuò)誤。由于UDP是不可靠的傳輸方式,所以這種錯(cuò)誤是正常的。
測(cè)試中,UDP發(fā)送的最高速率可以達(dá)到5Mbps左右,它與硬件的最高速率(10Mbps)相比還有一定差距,主要原因是數(shù)據(jù)從系統(tǒng)主內(nèi)存到Realtek8029片上RAM的拷貝過程目前尚未采用DMA方式,這是需要改進(jìn)的地方。 表1 丟包數(shù)統(tǒng)計(jì)表(單位:丟包個(gè)數(shù)/分鐘) 連接方式發(fā) 送 速 率 800kbps 1.8Mbps 4.5Mbps 網(wǎng)絡(luò)直連 0 0 0 接入局域網(wǎng) 0 0 2.5 接下來(lái)筆者進(jìn)行了編碼和傳送的聯(lián)合測(cè)試。編碼任務(wù)執(zhí)行H.263數(shù)據(jù)壓縮后,把碼流從以太網(wǎng)接口發(fā)出,然后在網(wǎng)絡(luò)上的另一臺(tái)PC上接收這個(gè)碼流,并進(jìn)行解碼播放。通過調(diào)整編碼器的量化步長(zhǎng)可以控制編碼的輸出碼率。在實(shí)驗(yàn)環(huán)境下發(fā)現(xiàn)在量化步長(zhǎng)大于等于5、碼率在700kbps以下時(shí),基本沒有丟包現(xiàn)象,解碼得到的圖像比較穩(wěn)定,而當(dāng)量化步長(zhǎng)進(jìn)一步減小,碼率接近1Mbps時(shí),就會(huì)出現(xiàn)丟包現(xiàn)象,解碼的圖像會(huì)出現(xiàn)彩色方塊。出現(xiàn)這種現(xiàn)象是因?yàn)镠.263編碼器對(duì)CPU資源的消耗很大,而且數(shù)據(jù)在主內(nèi)存和Realtek8029片上RAM之間的復(fù)制采用I/O讀寫方式也需要一定的CPU資源。這樣,當(dāng)量化步長(zhǎng)小于5時(shí),處理的復(fù)雜度超過了CPU的能力從而產(chǎn)生了一定的誤碼。解決的途徑一方面是改進(jìn)數(shù)據(jù)的傳送方式(采用DMA),另一方面是需要對(duì)編碼任務(wù)進(jìn)行優(yōu)化。
5 結(jié)語(yǔ)
本方案介紹了TM1300 DSP 的特點(diǎn),給出了通過TM1300的PCI接口驅(qū)動(dòng)以太網(wǎng)芯片來(lái)實(shí)現(xiàn)以太網(wǎng)通信接口的設(shè)計(jì)方法。該設(shè)計(jì)將TM1300和以太網(wǎng)結(jié)合起來(lái),因而可以方便地實(shí)現(xiàn)視頻通信,文章詳細(xì)介紹了該方案的軟件和硬件的設(shè)計(jì)要點(diǎn),最后給出了對(duì)模擬數(shù)據(jù)和實(shí)際視頻壓縮碼流的傳送實(shí)驗(yàn)結(jié)果。
評(píng)論