??? 摘 要:?介紹了一種以Samsun公司的ARM7TDMI CPU S3C4510B為核心、μClinux為操作系統(tǒng)的嵌入式系統(tǒng)" title="嵌入式系統(tǒng)">嵌入式系統(tǒng)應(yīng)用于MPEG-2或MPEG-4等實(shí)時(shí)多媒體數(shù)據(jù)的網(wǎng)絡(luò)傳輸所面臨的問(wèn)題,并提出了相應(yīng)的解決方案,。
??? 關(guān)鍵詞: 嵌入式系統(tǒng)? μClinux? 實(shí)時(shí)多媒體? 接口擴(kuò)展
?
??? 嵌入式系統(tǒng)目前已廣泛應(yīng)用于信息家電,、網(wǎng)絡(luò)通信和工業(yè)控制等各個(gè)領(lǐng)域,。典型的嵌入式" title="的嵌入式">的嵌入式系統(tǒng)主要由嵌入式硬件和軟件構(gòu)成,其中硬件部分的核心為嵌入式處理器,。與通用處理器相比,,其在功耗、體積,、成本等方面都受到應(yīng)用要求的制約,。嵌入式系統(tǒng)的軟件部分可以像計(jì)算機(jī)一樣使用操作系統(tǒng),目前已有許多成熟嵌入式操作系統(tǒng),,如VxWorks,、pSOS、Nucleus,、Windows CE以及嵌入式Linux等,。當(dāng)然,在一些簡(jiǎn)單應(yīng)用中許多嵌入式系統(tǒng)的軟件并沒有使用操作系統(tǒng),,只有一些循環(huán)控制,。這樣,軟件復(fù)雜度大大降低,,從而減少存儲(chǔ)器的容量要求,,但是這樣的軟件在重復(fù)使用,、網(wǎng)絡(luò)支持等方面的能力相對(duì)較弱,。
??? ARM系列內(nèi)核是目前嵌入式處理器中廣泛使用的內(nèi)核。采用ARM內(nèi)核的處理器具有體積小,、功耗低,、成本低和性能高的特點(diǎn)。在全球有眾多生產(chǎn)ARM內(nèi)核處理器的廠商,。
??? Linux是一種很受歡迎的開放源碼操作系統(tǒng),,原先被設(shè)計(jì)應(yīng)用于桌面系統(tǒng),后被廣泛應(yīng)用于服務(wù)器,。由于其開放源碼和內(nèi)核可裁減等特性,,Linux逐漸被修改用于嵌入式領(lǐng)域。目前已有多個(gè)嵌入式應(yīng)用的版本,,μClinux是其中的一個(gè)分支,,最早被設(shè)計(jì)應(yīng)用于微控制領(lǐng)域。其最大特征就是沒有MMU(內(nèi)存管理單元),,很適合于許多低端的,、沒有MMU的嵌入式處理器。
??? 本文設(shè)計(jì)了一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸。ARM內(nèi)核處理器與嵌入式Linux是目前嵌入式應(yīng)用中的一種典型組合,,選用了Samsung公司的16/32位ARM7TDMI內(nèi)核的網(wǎng)絡(luò)處理器S3C4510B為嵌入式硬件核心,,μClinux為操作系統(tǒng)。該系統(tǒng)支持完整的TCP/IP協(xié)議以及許多其它的網(wǎng)絡(luò)協(xié)議,,同時(shí)它具有很低的成本,。
1 嵌入式系統(tǒng)的構(gòu)成
1.1 硬件系統(tǒng)
??? 嵌入式硬件系統(tǒng)主要由CPU、Flash ROM,、SDRAM,、以太網(wǎng)物理層、FIFO以及CPLD等芯片構(gòu)成,,如圖1所示,。
?
??? (1)CPU
??? 本系統(tǒng)采用了ARM7TDMI內(nèi)核的RISC處理器S3C4510B。該芯片具有如下一些主要特點(diǎn):
??? ·8/16/32位的外部總線支持ROM,、RAM,、Flash存儲(chǔ)器、DRAM和外部I/O" title="I/O">I/O,;
??? ·8K字節(jié)的Cache,;
??? ·一個(gè)I2C接口;
??? ·一個(gè)帶MII接口的100Mbps/10Mbps以太網(wǎng)控制器,;
??? ·兩個(gè)UART通道,;
??? ·兩個(gè)通用DMA通道;
??? ·兩個(gè)HDLC通道,;
??? ·18個(gè)通用I/O通道,;
??? ·兩個(gè)32位定時(shí)器;
??? ·共有21個(gè)中斷源,,其中4個(gè)用于外部中斷,;
??? ·一個(gè)內(nèi)部PLL用于提供高頻率的系統(tǒng)時(shí)鐘,最高系統(tǒng)時(shí)鐘可達(dá)50MHz,。
??? 由此可見,,S3C4510B很適用于低端的網(wǎng)絡(luò)設(shè)備,如集線器,、交換機(jī),、家庭網(wǎng)關(guān)等。
??? (2)Flash ROM和SDRAM
??? Flash ROM和SDRAM構(gòu)成了系統(tǒng)的存儲(chǔ)空間,。其中Flash ROM作為程序存儲(chǔ)器,,用于存放操作系統(tǒng)、應(yīng)用程序等,;SDRAM為系統(tǒng)內(nèi)存,。
??? (3)以太網(wǎng)物理層和串行接口芯片
??? CPU內(nèi)部的以太網(wǎng)控制器只提供了MAC(媒體接入控制器),,需在外部接一個(gè)物理層芯片完成編解碼和時(shí)鐘恢復(fù)等功能。串行接口芯片主要完成串行線路接口的電平轉(zhuǎn)換,。
??? (4)CPLD和FIFO
??? 為了能使系統(tǒng)支持實(shí)時(shí)數(shù)據(jù)通信,,需要在外設(shè)和嵌入式系統(tǒng)的外部總線之間加上FIFO和CPLD。FIFO用于數(shù)據(jù)緩沖,,CPLD用于產(chǎn)生FIFO控制邏輯和外部總線控制邏輯,。
1.2 操作系統(tǒng)
??? ARM7TDMI內(nèi)核已被眾多的嵌入式操作系統(tǒng)所支持,如VxWorks,、pSOS及Nucleus等,。這些商業(yè)化操作系統(tǒng)在網(wǎng)絡(luò)和用戶圖形界面等方面都有很好的支持,并且在穩(wěn)定性和實(shí)時(shí)性" title="實(shí)時(shí)性">實(shí)時(shí)性方面都有相應(yīng)的保證,,但其價(jià)格也相當(dāng)高,。這里選用了開放源碼的嵌入式Linux,它一般免費(fèi)或花較少的費(fèi)用就可得到,,同時(shí)它在網(wǎng)絡(luò)和圖形界面方面也有很好的支持,。另外,嵌入式Linux的高度模塊化使它可以根據(jù)實(shí)際應(yīng)用需要靈活配置,,能有效精簡(jiǎn)內(nèi)核代碼,。嵌入式Linux具有很高的穩(wěn)定性。在實(shí)時(shí)性方面,,盡管linux本身未作過(guò)多關(guān)注,,但可通過(guò)打?qū)崟r(shí)Linux(RTLinux)補(bǔ)丁解決。
??? 針對(duì)所采用的CPU沒有MMU,,選用了目前在嵌入式系統(tǒng)中被廣泛使用的μClinux,。μClinux是從標(biāo)準(zhǔn)的Linux2.0內(nèi)核發(fā)展而來(lái)的,但其源代碼針對(duì)典型的嵌入式應(yīng)用已經(jīng)作了許多精簡(jiǎn)和修改,,使得其內(nèi)核比標(biāo)準(zhǔn)的Linux內(nèi)核要小很多,,不過(guò)它仍然保留了標(biāo)準(zhǔn)Linux的主要特色。
??? 目前最新的μClinux版本已經(jīng)支持S3C4510B及典型開發(fā)板,,如果所采用的CPU及開發(fā)板沒有被支持,應(yīng)根據(jù)實(shí)際情況移植,。此外,,由于在外部總線接了CPLD和FIFO,為了使應(yīng)用程序能訪問(wèn)它,,需要在μClinux下開發(fā)相應(yīng)的驅(qū)動(dòng)程序,。
2?實(shí)時(shí)數(shù)據(jù)接口的擴(kuò)展
2.1 應(yīng)用要求
??? 將上述嵌入式系統(tǒng)應(yīng)用于實(shí)時(shí)多媒體數(shù)據(jù)的網(wǎng)絡(luò)傳輸,如圖2所示,。這里的實(shí)時(shí)多媒體可以是MPEG-4或MPEG-2等,,其數(shù)據(jù)流一般是連續(xù),、恒定碼率的。
?
2.2 硬件擴(kuò)展
??? 根據(jù)上述數(shù)據(jù)流的特點(diǎn),,需在嵌入式系統(tǒng)與外設(shè)(編,、解碼器)之間加入數(shù)據(jù)緩沖控制單元。對(duì)于發(fā)送端和接收端" title="接收端">接收端,,數(shù)據(jù)緩沖控制單元的設(shè)計(jì)有所不同,,下面以MPEG-2為例說(shuō)明。這里考慮系統(tǒng)的處理能力,、網(wǎng)絡(luò)的承受能力以及圖像質(zhì)量,,MPEG-2的輸出為4Mbps的CBR(固定比特率)Ts流。
2.2.1 發(fā)送端
??? 編碼器送出連續(xù),、恒定速率的碼流,。如果將此碼流直接送到CPU外部總線,將會(huì)導(dǎo)致操作系統(tǒng)頻繁地處理中斷,,甚至?xí)a(chǎn)生中斷不能及時(shí)處理從而導(dǎo)致數(shù)據(jù)丟失,。因此,有必要在編碼器與外部總線之間加上FIFO,,同時(shí)用CPLD實(shí)現(xiàn)FIFO的讀寫控制邏輯,。編碼器送出的數(shù)據(jù)流連續(xù)不斷地以恒定速率寫入FIFO;當(dāng)FIFO中的數(shù)據(jù)積聚到一定值后,,每寫入若干個(gè)數(shù)據(jù)就向CPU發(fā)一個(gè)中斷,;CPU在收到中斷后通過(guò)外部總線讀入相當(dāng)量的數(shù)據(jù),并將其打包送入網(wǎng)絡(luò),。正常情況下,,每個(gè)中斷讀數(shù)據(jù)個(gè)數(shù)是一定的,在一段時(shí)間內(nèi)FIFO寫入和讀出將維持平衡,,且不會(huì)產(chǎn)生“饑餓”狀態(tài),;當(dāng)操作系統(tǒng)因處理別的任務(wù)而沒有及時(shí)響應(yīng)中斷時(shí),F(xiàn)IFO將暫時(shí)進(jìn)入“飽和”狀態(tài),,但只要FIFO容量足夠大就不會(huì)產(chǎn)生數(shù)據(jù)溢出現(xiàn)象,。由于CPU從FIFO讀取單位數(shù)據(jù)的速度大大高于外設(shè)向FIFO寫單位數(shù)據(jù)的速度,“飽和”狀態(tài)一般能消除,。由此,,可以解決前述問(wèn)題。
2.2.2 接收端
??? 在接收端,,由于解碼器的輸入要求是一個(gè)連續(xù),、恒定速率的碼流,同樣要求在CPU外部總線與編碼器之間加上FIFO和CPLD,。同時(shí),,接收端的數(shù)據(jù)包由于經(jīng)過(guò)了網(wǎng)絡(luò),,不可避免地會(huì)引入延時(shí),且數(shù)據(jù)包之間的延時(shí)是不確定的,,甚至?xí)a(chǎn)生數(shù)據(jù)包的丟失,。這些都需要在接收端予以考慮,增加了接收端數(shù)據(jù)緩沖控制單元的復(fù)雜度,。
??? 為了解決數(shù)據(jù)包到達(dá)延時(shí)及抖動(dòng)問(wèn)題(數(shù)據(jù)包的丟失將間接導(dǎo)致延時(shí)的增加),,可以簡(jiǎn)單地靠增大FIFO容量解決。但增大FIFO將意味著從編碼器到解碼器之間延時(shí)的增加,,影響了實(shí)時(shí)性,。因此,為了保證一定的實(shí)時(shí)性,,同時(shí)考慮成本因素,,不能單純靠增大FIFO解決。
??? 由于FIFO容量的限制,,在出現(xiàn)大延時(shí)的情況下,,F(xiàn)IFO將可能出現(xiàn)“空”狀態(tài)。這意味著送給解碼器的數(shù)據(jù)流會(huì)有中斷,,從而可能導(dǎo)致解碼器的不正常工作并可能不能恢復(fù)(在數(shù)據(jù)流恢復(fù)正常后),。為此,需要在FIFO出現(xiàn)“空”狀態(tài)之前,,即處于“饑餓”狀態(tài)時(shí)(可以設(shè)置一個(gè)閾值),,由CPLD停止向FIFO讀數(shù)據(jù)而向解碼器發(fā)填充包。填充包中含有同步頭,,可以維持解碼器的同步,。短時(shí)間的插空包會(huì)使視頻圖像出現(xiàn)馬賽克,如果時(shí)間過(guò)長(zhǎng),,可能會(huì)出現(xiàn)黑屏,。在實(shí)際試驗(yàn)中,接收端視頻的質(zhì)量與網(wǎng)絡(luò)的負(fù)載情況有關(guān),。當(dāng)網(wǎng)絡(luò)負(fù)載較重時(shí),,圖像會(huì)出現(xiàn)馬賽克,黑屏現(xiàn)象一般極少發(fā)生,。
2.3 驅(qū)動(dòng)程序
??? 為了使μClinux下的應(yīng)用程序能通過(guò)外部總線訪問(wèn)FIFO,,需要編寫相應(yīng)的驅(qū)動(dòng)程序。驅(qū)動(dòng)程序主要包括三個(gè)基本部分,,即CPU相關(guān)寄存器的初始化設(shè)置以及CPU對(duì)外部I/O口的讀操作和寫操作。其中,,初始化設(shè)置主要包括中斷號(hào)及其類型設(shè)置,、外部I/O口數(shù)據(jù)位寬度和讀寫時(shí)序設(shè)置等,。
參考文獻(xiàn)
1 鄒思軼.嵌入式Linux設(shè)計(jì)與應(yīng)用.北京:清華大學(xué)出版社,2002
2 杜春雷.ARM體系結(jié)構(gòu)與編程.北京:清華大學(xué)出版社,,2003
3 Samsung Electronics Semiconductors.S3C4510B User's?Manual(Rev.1.0).Feb.2001