新聞中心

        EEPW首頁 > 網絡與存儲 > 設計應用 > 基于SDA80D51的以太電話機的設計

        基于SDA80D51的以太電話機的設計

        ——
        作者: 時間:2006-06-05 來源: 收藏

        摘要:本文提出了一種新型以太電話機的設計,采用SDA80D51芯片作為主控單元,同時使用RTL8019AS作為網絡接口模塊,實現了高度集成、具有較高性價比的話機。同時,還針對嵌入式系統硬件資源受限的特點,提出了一系列優化代碼和數據存儲空間的方法和技巧。

        引言

        VoIP(Voice over IP)是利用IP網絡作為傳輸載體實現語音通信的技術,以太電話機則是以VoIP為基礎實現的語音通信終端。以太電話機價格相對昂貴和話音質量方面的問題是目前開發工作的難點。本設計是基于英飛凌科技公司的SDA80D51芯片實現的,該話機具有集成度高、結構簡單、成本低等特點,具有較高推廣價值。

        硬件設計

        話機采用SDA80D51芯片和以太網接口芯片RTL8019AS實現。由于采用了高集成的SDA80D51芯片,使系統硬件電路結構簡單,整體硬件成本低廉、集成度較高。考慮到協議代碼的存儲需求,使用一個Flash作為擴展存儲單元存放代碼,同時還設計了撥號鍵盤到控制單元的控制電路。硬件的設計還可以根據不同的需求,進行相應的調整,以實現其它的增值業務功能。

        SDA80D5l簡介

        SDA80D51芯片將16位DSP和增強型微處理器(8051微處理器的擴展版本)高度集成,并同時集成ADC與DAC,是一種面向語音處理的專用芯片。芯片同時提供一個內存控制單元MMU和片上104kB的RAM。它具有程序和數據分開的總線結構、流水線操作、單周期硬件乘法器和適合數字信號處理的高效指令集。此芯片的C編譯能力很強,匯編出的目標代碼效率會更高。

        語音信號在SDA80D51集成的語音采樣接口模塊進行A/D和D/A轉換,語音的壓縮處理則由DSP模塊進行,對傳輸的語音數據打包是由C51模塊完成的。編解碼壓縮處理后由控制模塊進行對語音的接收/發送控制,同時,控制模塊還要完成對整個系統的控制工作。

        網絡接口控制模塊

        網絡接口控制模塊采用Realtek公司的以太網控制芯片RTL8019AS。該芯片與NE2000兼容,支持8位、16位數據總線;全雙工,收發可同時達到10Mbps,有睡眠模式,可有效地降低功耗;內置16kB的SRAM用于收發緩沖,可減輕主處理器在數據帶寬上的壓力;可連接同軸電纜或雙絞線,并可自動檢測所連接的介質。

        系統使用RTL8019AS來實現以太網媒介訪問層(MAC)和物理層(PHY)的功能,包括MAC數據幀的收發、地址識別、CRC編碼校驗、超時重傳、鏈路完整性測試、信號極性檢測糾正等。主處理器在RTL8019AS的外部總線上讀寫MAC幀。其中,接收控制器用于將接收的串行數據拼成字節送到CRC校驗單元,發送控制器則是將送來的字節送到CRC編碼單元并逐個按位移出;CRC邏輯在接收時對輸入的數據進行CRC校驗,發送時對幀數據產生CRC校驗序列;地址識別邏輯對接收幀的目的地址與預先設置的本地物理地址進行比較,如不符合要求則拒收。RTL8019AS還使用內部存儲緩沖器對與核心控制單元進行的數據交換進行緩沖,以優化系統的數據傳輸速率。

        軟件設計

        系統的軟件是基于SDA80D51設計開發的。話機軟件結構如圖1所示。


        圖1 以太電話機軟件組成框圖


        系統軟件開發以C語言編程為主,對占用系統資源比較大的部分使用匯編語言來完成。程序開發主要完成網絡接口控制、TCP/IP協議棧、RTP/RTCP、H.323協議棧、語音編解碼和主控程序這6部分。

        TCP/IP協議棧的實現

        通常編程環境中,TCP/IP協議棧的功能是基于操作系統中相應的socket機制實現的,像以太話機這種嵌入式系統,考慮到操作系統占用資源太大,一般不采用任何操作系統。這樣,只能由用戶編程來完成任務調度、存儲器管理和TCP/IP協議棧等功能。

        在協議棧開發時,考慮到資源有限,在保證實現以太電話正常工作的前提下,從兩個方面進行了TCP/IP協議棧的優化,從而使開發得到的協議棧程序代碼最少,RAM的需求最低。

        協議棧結構的優化
        根據系統的實際需求,只實現TCP/IP協議棧的部分協議,即ARP(地址解析協議)、IP(互聯網協議)、ICMP(互聯網控制報文協議)、UDP(用戶數據報協議)、TCP(傳輸控制協議)等5部分。協議棧的編程采用事件驅動機制,采用ARP完成對電話的尋址,通過對相應的應用程序的調用來實現事件響應(見圖2)。


        圖2  TCP/IP協議棧實現過程示意圖

        協議功能的優化
        本文簡化了協議棧中一些不必要的功能。例如,標準的TCP協議使用慢啟動的滑動窗口機制。在實現TCP協議時,考慮到系統所需傳送的信令數據很少,為了減少存儲器的使用,TCP只使用單個窗口。所有的處理只是對單個數據報的發送和確認,節約了系統的資源,也使維護更加方便。同時,話機系統的突發事件很少,這樣對于流量控制可以不做考慮。對于差錯控制,程序處理過程中只對信令數據設置重傳機制,而語音數據處理不考慮重傳。

        存儲空間的共享
        協議開發中,為了盡量減少對存儲空間的需求,使用共用緩存區來存放輸入、輸出數據。其中,RBuff用于存放網絡接口收到的數據,SBuff用于存放要發送的數據。各程序之間只提供相互要處理數據所在的指針,就可以完成數據的傳遞,節約了大量的存儲空間。

        H.323協議的信令過程

        一個話機到話機的基于H.323協議的簡單呼叫建立過程有5個階段,即呼叫初始化、建立控制通道、呼叫開始、通話和結束呼叫。

        在設計中,考慮到系統不同于IP電話網關系統,只需實現單路連接,同時考慮到系統資源有限的特點,對H.323協議棧的實現進行了很大程度地簡化。其中H.225只實現4個,即SETUP、ALERTING、CONNECT、RELEASE COMPLETE;RAS實現基本的6個功能,也就是網守發現、端點登記、端點定位、呼叫接納、呼叫退出和狀態查詢;建立H.245通道只保留了能力交換、主從確定、開閉邏輯信道和終止會話消息。在實現上述3個協議的過程中,在編碼時盡量簡化,解碼時保留。

        以太話機中語音的處理過程

        以太電話機進行語音傳輸,要完成以下幾個過程:模擬語音首先經CODEC編碼為64KB的PCM碼,經壓縮形成語音數據;語音數據由RTP封裝后交由UDP封裝;攜帶語音數據的UDP數據報在IP層被封裝為IP包;最后IP包通過以太網接口程序形成以太幀發送至以太網傳送;攜帶語音數據的以太網幀在目的話機被以太網卡接收并拆包恢復為語音數據,其處理是語音發送的逆過程,語音數據解碼成模擬語音送至話筒。

        系統性能優化

        嵌入式系統在開發中的優化十分重要。根據處理器的性能,盡可能地提高代碼運行速率,減少代碼和數據存儲空間。雖然C編譯器提供了一定的代碼優化,但編譯器的優化僅涉及執行速度和代碼大小的平衡,不能使程序達到小而精,因而必須采取一定的優化方案。系統調試中,在確保系統穩定工作的基礎上,采取了以下措施進行系統優化。

        對于代碼優化主要采取以下措施:
        1、根據發生頻率調整條件跳轉語句,提高代碼運行速率。例如程序中使用了很多switch-case、if語句,優化時對具體情況按照發生的相對頻率排序,即把最常發生的情況放在第一位,最不可能發生的情況放在最后,這樣會減少代碼的平均執行時間,從而有效提高程序的運行速率。
        2、盡量使用全局變量,減少函數調用參數,從而簡化函數調用前參數入棧和函數完成后參數出棧的過程。
        3、努力減小代碼的大小。

        對于存儲區優化問題,使用了下面方法:
        1、使用前述協議棧開發共用緩沖區。
        2、編程時將一些固定的數據定義為代碼類型,同樣可以有效地減少存儲區的使用量。
        通過以上措施以及對協議實現的具體優化,程序大小從150KB優化到70KB以內,系統的響應速度也得到較大提高。由此可以看出,對程序的合理優化,對提高程序運行的穩定性和系統處理速度,都可以起到至關重要的作用。

        結語

        SDA80D51芯片的集成度高,設計電路時省去了許多模塊,簡化了硬件設計,便于調試檢測。同時通過對協議棧的優化,使系統達到了預期的低成本、高可靠性。■

        tcp/ip相關文章:tcp/ip是什么




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 虎林市| 新郑市| 西平县| 突泉县| 常州市| 巫山县| 汤原县| 称多县| 松阳县| 兴义市| 榆林市| 扬州市| 蒙城县| 韶关市| 遵义县| 商南县| 永仁县| 定边县| 涪陵区| 梅州市| 罗源县| 葫芦岛市| 青田县| 深泽县| 通江县| 邳州市| 佛教| 安溪县| 疏勒县| 云安县| 武川县| 青川县| 青浦区| 辰溪县| 历史| 额尔古纳市| 乐业县| 宕昌县| 饶阳县| 肇源县| 德清县|