摘 要:用Infineon公司的MIPS架構處理器ADM5120設計并實現(xiàn)了一個無線VoIP系統(tǒng)。從硬件和軟件兩個方面進行系統(tǒng)設計:首先對系統(tǒng)硬件三大主要模塊即:ADM5120主處理器、VINETIC語音模塊、存儲模塊分別進行了研討;接著描述了如何在無線局域網(wǎng)內(nèi)實現(xiàn)UDP方式點對點通訊和廣播通訊。無線VoIP系統(tǒng)實現(xiàn)后經(jīng)現(xiàn)場測試證明其性能可靠,價格低廉,具有廣闊的應用前景。
關鍵詞:ADM5120;VoIP;UDP;點對點;廣播
中圖分類號:TP3021 文獻標識碼:A
文章編號:1004-373X(2010)03-078-05
Design of Wireless VoIP System Based on ADM5120
TAN Xia,WANG Ling
(College of Physics and Information Science,Hunan Normal University,Changsha,410081,China)
Abstract:A description of the design and implementation of a wireless VoIP system based on the ADM5120,which is MIPS processor of Infineon firm are proposed.The system is designed from both hardware and software views:Firstly,it discusses three main modules of the hardware system:ADM5120 host processor,VINETIC voice module and memory module.Secondly,it describes how to implement the UDP point to point communication and broadcasting communication in the wireless local network.After the field tests,the wireless VoIP system is proved to be reliable and inexpensive,and it has a good prospect of application.
Keywords:ADM5120;VoIP;UDP;point to point;broadcasting
0 引 言
VoIP[1](Voice over IP)由于其在IP網(wǎng)絡中實現(xiàn)語音通信,促進了網(wǎng)絡資源的利用,降低了語音業(yè)務成本,在全球范圍內(nèi)得到了迅速的發(fā)展。802.11無線局域網(wǎng)(WLAN)將用戶從有線的網(wǎng)絡連接中解放出來。在企業(yè)中部署WLAN網(wǎng)絡之后建立VoIP的應用,并不需要對現(xiàn)有的網(wǎng)絡進行改造就能滿足在企業(yè)內(nèi)部進行語音通信的需求,并且滿足下一代移動通信應用在單一網(wǎng)絡內(nèi)進行數(shù)據(jù)、語音、多媒體的傳輸?shù)陌l(fā)展方向。本文將VoIP和WLAN(Wireless LAN)結合到一起[2],在MIPS(Microprocessor without Interlocked Pipeline Stages)架構的處理器ADM5120上實現(xiàn)了在無線局域網(wǎng)內(nèi)進行IP通話的功能。系統(tǒng)以終端的形式進行通信,可移動性強。
1 系統(tǒng)硬件的設計
1.1 硬件的整體架構
系統(tǒng)硬件的整體架構設計如圖1所示。系統(tǒng)硬件主要由五部分組成:ADM5120主處理器部分、通話控制部分、無線子卡部分、存儲部分和外設連接部分。通話控制部分采用Infineon公司語音芯片VINETIC-2CPE,Version 2.1(PEB3322)為子處理器,外接A/D,D/A轉換功能的用戶接口電路SLIC-DC PEB4268,與存儲部分一起構成語音實時處理骨架;無線子卡部分采用Atheros公司的WMIA-165G 802.11g Mini PCI模塊,并用Madwifi驅(qū)動無線子卡;存儲部分使用2塊SDRAM存儲器和1塊NOR FLASH存儲器;外設連接部分包括一個WAN口和四個LAN口、Mini-PCI接口、輸出模擬電話信號的RJ-11接口,以及用于調(diào)試的RS 232串口。
1.2 ADM5120主處理器
德國Infineon公司的ADM5120[3]是一款基于哈佛體系結構的SoC(片上系統(tǒng))的嵌入式處理器,具有5級流水線,并使用了32位MIPS指令集。同時ADM5120還是一款典型的寄存器型微處理器,其配置了32個通用寄存器和一對存儲64位數(shù)據(jù)的寄存器Hi和Lo以及異常PC寄存器,其中Hi和Lo寄存器用于存放定點乘法的結果。ADM5120中還內(nèi)置了32/16位MIPS32 4KEC處理器,其采用TLB(Translation Lookaside Buffer)實現(xiàn)了內(nèi)存管理和流水線中的異常處理功能,并使用馮#8226;諾依曼結構在內(nèi)存和寄存器之間傳輸數(shù)據(jù),提高了數(shù)據(jù)的傳輸效率,加快了程序的執(zhí)行速度。另外,ADM5120還集成了多種外圍部件,主要有:PCI(Peripheral Component Interconnect)總線接口,5個100 Mb/s的以太網(wǎng)接口,并且還配置了ADM5120內(nèi)置的PHY芯片,內(nèi)嵌了16 MB/85 MHz SDRAM存儲器,給系統(tǒng)設計提供了很大的方便。
圖1 無線VoIP系統(tǒng)硬件架構設計
在本系統(tǒng)中,微控制器接口(非緩沖接口)與VINETIC,F(xiàn)ALSH-RAM,SDRAM并行連接,并分別使用8 B,16 B,32 B的總線寬度。ADM5120通過微控制器接口控制與之相連的VINETIC并將語音數(shù)據(jù)從WLAN接口傳給VINETIC,反之亦然。ADM5120的通用輸入/輸出端口GPIOs控制VINETIC的復位信號并為VINETIC生成片選信號,同時GPIOs還作為VINETIC準備功能和中斷信號的輸入。而連接到ADM5120的LED指示燈顯示W(wǎng)AN口和LAN口連接狀態(tài)以及模擬輸出接口的模擬線路狀態(tài)。
1.3 VINETIC語音模塊
VINETIC[4] (Voice and Internet Enhance Telephony Interface Circuit)是Infineon公司的一款語音處理模塊,它將編解碼器和語音處理功能集成在一起,能達到與傳統(tǒng)語音服務相同的語音質(zhì)量。VINETIC 處理模擬電話信號,語音壓縮包,并提供實時壓縮包的緩沖,具有自適應回聲抵消,靜音檢測,DTMF信號產(chǎn)生、譯碼等功能。
VINETIC芯片的主接口電路如圖2所示。其中4和5為片選輸入端;AD0~AD7:雙向的輸入/輸出信號,相應的引腳有3種運行狀態(tài):低電平、高電平或高阻抗,當CSQ為高電平時,DOUT呈高阻狀態(tài),此時需要外接10 kΩ的上拉電阻;28和29輸出數(shù)字電平,漏極開路,相應的引腳有2種運行狀態(tài):低電平有效或三態(tài),并允許多個設備共享為線或。芯片供電電路部分:66外接鎖相環(huán)路,此鎖相環(huán)重要地影響到芯片的總性能,因此應特別注意對鎖相環(huán)供電的濾波器;64將鎖相環(huán)接地。
1.4 存儲模塊
系統(tǒng)存儲模塊包括1塊NOR FLASH芯片MX29LV320和2塊SDRAM芯片W986432DH。MX29LV320的引腳分布如圖3所示。
其中A0~A20:地址輸入;DQ0~DQ14:數(shù)據(jù)輸入/輸出;DQ15/A-1:DQ15(按字模式進行數(shù)據(jù)的輸入/輸出),A-1(按字節(jié)模式進行最低有效位地址輸入);CE:切片啟動輸入;WE:寫啟動輸入;OE:輸出啟動輸入;RESET:硬件重啟引腳,低電平有效;RY/BY:讀/忙輸出,連接到主處理器ADM5120的RDY引腳以提高速度。
W986432DH的引腳分布如圖4所示。其中A0~A10:地址引腳;BS0和BS1:存儲體選擇;DQ0~DQ31:數(shù)據(jù)輸入/輸出的復用引腳;RAS:行地址選通;CAS:列地址選通;WE:允許寫入,命令輸入,當在RAS時鐘上升沿取樣時,CAS和WE確定操作將被執(zhí)行;DQM0~DQM3:輸入/輸出掩碼,當DQM在讀周期高電平采樣時輸出緩沖區(qū)置于高阻抗(2個時延),而在寫周期采樣將零時延地阻止寫操作;CLK:在時鐘上升沿抽樣輸入;CKE:時鐘啟動,當CKE為低時,進入掉電模式、暫停模式或自我充電模式。
圖2 主接口電路
圖3 NOR FLASH芯片(MX29LV320)
圖4 SDRAM芯片(W986432DH)
2 系統(tǒng)軟件的設計與實現(xiàn)
系統(tǒng)軟件設計的整體架構如圖5所示,其在無線局域網(wǎng)內(nèi)實現(xiàn)了基于ADM5120的UDP方式點對點通訊和廣播通訊。UDP[5](User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)主要用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡應用。眾多的客戶/服務器模式的網(wǎng)絡應用例如網(wǎng)絡視頻會議系統(tǒng)等都需要使用UDP協(xié)議。UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層,屬于網(wǎng)絡協(xié)議中的傳輸層協(xié)議。由于UDP協(xié)議不需建立連接,具有效率高、速度快和占用資源少等優(yōu)點,應用于消息通信和實時系統(tǒng)中可以提高系統(tǒng)傳輸數(shù)據(jù)的效率。UDP具有組播和廣播功能,是分發(fā)信息的一個理想?yún)f(xié)議。本系統(tǒng)還移植了一種基于ADM5120的嵌入式Web服務器boa,實現(xiàn)了對VoIP系統(tǒng)進行基于B/S方式的Web配置。
圖5 無線VoIP系統(tǒng)軟件架構設計
2.1 點對點通訊的實現(xiàn)[6]
在本系統(tǒng)中,在一個網(wǎng)段內(nèi)的任意兩個應用程序之間可以進行全雙工通信,每個應用程序既可做為服務器又可做為客戶端。其UDP編程步驟如圖6所示,以下是兩個應用程序A和B之間進行點對點通訊的具體實現(xiàn)過程:
(1) 雙方分別建立socket,調(diào)用socket函數(shù):
s=socket(PF_INET,SOCK_DGRAM,0)
SOCK_DGRAM表示套接字類型為數(shù)據(jù)報套接字,即采用UDP協(xié)議進行通信。
(2) 綁定已設置好的自己的地址和端口信息,調(diào)用bind函數(shù):
bind(s,(struct sockaddr *) my_addr,sizeof(struct sockaddr))
(3) 將select函數(shù)置于阻塞狀態(tài),直到監(jiān)視文件描述符集合rfds中某個文件描述符發(fā)生變化為止:
select(pCtrl->rwd + 1,rfds,IFX_NULL,IFX_NULL,NULL)
(4) 數(shù)據(jù)傳輸:sendto()和recvfrom()用于在無連接的數(shù)據(jù)報socket方式下進行數(shù)據(jù)傳輸。由于本地socket并沒有與遠端機器建立連接,所以在發(fā)送數(shù)據(jù)時應指明目的地址。如圖6所示,A作為發(fā)送方,通過其套接字用函數(shù)sendto()將其服務請求數(shù)據(jù)發(fā)送到接收方B的指定端口,B通過其套接字用函數(shù)recvfrom()接收數(shù)據(jù),處理好服務請求后又將服務應答發(fā)回A,此時A便成了接收方,A接收應答后還可繼續(xù)發(fā)送數(shù)據(jù)給B。
圖6 UDP編程步驟
2.2 廣播通訊的實現(xiàn)[7]
廣播和多播都用于實現(xiàn)向多個接收者發(fā)送UDP數(shù)據(jù)報,但是廣播不像多播那樣在接收端有復雜的控制過程,因而實現(xiàn)比多播簡單的多。以下廣播通訊的實現(xiàn)均在點對點通訊的基礎上實現(xiàn)的。
在發(fā)送方,只需要設置套接字socket的選項為允許發(fā)送廣播,然后在發(fā)送時指定目的IP為廣播地址即可。具體地,允許socket廣播通過setsockopt函數(shù)設置廣播選項來實現(xiàn),當setsockopt參數(shù)optname為SO_BROADCAST時,表示打開或禁止從該socket廣播,當參數(shù)optval為1時允許廣播,為0時禁止廣播。
系統(tǒng)編程實現(xiàn)廣播的部分源碼為:
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為廣播地址,其值是將網(wǎng)絡接口(本系統(tǒng)為ath0)IP地址的主機ID部分設置為全1,網(wǎng)絡ID部分不變而得到*/
to_addr.sin_family =AF_INET;
據(jù)文獻[7]所講,在接收方,一般不需做任何改動即可收到廣播。但在本系統(tǒng)實現(xiàn)的實驗過程中,當將socket綁定到非INADDR_ANY的IP地址時,接收方無法收到廣播,并且沒有任何錯誤指示,即需要綁定本地端口地址到通配地址INADDR_ANY才可接收廣播:
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
另外,本系統(tǒng)還實現(xiàn)了廣播強插功能,即不管用戶當前處于摘機、撥號狀態(tài),還是處于通話狀態(tài),當有廣播來電時,都斷開原來的連接而與廣播主叫建立新的連接(用戶不用掛機)。為了防止通話混亂,本系統(tǒng)設定同一時刻只有擁有廣播控制權的用戶有發(fā)言權,而其他用戶能聽不能說,當其他用戶想發(fā)言時,只要按下“*”鍵就搶到了廣播控制權,最后只有當擁有廣播控制權的用戶掛機時,廣播才停止,而任一其他用戶掛機,不影響廣播通訊繼續(xù)進行。
系統(tǒng)編程實現(xiàn)廣播強插的部分源碼見表1和表2。
表1 斷開原來連接部分(事件EVENT=US_INCBROADCAST,有廣播呼入)
Old State US_(舊狀態(tài))New State US_(新狀態(tài))Action during transition
(當發(fā)生廣播呼入事件時,從舊狀態(tài)轉換到新狀態(tài)的源碼實現(xiàn))
DIALTONE
(撥號音)ACTIVE_RX
(可接收)disable dialtone on local phone,set line to standby mode:ioctl(fd_data_ch_old,IFX_TAPI_TONE_LOCAL_PLAY,NO_PARAM);ioctl(fd_phone_ch_old,IFX_TAPI_LINE_FEED_SET,IFX_TAPI_LINE_FEED_STANDBY);
RINGING
(振鈴)READY
(準備)stop ringing on local phone,clear phone(stop encoder/decoder),set line to standby mode:ioctl(fd_phone_ch_old,IFX_TAPI_RING_STOP,NO_PARAM);
TAPIDEMO_ClearPhone(pCtrl,tmpphone,tmpconn,US_READY,fd_data_ch_old,tmpphone->pBoard)(包括停止編解碼);
ioctl(fd_phone_ch_old,IFX_TAPI_LINE_FEED_SET,IFX_TAPI_LINE_FEED_STANDBY);
RINGBACK
(回鈴音)ACTIVE_RX
(可接收)disable ringback tone on local phone,clear phone(stop encoder/decoder),set line to standby mode:
ioctl(fd_data_ch_old,IFX_TAPI_TONE_LOCAL_PLAY,NO_PARAM);
TAPIDEMO_ClearPhone(pCtrl,tmpphone,tmpconn,US_READY,fd_data_ch_old,tmpphone->pBoard)(包括停止編解碼);
ioctl(fd_phone_ch_old,IFX_TAPI_LINE_FEED_SET,IFX_TAPI_LINE_FEED_STANDBY);
CALLING(呼叫)ACTIVE_RX(可接收)ACTIVE_TX(可發(fā)送)ACTIVE_RX(可接收)clear phone(stop encoder/decoder),set line to standby mode:
TAPIDEMO_ClearPhone(pCtrl,tmpphone,tmpconn;US_ACTIVE_RX,fd_data_ch_old,tmpphone->pBoard)(包括停止編解碼);
ioctl(fd_phone_ch_old,IFX_TAPI_LINE_FEED_SET,IFX_TAPI_LINE_FEED_STANDBY);
表2 與廣播主叫建立新的連接部分
源碼實現(xiàn)
line feed active,send US_ACTIVE_TX event to peer,start encoder/decoder on local phone:
ioctl(fd_phone_ch,IFX_TAPI_LINE_FEED_SET,IFX_TAPI_LINE_FEED_ACTIVE);
TAPIDEMO_SetAction(pCtrl,pPhone,pConn,US_ACTIVE_TX);
VOIP_StartCodec(pConn->nUsedCh,pBoard);
return US_ACTIVE_RX;
3 結 語
該系統(tǒng)設計完成后,成功地應用于常德市某一電廠,進行生產(chǎn)調(diào)度,系統(tǒng)能實現(xiàn)點對點通訊和廣播通訊,并且通話質(zhì)量良好,基本無雜音和抖動。
本系統(tǒng)因自帶無線網(wǎng)卡可以自組織網(wǎng)絡,它可以作為一種無線指令調(diào)度機被應用到通信蔽塞的工廠,另外還可外接喇叭自動接聽電話,機器操作員不用停下手中的工作就可照指令進行相應的操作。另外,本系統(tǒng)應用可拓展性好,如:系統(tǒng)可通過PCM通道進行FXO連接從而實現(xiàn)與傳統(tǒng)PSTN互通(見圖1);在本系統(tǒng)上移植SIP協(xié)議棧便可實現(xiàn)與WIFI手機互通;將本系統(tǒng)整合到Ad Hoc網(wǎng)絡中,基于Ad Hoc網(wǎng)絡的各類移動終端設備便可應運而生,因此本系統(tǒng)具有廣闊的市場前景。
參考文獻
[1]Jonathan Davidson,James Peters,Manoj Bhatia.VoIP技術架構[M].北京:人民郵電出版社,2008.
[2]劉曉紅,張薇.VoWLAN技術研究與測試[J].無線電技術與信息,2005(11):35-40.
[3]昂志敏,周志斌.一種MIPS架構的處理器在軟交換中的應用[J].國外電子測量技術,2006,25(7):65-68.
[4]英飛凌科技公司.VINETIC語音處理器在VoIP解決方案中的應用[Z].2005.
[5]趙毅.剖析TCP和UDP協(xié)議[J].安順學院學報,2008,10(4):93-94.
[6]UDP方式點對點通訊[EB/OL].http://zhoulifa.bokee.com.
[7]UDP方式廣播通訊[EB/OL].http://zhoulifa.bokee.com.
[8]Wang Wei,Soung Chang Liew.Solutions to Performance Problems in VoIP over a 802.11 Wireless LAN[J].IEEE Trans.on Vehicular Technology,2005,54(1):366-384.
[9]白潔,劉亮.無線局域網(wǎng)絡綜述[J].計算機工程與設計,2004,25(3):426-428.