基于ADM5120的无线VoIP系统设计
摘 要:用Infineon公司的MIPS架构处理器ADM5120设计并实现了一个无线VoIP系统。从硬件和软件两个方面进行系统设计:首先对系统硬件三大主要模块即:ADM5120主处理器、VINETIC语音模块、存储模块分别进行了研讨;接着描述了如何在无线局域网内实现UDP方式点对点通讯和广播通讯。无线VoIP系统实现后经现场测试证明其性能可靠,价格低廉,具有广阔的应用前景。
关键词: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网络中实现语音通信,促进了网络资源的利用,降低了语音业务成本,在全球范围内得到了迅速的发展。802.11无线局域网(WLAN)将用户从有线的网络连接中解放出来。在企业中部署WLAN网络之后建立VoIP的应用,并不需要对现有的网络进行改造就能满足在企业内部进行语音通信的需求,并且满足下一代移动通信应用在单一网络内进行数据、语音、多媒体的传输的发展方向。本文将VoIP和WLAN(Wireless LAN)结合到一起[2],在MIPS(Microprocessor without Interlocked Pipeline Stages)架构的处理器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[3]是一款基于哈佛体系结构的SoC(片上系统)的嵌入式处理器,具有5级流水线,并使用了32位MIPS指令集。同时ADM5120还是一款典型的寄存器型微处理器,其配置了32个通用寄存器和一对存储64位数据的寄存器Hi和Lo以及异常PC寄存器,其中Hi和Lo寄存器用于存放定点乘法的结果。ADM5120中还内置了32/16位MIPS32 4KEC处理器,其采用TLB(Translation Lookaside Buffer)实现了内存管理和流水线中的异常处理功能,并使用冯•诺依曼结构在内存和寄存器之间传输数据,提高了数据的传输效率,加快了程序的执行速度。另外,ADM5120还集成了多种外围部件,主要有:PCI(Peripheral Component Interconnect)总线接口,5个100 Mb/s的以太网接口,并且还配置了ADM5120内置的PHY芯片,内嵌了16 MB/85 MHz SDRAM存储器,给系统设计提供了很大的方便。
图1 无线VoIP系统硬件架构设计
在本系统中,微控制器接口(非缓冲接口)与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[4] (Voice and Internet Enhance Telephony 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 主接口电路
图3 NOR FLASH芯片(MX29LV320)
图4 SDRAM芯片(W986432DH)
2 系统软件的设计与实现
系统软件设计的整体架构如图5所示,其在无线局域网内实现了基于ADM5120的UDP方式点对点通讯和广播通讯。UDP[5](User Datagram Protocol,用户数据报协议)主要用来支持那些需要在计算机之间传输数据的网络应用。众多的客户/服务器模式的网络应用例如网络视频会议系统等都需要使用UDP协议。UDP协议直接位于IP(网际协议)协议的顶层,属于网络协议中的传输层协议。由于UDP协议不需建立连接,具有效率高、速度快和占用资源少等优点,应用于消息通信和实时系统中可以提高系统传输数据的效率。UDP具有组播和广播功能,是分发信息的一个理想协议。本系统还移植了一种基于ADM5120的嵌入式Web服务器boa,实现了对VoIP系统进行基于B/S方式的Web配置。
图5 无线VoIP系统软件架构设计
2.1 点对点通讯的实现[6]
在本系统中,在一个网段内的任意两个应用程序之间可以进行全双工通信,每个应用程序既可做为服务器又可做为客户端。其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(struct sockaddr))
(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。
图6 UDP编程步骤
2.2 广播通讯的实现[7]
广播和多播都用于实现向多个接收者发送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。
表1 断开原来连接部分(事件EVENT=US_INCBROADCAST,有广播呼入)
Old State US_(旧状态)New State US_(新状态)Action during transition
(当发生广播呼入事件时,从旧状态转换到新状态的源码实现)
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(可发送)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 与广播主叫建立新的连接部分
源码实现
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 结 语
该系统设计完成后,成功地应用于常德市某一电厂,进行生产调度,系统能实现点对点通讯和广播通讯,并且通话质量良好,基本无杂音和抖动。
本系统因自带无线网卡可以自组织网络,它可以作为一种无线指令调度机被应用到通信蔽塞的工厂,另外还可外接喇叭自动接听电话,机器操作员不用停下手中的工作就可照指令进行相应的操作。另外,本系统应用可拓展性好,如:系统可通过PCM通道进行FXO连接从而实现与传统PSTN互通(见图1);在本系统上移植SIP协议栈便可实现与WIFI手机互通;将本系统整合到Ad Hoc网络中,基于Ad Hoc网络的各类移动终端设备便可应运而生,因此本系统具有广阔的市场前景。
参考文献
[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协议[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]白洁,刘亮.无线局域网络综述[J].计算机工程与设计,2004,25(3):426-428.