基于SDA80D51的以太電話機(jī)的設(shè)計(jì)
摘要:本文提出了一種新型以太電話機(jī)的設(shè)計(jì),采用SDA80D51芯片作為主控單元,同時(shí)使用RTL8019AS作為網(wǎng)絡(luò)接口模塊,實(shí)現(xiàn)了高度集成、具有較高性價(jià)比的話機(jī)。同時(shí),還針對(duì)嵌入式系統(tǒng)硬件資源受限的特點(diǎn),提出了一系列優(yōu)化代碼和數(shù)據(jù)存儲(chǔ)空間的方法和技巧。
引言
VoIP(Voice over IP)是利用IP網(wǎng)絡(luò)作為傳輸載體實(shí)現(xiàn)語(yǔ)音通信的技術(shù),以太電話機(jī)則是以VoIP為基礎(chǔ)實(shí)現(xiàn)的語(yǔ)音通信終端。以太電話機(jī)價(jià)格相對(duì)昂貴和話音質(zhì)量方面的問(wèn)題是目前開(kāi)發(fā)工作的難點(diǎn)。本設(shè)計(jì)是基于英飛凌科技公司的SDA80D51芯片實(shí)現(xiàn)的,該話機(jī)具有集成度高、結(jié)構(gòu)簡(jiǎn)單、成本低等特點(diǎn),具有較高推廣價(jià)值。
硬件設(shè)計(jì)
話機(jī)采用SDA80D51芯片和以太網(wǎng)接口芯片RTL8019AS實(shí)現(xiàn)。由于采用了高集成的SDA80D51芯片,使系統(tǒng)硬件電路結(jié)構(gòu)簡(jiǎn)單,整體硬件成本低廉、集成度較高。考慮到協(xié)議代碼的存儲(chǔ)需求,使用一個(gè)Flash作為擴(kuò)展存儲(chǔ)單元存放代碼,同時(shí)還設(shè)計(jì)了撥號(hào)鍵盤到控制單元的控制電路。硬件的設(shè)計(jì)還可以根據(jù)不同的需求,進(jìn)行相應(yīng)的調(diào)整,以實(shí)現(xiàn)其它的增值業(yè)務(wù)功能。
SDA80D5l簡(jiǎn)介
SDA80D51芯片將16位DSP和增強(qiáng)型微處理器(8051微處理器的擴(kuò)展版本)高度集成,并同時(shí)集成ADC與DAC,是一種面向語(yǔ)音處理的專用芯片。芯片同時(shí)提供一個(gè)內(nèi)存控制單元MMU和片上104kB的RAM。它具有程序和數(shù)據(jù)分開(kāi)的總線結(jié)構(gòu)、流水線操作、單周期硬件乘法器和適合數(shù)字信號(hào)處理的高效指令集。此芯片的C編譯能力很強(qiáng),匯編出的目標(biāo)代碼效率會(huì)更高。
語(yǔ)音信號(hào)在SDA80D51集成的語(yǔ)音采樣接口模塊進(jìn)行A/D和D/A轉(zhuǎn)換,語(yǔ)音的壓縮處理則由DSP模塊進(jìn)行,對(duì)傳輸?shù)恼Z(yǔ)音數(shù)據(jù)打包是由C51模塊完成的。編解碼壓縮處理后由控制模塊進(jìn)行對(duì)語(yǔ)音的接收/發(fā)送控制,同時(shí),控制模塊還要完成對(duì)整個(gè)系統(tǒng)的控制工作。
網(wǎng)絡(luò)接口控制模塊
網(wǎng)絡(luò)接口控制模塊采用Realtek公司的以太網(wǎng)控制芯片RTL8019AS。該芯片與NE2000兼容,支持8位、16位數(shù)據(jù)總線;全雙工,收發(fā)可同時(shí)達(dá)到10Mbps,有睡眠模式,可有效地降低功耗;內(nèi)置16kB的SRAM用于收發(fā)緩沖,可減輕主處理器在數(shù)據(jù)帶寬上的壓力;可連接同軸電纜或雙絞線,并可自動(dòng)檢測(cè)所連接的介質(zhì)。
系統(tǒng)使用RTL8019AS來(lái)實(shí)現(xiàn)以太網(wǎng)媒介訪問(wèn)層(MAC)和物理層(PHY)的功能,包括MAC數(shù)據(jù)幀的收發(fā)、地址識(shí)別、CRC編碼校驗(yàn)、超時(shí)重傳、鏈路完整性測(cè)試、信號(hào)極性檢測(cè)糾正等。主處理器在RTL8019AS的外部總線上讀寫MAC幀。其中,接收控制器用于將接收的串行數(shù)據(jù)拼成字節(jié)送到CRC校驗(yàn)單元,發(fā)送控制器則是將送來(lái)的字節(jié)送到CRC編碼單元并逐個(gè)按位移出;CRC邏輯在接收時(shí)對(duì)輸入的數(shù)據(jù)進(jìn)行CRC校驗(yàn),發(fā)送時(shí)對(duì)幀數(shù)據(jù)產(chǎn)生CRC校驗(yàn)序列;地址識(shí)別邏輯對(duì)接收幀的目的地址與預(yù)先設(shè)置的本地物理地址進(jìn)行比較,如不符合要求則拒收。RTL8019AS還使用內(nèi)部存儲(chǔ)緩沖器對(duì)與核心控制單元進(jìn)行的數(shù)據(jù)交換進(jìn)行緩沖,以優(yōu)化系統(tǒng)的數(shù)據(jù)傳輸速率。
軟件設(shè)計(jì)
系統(tǒng)的軟件是基于SDA80D51設(shè)計(jì)開(kāi)發(fā)的。話機(jī)軟件結(jié)構(gòu)如圖1所示。
圖1 以太電話機(jī)軟件組成框圖
系統(tǒng)軟件開(kāi)發(fā)以C語(yǔ)言編程為主,對(duì)占用系統(tǒng)資源比較大的部分使用匯編語(yǔ)言來(lái)完成。程序開(kāi)發(fā)主要完成網(wǎng)絡(luò)接口控制、TCP/IP協(xié)議棧、RTP/RTCP、H.323協(xié)議棧、語(yǔ)音編解碼和主控程序這6部分。
TCP/IP協(xié)議棧的實(shí)現(xiàn)
通常編程環(huán)境中,TCP/IP協(xié)議棧的功能是基于操作系統(tǒng)中相應(yīng)的socket機(jī)制實(shí)現(xiàn)的,像以太話機(jī)這種嵌入式系統(tǒng),考慮到操作系統(tǒng)占用資源太大,一般不采用任何操作系統(tǒng)。這樣,只能由用戶編程來(lái)完成任務(wù)調(diào)度、存儲(chǔ)器管理和TCP/IP協(xié)議棧等功能。
在協(xié)議棧開(kāi)發(fā)時(shí),考慮到資源有限,在保證實(shí)現(xiàn)以太電話正常工作的前提下,從兩個(gè)方面進(jìn)行了TCP/IP協(xié)議棧的優(yōu)化,從而使開(kāi)發(fā)得到的協(xié)議棧程序代碼最少,RAM的需求最低。
協(xié)議棧結(jié)構(gòu)的優(yōu)化
根據(jù)系統(tǒng)的實(shí)際需求,只實(shí)現(xiàn)TCP/IP協(xié)議棧的部分協(xié)議,即ARP(地址解析協(xié)議)、IP(互聯(lián)網(wǎng)協(xié)議)、ICMP(互聯(lián)網(wǎng)控制報(bào)文協(xié)議)、UDP(用戶數(shù)據(jù)報(bào)協(xié)議)、TCP(傳輸控制協(xié)議)等5部分。協(xié)議棧的編程采用事件驅(qū)動(dòng)機(jī)制,采用ARP完成對(duì)電話的尋址,通過(guò)對(duì)相應(yīng)的應(yīng)用程序的調(diào)用來(lái)實(shí)現(xiàn)事件響應(yīng)(見(jiàn)圖2)。
圖2 TCP/IP協(xié)議棧實(shí)現(xiàn)過(guò)程示意圖
協(xié)議功能的優(yōu)化
本文簡(jiǎn)化了協(xié)議棧中一些不必要的功能。例如,標(biāo)準(zhǔn)的TCP協(xié)議使用慢啟動(dòng)的滑動(dòng)窗口機(jī)制。在實(shí)現(xiàn)TCP協(xié)議時(shí),考慮到系統(tǒng)所需傳送的信令數(shù)據(jù)很少,為了減少存儲(chǔ)器的使用,TCP只使用單個(gè)窗口。所有的處理只是對(duì)單個(gè)數(shù)據(jù)報(bào)的發(fā)送和確認(rèn),節(jié)約了系統(tǒng)的資源,也使維護(hù)更加方便。同時(shí),話機(jī)系統(tǒng)的突發(fā)事件很少,這樣對(duì)于流量控制可以不做考慮。對(duì)于差錯(cuò)控制,程序處理過(guò)程中只對(duì)信令數(shù)據(jù)設(shè)置重傳機(jī)制,而語(yǔ)音數(shù)據(jù)處理不考慮重傳。
存儲(chǔ)空間的共享
協(xié)議開(kāi)發(fā)中,為了盡量減少對(duì)存儲(chǔ)空間的需求,使用共用緩存區(qū)來(lái)存放輸入、輸出數(shù)據(jù)。其中,RBuff用于存放網(wǎng)絡(luò)接口收到的數(shù)據(jù),SBuff用于存放要發(fā)送的數(shù)據(jù)。各程序之間只提供相互要處理數(shù)據(jù)所在的指針,就可以完成數(shù)據(jù)的傳遞,節(jié)約了大量的存儲(chǔ)空間。
H.323協(xié)議的信令過(guò)程
一個(gè)話機(jī)到話機(jī)的基于H.323協(xié)議的簡(jiǎn)單呼叫建立過(guò)程有5個(gè)階段,即呼叫初始化、建立控制通道、呼叫開(kāi)始、通話和結(jié)束呼叫。
在設(shè)計(jì)中,考慮到系統(tǒng)不同于IP電話網(wǎng)關(guān)系統(tǒng),只需實(shí)現(xiàn)單路連接,同時(shí)考慮到系統(tǒng)資源有限的特點(diǎn),對(duì)H.323協(xié)議棧的實(shí)現(xiàn)進(jìn)行了很大程度地簡(jiǎn)化。其中H.225只實(shí)現(xiàn)4個(gè),即SETUP、ALERTING、CONNECT、RELEASE COMPLETE;RAS實(shí)現(xiàn)基本的6個(gè)功能,也就是網(wǎng)守發(fā)現(xiàn)、端點(diǎn)登記、端點(diǎn)定位、呼叫接納、呼叫退出和狀態(tài)查詢;建立H.245通道只保留了能力交換、主從確定、開(kāi)閉邏輯信道和終止會(huì)話消息。在實(shí)現(xiàn)上述3個(gè)協(xié)議的過(guò)程中,在編碼時(shí)盡量簡(jiǎn)化,解碼時(shí)保留。
以太話機(jī)中語(yǔ)音的處理過(guò)程
以太電話機(jī)進(jìn)行語(yǔ)音傳輸,要完成以下幾個(gè)過(guò)程:模擬語(yǔ)音首先經(jīng)CODEC編碼為64KB的PCM碼,經(jīng)壓縮形成語(yǔ)音數(shù)據(jù);語(yǔ)音數(shù)據(jù)由RTP封裝后交由UDP封裝;攜帶語(yǔ)音數(shù)據(jù)的UDP數(shù)據(jù)報(bào)在IP層被封裝為IP包;最后IP包通過(guò)以太網(wǎng)接口程序形成以太幀發(fā)送至以太網(wǎng)傳送;攜帶語(yǔ)音數(shù)據(jù)的以太網(wǎng)幀在目的話機(jī)被以太網(wǎng)卡接收并拆包恢復(fù)為語(yǔ)音數(shù)據(jù),其處理是語(yǔ)音發(fā)送的逆過(guò)程,語(yǔ)音數(shù)據(jù)解碼成模擬語(yǔ)音送至話筒。
系統(tǒng)性能優(yōu)化
嵌入式系統(tǒng)在開(kāi)發(fā)中的優(yōu)化十分重要。根據(jù)處理器的性能,盡可能地提高代碼運(yùn)行速率,減少代碼和數(shù)據(jù)存儲(chǔ)空間。雖然C編譯器提供了一定的代碼優(yōu)化,但編譯器的優(yōu)化僅涉及執(zhí)行速度和代碼大小的平衡,不能使程序達(dá)到小而精,因而必須采取一定的優(yōu)化方案。系統(tǒng)調(diào)試中,在確保系統(tǒng)穩(wěn)定工作的基礎(chǔ)上,采取了以下措施進(jìn)行系統(tǒng)優(yōu)化。
對(duì)于代碼優(yōu)化主要采取以下措施:
1、根據(jù)發(fā)生頻率調(diào)整條件跳轉(zhuǎn)語(yǔ)句,提高代碼運(yùn)行速率。例如程序中使用了很多switch-case、if語(yǔ)句,優(yōu)化時(shí)對(duì)具體情況按照發(fā)生的相對(duì)頻率排序,即把最常發(fā)生的情況放在第一位,最不可能發(fā)生的情況放在最后,這樣會(huì)減少代碼的平均執(zhí)行時(shí)間,從而有效提高程序的運(yùn)行速率。
2、盡量使用全局變量,減少函數(shù)調(diào)用參數(shù),從而簡(jiǎn)化函數(shù)調(diào)用前參數(shù)入棧和函數(shù)完成后參數(shù)出棧的過(guò)程。
3、努力減小代碼的大小。
對(duì)于存儲(chǔ)區(qū)優(yōu)化問(wèn)題,使用了下面方法:
1、使用前述協(xié)議棧開(kāi)發(fā)共用緩沖區(qū)。
2、編程時(shí)將一些固定的數(shù)據(jù)定義為代碼類型,同樣可以有效地減少存儲(chǔ)區(qū)的使用量。
通過(guò)以上措施以及對(duì)協(xié)議實(shí)現(xiàn)的具體優(yōu)化,程序大小從150KB優(yōu)化到70KB以內(nèi),系統(tǒng)的響應(yīng)速度也得到較大提高。由此可以看出,對(duì)程序的合理優(yōu)化,對(duì)提高程序運(yùn)行的穩(wěn)定性和系統(tǒng)處理速度,都可以起到至關(guān)重要的作用。
結(jié)語(yǔ)
SDA80D51芯片的集成度高,設(shè)計(jì)電路時(shí)省去了許多模塊,簡(jiǎn)化了硬件設(shè)計(jì),便于調(diào)試檢測(cè)。同時(shí)通過(guò)對(duì)協(xié)議棧的優(yōu)化,使系統(tǒng)達(dá)到了預(yù)期的低成本、高可靠性?!?/P>
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論