??? 關(guān)鍵詞:PCI總線,TM1300,以太網(wǎng)通信接口,視頻通信?
1 引言
??? TM1300是Philip公司推出的多媒體DSP,它不僅具有強(qiáng)大的處理能力,還具有非常友好的音頻和視頻以及SSI和PCI等I/O接口,可以根據(jù)應(yīng)用的需要靈活地構(gòu)造各種視頻通信系統(tǒng)。在本文之前,已經(jīng)有了TM1300上的H.263軟硬件平臺(tái),并利用TM1300的SSI(通用串行口)接口輸出編碼碼流,通過(guò)兩種專門設(shè)計(jì)的外圍接口板實(shí)現(xiàn)了通過(guò)modem在電話線上的低碼率傳輸和通過(guò)E1接口在專線的高速傳輸。鑒于目前計(jì)算機(jī)網(wǎng)絡(luò)的普及和網(wǎng)上視頻業(yè)務(wù)的發(fā)展,很有必要再為TM1300視頻編碼系統(tǒng)開(kāi)發(fā)一個(gè)以太網(wǎng)接口,拓寬應(yīng)用范圍。開(kāi)發(fā)以太網(wǎng)接口的一種合理思路是,利用TM1300集成的PCI接口驅(qū)動(dòng)專用的以太網(wǎng)接口芯片。因目前多數(shù)以太網(wǎng)接口芯片,如realtek8029,realtek8139等都是PCI接口的,可以用PCI總線將數(shù)據(jù)從TM1300傳輸?shù)竭@些專用的以太網(wǎng)接口芯片,然后由它們發(fā)送數(shù)據(jù)。而且,TM1300可以運(yùn)行嵌入式操作系統(tǒng)pSOS,pSOS帶有TCP/IP協(xié)議棧,所以,可以方便地完成編碼碼流的 TCP/IP封裝。
??? 根據(jù)以上思路,我們首先進(jìn)行了前期測(cè)試,證明這樣是可行的,接下來(lái)進(jìn)行了電路板的設(shè)計(jì),并順利完成了調(diào)試。目前,這個(gè)以太網(wǎng)接口已經(jīng)基本開(kāi)發(fā)成功。本文將對(duì)這個(gè)設(shè)計(jì)的技術(shù)要點(diǎn)從硬件和軟件兩方面進(jìn)行詳細(xì)介紹。
2 硬件設(shè)計(jì)
??? 系統(tǒng)框圖如圖1所示。
??? 硬件設(shè)計(jì)的重點(diǎn)是PCI總線接口, PCI總線根據(jù)數(shù)據(jù)位的寬度有32位和64位之分,64位的數(shù)據(jù)線對(duì)32位是兼容的。PC中常見(jiàn)的是32位PCI總線,它的有用引腳總數(shù)是110個(gè),可以分成3組。第一組是基本功能信號(hào)線,包括32位共享數(shù)據(jù)地址線AD〔00..31〕、接口控制線、仲裁線、時(shí)鐘線、系統(tǒng)復(fù)位線、中斷線;第二組是附加功能信號(hào)線,包括錯(cuò)誤報(bào)告線、cache功能支持線、JTAG邊界掃描線;第三組是電源線,包括設(shè)備耗電量標(biāo)示線、3.3V電源線(12根)、5V電源線(13根)、地線(22根)。
??? 因?yàn)镻CI的附加功能信號(hào)線支持的cache功能和JTAG邊界掃描功能8029都不具備,而且雖然8029具有奇偶校驗(yàn)錯(cuò)報(bào)告功能引腳,但是可以懸空不用,所以,只需要考慮第一組功能信號(hào)線的連接。
??? PCI接口的設(shè)計(jì)有以下幾個(gè)要點(diǎn):
??? (1) PCI總線的仲裁。
??? 這里先說(shuō)明兩個(gè)概念。首先,PCI總線是多設(shè)備共享的,由于PC里有多個(gè)PCI設(shè)備,所以需要使用仲裁器;其次,PCI設(shè)備有主設(shè)備和從設(shè)備之分,主設(shè)備可以發(fā)起PCI數(shù)據(jù)的傳送,從設(shè)備只能被動(dòng)地響應(yīng)主設(shè)備的操作,對(duì)讀操作和寫(xiě)操作做出響應(yīng)。PCI的仲裁引腳是REQ#和GNT#,分別稱為請(qǐng)求線和授權(quán)線,只有PCI主設(shè)備有這兩個(gè)引腳。REQ#和GNT#成對(duì)地連到仲裁器,設(shè)備與設(shè)備的REQ#和GNT#是互不相連的。
??? PCI總線的仲裁過(guò)程是這樣的:PCI主設(shè)備把REQ#電平拉低,表示向仲裁器請(qǐng)求占用總線,經(jīng)仲裁獲準(zhǔn)后,仲裁器把這個(gè)設(shè)備的GNT#電平拉低,表示請(qǐng)求獲準(zhǔn),該設(shè)備就可以使用總線了。當(dāng)它不再使用總線時(shí),使REQ#信號(hào)變?yōu)楦唠娖剑俨闷骶筒辉贂?huì)給它分配總線資源。在本系統(tǒng)中,TM1300是PCI主設(shè)備,8029是PCI從設(shè)備,不存在共享總線的問(wèn)題,所以不需要仲裁器,可以簡(jiǎn)單地把REQ# 和GNT#短接,相當(dāng)于TM1300自己給自己授權(quán)。
??? (2) PCI_IDSEL信號(hào)線在設(shè)備的PCI配置讀寫(xiě)中起關(guān)鍵作用。
??? PCI有一種特殊的讀寫(xiě)周期,稱為配置讀寫(xiě),這是在系統(tǒng)引導(dǎo)時(shí),還沒(méi)有給設(shè)備配置I/O或內(nèi)存地址,軟件只能通過(guò)配置讀寫(xiě)訪問(wèn)設(shè)備。配置讀寫(xiě)有兩種,分別稱為0型和1型,采用哪一種取決于總線的硬件連接。當(dāng)配置讀寫(xiě)操作不經(jīng)過(guò)PCI橋時(shí),使用0型,當(dāng)要經(jīng)過(guò)PCI橋時(shí)要用1型,0型讀寫(xiě)的地址直接就是總線上的地址,1型讀寫(xiě)的地址則要經(jīng)過(guò)PCI橋的譯碼才成為最終的總線地址。本設(shè)計(jì)中,TM1300和8029是用PCI總線直連的,所以使用了0型配置讀寫(xiě)。
??? AD〔00..31〕是PCI總線的共享地址和數(shù)據(jù)線,每一次PCI傳送都分為地址周期和數(shù)據(jù)周期。在地址周期, 0型讀寫(xiě)時(shí)AD〔00..31〕的內(nèi)容如下:AD〔00〕和AD〔01〕總為“00”,因?yàn)榕渲米x寫(xiě)是以雙字為單位的;AD〔02〕-AD〔07〕是要讀寫(xiě)的PCI配置空間的寄存器號(hào);AD〔08〕~AD〔10〕是設(shè)備的功能號(hào),在一塊PCI卡上有多個(gè)功能設(shè)備時(shí),為了進(jìn)一步區(qū)分這些設(shè)備就要用到這幾位,8029是單功能設(shè)備,這幾位全為0;AD〔11〕-AD〔31〕是設(shè)備選擇位,其中必須有且僅有一位為"1"(如圖2所示),物理上這表現(xiàn)為總線的AD〔11〕-AD〔31〕中有一根為高電平,如果出高電平的這根線與某塊PCI卡的PCI_IDSEL引腳相連,這塊卡就會(huì)被激活,在緊接著的數(shù)據(jù)周期,它就會(huì)將其PCI配置空間相應(yīng)寄存器的內(nèi)容放到總線上供讀取。?
??? (3)PCI_FRAME#,PCI_DEVSEL#,PCI_IRDY#,PCI_TRDY#引腳的處理。
??? 這四個(gè)引腳均是低電平有效,需要接上拉電阻,保證在設(shè)備未驅(qū)動(dòng)該引腳時(shí)處于穩(wěn)定的無(wú)效狀態(tài), 上拉電阻的阻值在1kΩ到10kΩ范圍內(nèi),阻值越小則芯片將該信號(hào)驅(qū)動(dòng)為有效的時(shí)間越短,但是太小會(huì)導(dǎo)致電流過(guò)大,所以,要權(quán)衡考慮,本設(shè)計(jì)選用4.7kΩ。
??? 上述三點(diǎn)對(duì)脫機(jī)情況下PCI設(shè)備的互連具有較普遍的參考意義,除此之外,本設(shè)計(jì)還有以下幾點(diǎn)比較特殊:
??? ·TM1300的PCI_INTA#引腳配置為輸入,以接收8029的中斷;?
??? · PCI時(shí)鐘由TM1300提供;?
??? ·8029的復(fù)位信號(hào)也就是TM1300的復(fù)位信號(hào),由外部電路提供;?
??? ·TM1300的PCI_STOP#,PCI_SERR#引腳懸空,因?yàn)?029不具備相應(yīng)的附加功能。另外TM1300的PCI_INTB#,PCI_INTC#,PCI_INTD#引腳可以用作用戶中斷。
3 軟件設(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_broadcast(發(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)用中就是8029的驅(qū)動(dòng)程序,它通過(guò)硬件抽象層來(lái)驅(qū)動(dòng)8029。硬件抽象層是PCI總線的配置讀寫(xiě)和I/O讀寫(xiě)指令集的總稱。
??? 軟件執(zhí)行的流程大致是:系統(tǒng)首先啟動(dòng)pSOS,pSOS加載網(wǎng)絡(luò)接口驅(qū)動(dòng)程序,然后調(diào)用驅(qū)動(dòng)程序的ni_init函數(shù),初始化8029的PCI配置空間并設(shè)置8029的工作參數(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)存到8029片上RAM的拷貝,然后啟動(dòng)8029發(fā)送數(shù)據(jù)。在接收的情況下,8029收到一個(gè)完整的數(shù)據(jù)包后,用中斷通知CPU,CPU轉(zhuǎn)而執(zhí)行中斷服務(wù)程序,中斷服務(wù)程序?qū)?shù)據(jù)包從8029片上RAM中拷貝到系統(tǒng)的主內(nèi)存,然后調(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ì)介紹,可以參閱參考文獻(xiàn)〔1〕和〔2〕的相關(guān)內(nèi)容。另外,8029驅(qū)動(dòng)程序的編寫(xiě)可以參照參考文獻(xiàn)〔3〕。本文接下來(lái)重點(diǎn)介紹PCI配置空間的配置過(guò)程,這部分對(duì)于類似的設(shè)計(jì)有較普遍的參考意義。
??? PCI配置空間有64個(gè)字節(jié),PCI片內(nèi)都集成了這些寄存器,其中存儲(chǔ)了該芯片的廠商號(hào)、設(shè)備號(hào)、設(shè)備類型等重要代碼,還包括命令寄存器、基地址寄存器等控制其總線行為的寄存器,它們必須在設(shè)備初始化時(shí)正確配置,否則設(shè)備不能工作。
??? 對(duì)8029PCI空間的配置需要三個(gè)步驟:?
??? 首先,掃描總線,這一步的目的是找到8029的配置地址,直觀地講就是它的PCI_IDSEL引腳和哪根AD線相連,因?yàn)楹罄m(xù)的配置寫(xiě)要根據(jù)這個(gè)地址尋址。掃描總線時(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,已知8029的設(shè)備和廠商代碼是"0x802910ec",如果返回值與之相同,說(shuō)明找到了8029,這時(shí)要記下這根AD線的序號(hào)。例如,我們?cè)谟布习?029的PCI_IDSEL和AD〔20〕相連,則掃描到的序號(hào)就應(yīng)該是“20”。
??? 其次,用配置寫(xiě)函數(shù)配置I/O讀寫(xiě)使能,即在command寄存器寫(xiě)入“0x1”。
??? 最后,用配置寫(xiě)函數(shù)配置I/O地址,即在I/O Base Adddress寄存器寫(xiě)入分配給該設(shè)備的I/O地址,例如“0xe400”。程序流程圖如圖4所示。
4 調(diào)試結(jié)果
??? 根據(jù)以上設(shè)計(jì),我們?cè)谠璗M1300視頻編碼硬件系統(tǒng)的基礎(chǔ)上加入了PCI接口,并編寫(xiě)了pSOS下8029的驅(qū)動(dòng)程序。然后,在這個(gè)硬件平臺(tái)上對(duì)8029的驅(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)的。該P(yáng)C接收并對(duì)丟包數(shù)進(jìn)行統(tǒng)計(jì),其結(jié)果如表1。實(shí)驗(yàn)表明,在用網(wǎng)線直連的各種測(cè)試速率情況下都沒(méi)有出錯(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)存到8029片上RAM的拷貝過(guò)程目前尚未采用DMA方式,這是需要改進(jìn)的地方。
??? 然后,我們進(jìn)行了編碼和傳送的聯(lián)合測(cè)試。編碼任務(wù)執(zhí)行H.263數(shù)據(jù)壓縮,然后把碼流從以太網(wǎng)接口發(fā)出,在網(wǎng)絡(luò)上的另一臺(tái)PC上接收這個(gè)碼流和進(jìn)行解碼播放。通過(guò)調(diào)整編碼器的量化步長(zhǎng)可以控制編碼的輸出碼率。在實(shí)驗(yàn)環(huán)境下發(fā)現(xiàn),在量化步長(zhǎng)大于等于5、碼率在700kbps以下時(shí),基本沒(méi)有丟包的情況,解碼得到的圖像比較穩(wěn)定;當(dāng)量化步長(zhǎng)進(jìn)一步減小、碼率接近1Mbps時(shí),出現(xiàn)丟包現(xiàn)象,解碼的圖像出現(xiàn)彩色方塊。出現(xiàn)這種現(xiàn)象是因?yàn)镠.263編碼器對(duì)CPU資源的消耗很大,而且數(shù)據(jù)在主內(nèi)存和8029片上RAM之間的復(fù)制采用的是I/O讀寫(xiě)方式,也需要一定的CPU資源,當(dāng)量化步長(zhǎng)小于5時(shí),處理復(fù)雜度超過(guò)了CPU的能力,從而產(chǎn)生了一定的誤碼。解決問(wèn)題的途徑一方面是改進(jìn)數(shù)據(jù)的傳送方式(采用DMA),另一方面需要對(duì)編碼任務(wù)進(jìn)行優(yōu)化。
5 結(jié)束語(yǔ)?
??? 本文把介紹重點(diǎn)放在了對(duì)于類似的設(shè)計(jì)有較普遍參考意義的部分,例如PCI總線接口的設(shè)計(jì),PCI空間初始化的步驟等。對(duì)測(cè)試結(jié)果進(jìn)行了較詳細(xì)的分析,提出了以后改進(jìn)的方向。?
參考文獻(xiàn)?
1 倪強(qiáng). 基于TM1300的視頻監(jiān)控系統(tǒng)碼率控制和遠(yuǎn)端設(shè)備控制接口技術(shù)研究:〔學(xué)位論文〕. 南京:南京郵電學(xué)院信息工程系,2002
2 倪強(qiáng),胡明. 基于PSTN的視頻監(jiān)控系統(tǒng)的遠(yuǎn)端設(shè)備.?電子工程師,2002(4): 14~16
3 ***. 計(jì)算機(jī)通信技術(shù)及其程序設(shè)計(jì). 西安:西安電子科技大學(xué)出版社,1998
評(píng)論