基于ADM5120的無線VoIP系統設計
VoIP(Voice over IP)由于其在IP網絡中實現語音通信,促進了網絡資源的利用,降低了語音業務成本,在全球范圍內得到了迅速的發展。802.11無線局域網(WLAN)將用戶從有線的網絡連接中解放出來。在企業中部署WLAN網絡之后建立VoIP的應用,并不需要對現有的網絡進行改造就能滿足在企業內部進行語音通信的需求,并且滿足下一代移動通信應用在單一網絡內進行數據、語音、多媒體的傳輸的發展方向。本文將VoIP和WLAN(Wireless LAN)結合到一起,在MIPS(Microprocessor without Interlocked PipelineStages)架構的處理器ADM5120上實現了在無線局域網內進行IP通話的功能。系統以終端的形式進行通信,可移動性強。
1 系統硬件的設計
1.1 硬件的整體架構
系統硬件的整體架構設計如圖1所示。系統硬件主要由五部分組成:ADM5120主處理器部分、通話控制部分、無線子卡部分、存儲部分和外設連接部分。通話控制部分采用Infineon公司語音芯片VINETIC-2CPE,Version 2.1(PEB3322)為子處理器,外接A/D,D/A轉換功能的用戶接口電路SLIC-DC PEB4268,與存儲部分一起構成語音實時處理骨架;無線子卡部分采用Atheros公司的WMIA-165G 802.11g Mini PCI模塊,并用Madwifi驅動無線子卡;存儲部分使用2塊SDRAM存儲器和1塊NOR FLASH存儲器;外設連接部分包括一個WAN口和四個LAN口、Mini-PCI接口、輸出模擬電話信號的RJ-11接口,以及用于調試的RS 232串口。
1.2 ADM5120主處理器
德國Infineon公司的ADM5120是一款基于哈佛體系結構的SoC(片上系統)的嵌入式處理器,具有5級流水線,并使用了32位MIPS指令集。同時ADM5120還是一款典型的寄存器型微處理器,其配置了32個通用寄存器和一對存儲64位數據的寄存器Hi和Lo以及異常PC寄存器,其中Hi和Lo寄存器用于存放定點乘法的結果。ADM5120中還內置了32/16位MIPS32 4KEC處理器,其采用TLB(TranslationLookaside Buffer)實現了內存管理和流水線中的異常處理功能,并使用馮·諾依曼結構在內存和寄存器之間傳輸數據,提高了數據的傳輸效率,加快了程序的執行速度。另外,ADM5120還集成了多種外圍部件,主要有:PCI(Peripheral Component Interconnect)總線接口,5個100 Mb/s的以太網接口,并且還配置了ADM5120內置的PHY芯片,內嵌了16 MB/85 MHzSDRAM存儲器,給系統設計提供了很大的方便。
在本系統中,微控制器接口(非緩沖接口)與VINETIC,FALSH-RAM,SDRAM并行連接,并分別使用8 B,16 B,32 B的總線寬度。ADM5120通過微控制器接口控制與之相連的VINETIC并將語音數據從WLAN接口傳給VINETIC,反之亦然。ADM5120的通用輸入/輸出端口GPIOs控制VINETIC的復位信號并為VINETIC生成片選信號,同時GPIOs還作為VINETIC準備功能和中斷信號的輸入。而連接到ADM5120的LED指示燈顯示WAN口和LAN口連接狀態以及模擬輸出接口的模擬線路狀態。
1.3 VINETIC語音模塊
VINETIC(Voice and Internet EnhanceTelephony Interface Circuit)是Infineon公司的一款語音處理模塊,它將編解碼器和語音處理功能集成在一起,能達到與傳統語音服務相同的語音質量。VINETIC處理模擬電話信號,語音壓縮包,并提供實時壓縮包的緩沖,具有自適應回聲抵消,靜音檢測,DTMF信號產生、譯碼等功能。
VINETIC芯片的主接口電路如圖2所示。其中4和5為片選輸入端;AD0~AD7:雙向的輸入/輸出信號,相應的引腳有3種運行狀態:低電平、高電平或高阻抗,當CSQ為高電平時,DOUT呈高阻狀態,此時需要外接10 kΩ的上拉電阻;28和29輸出數字電平,漏極開路,相應的引腳有2種運行狀態:低電平有效或三態,并允許多個設備共享為線或。芯片供電電路部分:66外接鎖相環路,此鎖相環重要地影響到芯片的總性能,因此應特別注意對鎖相環供電的濾波器;64將鎖相環接地。
1.4 存儲模塊
系統存儲模塊包括1塊NOR FLASH芯片MX29LV320和2塊SDRAM芯片W986432DH。MX29LV320的引腳分布如圖3所示。
其中A0~A20:地址輸入;DQ0~DQ14:數據輸入/輸出;DQ15/A-1:DQ15(按字模式進行數據的輸入/輸出),A-1(按字節模式進行最低有效位地址輸入);CE:切片啟動輸入;WE:寫啟動輸入;OE:輸出啟動輸入;RESET:硬件重啟引腳,低電平有效;RY/BY:讀/忙輸出,連接到主處理器ADM5120的RDY引腳以提高速度。
W986432DH的引腳分布如圖4所示。其中A0~A10:地址引腳;BS0和BS1:存儲體選擇;DQ0~DQ31:數據輸入/輸出的復用引腳;RAS:行地址選通;CAS:列地址選通;WE:允許寫入,命令輸入,當在RAS時鐘上升沿取樣時,CAS和WE確定操作將被執行;DQM0~DQM3:輸入/輸出掩碼,當DQM在讀周期高電平采樣時輸出緩沖區置于高阻抗(2個時延),而在寫周期采樣將零時延地阻止寫操作;CLK:在時鐘上升沿抽樣輸入;CKE:時鐘啟動,當CKE為低時,進入掉電模式、暫停模式或自我充電模式。
2 系統軟件的設計與實現
系統軟件設計的整體架構如圖5所示,其在無線局域網內實現了基于ADM5120的UDP方式點對點通訊和廣播通訊。UDP(User Datagram Protocol,用戶數據報協議)主要用來支持那些需要在計算機之間傳輸數據的網絡應用。眾多的客戶/服務器模式的網絡應用例如網絡視頻會議系統等都需要使用UDP協議。UDP協議直接位于IP(網際協議)協議的頂層,屬于網絡協議中的傳輸層協議。由于UDP協議不需建立連接,具有效率高、速度快和占用資源少等優點,應用于消息通信和實時系統中可以提高系統傳輸數據的效率。UDP具有組播和廣播功能,是分發信息的一個理想協議。本系統還移植了一種基于ADM5120的嵌入式Web服務器boa,實現了對VoIP系統進行基于B/S方式的Web配置。
2.1 點對點通訊的實現
在本系統中,在一個網段內的任意兩個應用程序之間可以進行全雙工通信,每個應用程序既可做為服務器又可做為客戶端。其UDP編程步驟如圖6所示,以下是兩個應用程序A和B之間進行點對點通訊的具體實現過程:
(1)雙方分別建立socket,調用socket函數:
s=socket(PF_INET,SOCK_DGRAM,0)
SOCK_DGRAM表示套接字類型為數據報套接字,即采用UDP協議進行通信。
(2)綁定已設置好的自己的地址和端口信息,調用bind函數:
bind(s,(struct sockaddr*)&my_addr,sizeof(structsockaddr))
(3)將select函數置于阻塞狀態,直到監視文件描述符集合rfds中某個文件描述符發生變化為止:
select(pCtrl->rwd+1,&rfds,IFX_NULL,IFX_NULL,NULL)
(4)數據傳輸:sendto()和recvfrom()用于在無連接的數據報socket方式下進行數據傳輸。由于本地socket并沒有與遠端機器建立連接,所以在發送數據時應指明目的地址。如圖6所示,A作為發送方,通過其套接字用函數sendto()將其服務請求數據發送到接收方B的指定端口,B通過其套接字用函數recvfrom()接收數據,處理好服務請求后又將服務應答發回A,此時A便成了接收方,A接收應答后還可繼續發送數據給B。
2.2 廣播通訊的實現
廣播和多播都用于實現向多個接收者發送UDP數據報,但是廣播不像多播那樣在接收端有復雜的控制過程,因而實現比多播簡單的多。以下廣播通訊的實現均在點對點通訊的基礎上實現的。
在發送方,只需要設置套接字socket的選項為允許發送廣播,然后在發送時指定目的IP為廣播地址即可。具體地,允許socket廣播通過setsockopt函數設置廣播選項來實現,當setsockopt參數optname為SO_BROADCAST時,表示打開或禁止從該socket廣播,當參數optval為1時允許廣播,為0時禁止廣播。
系統編程實現廣播的部分源碼為:
int bBroadcast=1:
setsockopt(pCtrl-->nAdminSocket,SOL_SOCKET,SO_BROADCAST,&bBroadcast,sizeof(bBroadcast));
setsockopt(pConn-->nUsedSocket,SOL_SOCKET,SO_BROADCAST,&bBroadcast,sizeof(bBroadcast));
tO_addr.sin_addr.s_addr=inet_addr(WIRLESS_IP_BROADCAST);
/*WIRLESS_IP_BROADCAST為廣播地址,其值是將網絡接口(本系統為ath0)IP地址的主機ID部分設置為全1,網絡ID部分不變而得到*/
tO_addr.sin_family=AF_INET;
據文獻[7]所講,在接收方,一般不需做任何改動即可收到廣播。但在本系統實現的實驗過程中,當將socket綁定到非INADDR_ANY的IP地址時,接收方無法收到廣播,并且沒有任何錯誤指示,即需要綁定本地端口地址到通配地址INADDR_ANY才可接收廣播:
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
另外,本系統還實現了廣播強插功能,即不管用戶當前處于摘機、撥號狀態,還是處于通話狀態,當有廣播來電時,都斷開原來的連接而與廣播主叫建立新的連接(用戶不用掛機)。為了防止通話混亂,本系統設定同一時刻只有擁有廣播控制權的用戶有發言權,而其他用戶能聽不能說,當其他用戶想發言時,只要按下“*”鍵就搶到了廣播控制權,最后只有當擁有廣播控制權的用戶掛機時,廣播才停止,而任一其他用戶掛機,不影響廣播通訊繼續進行。
系統編程實現廣播強插的部分源碼見表1和表2。
3 結 語
該系統設計完成后,成功地應用于常德市某一電廠,進行生產調度,系統能實現點對點通訊和廣播通訊,并且通話質量良好,基本無雜音和抖動。
本系統因自帶無線網卡可以自組織網絡,它可以作為一種無線指令調度機被應用到通信蔽塞的工廠,另外還可外接喇叭自動接聽電話,機器操作員不用停下手中的工作就可照指令進行相應的操作。另外,本系統應用可拓展性好,如:系統可通過PCM通道進行FXO連接從而實現與傳統PSTN互通(見圖1);在本系統上移植SIP協議棧便可實現與WIFI手機互通;將本系統整合到Ad Hoc網絡中,基于Ad Ioc網絡的各類移動終端設備便可應運而生,因此本系統具有廣闊的市場前景。
評論