无线IPPBX系统的设计与实现
2007-11-13
作者:黄宁成, 石江宏
摘 要:描述了无线VOIP交换机的硬件设计原理与软件实现方法。在描述系统整体架构的基础上,介绍了其硬件设计部分的GSM工作单元、PCM编解码" title="编解码">编解码单元、语音压缩" title="语音压缩">语音压缩解压处理单元和总线端口适配" title="适配">适配单元的设计方法以及工作原理;描述了系统软件分层思想,介绍各层的功能和设计方法。
关键词:VOIP GSM 短信网关 SIP协议 嵌入式Linux Web服务器
随着以太网宽带技术的发展,以IP网络为媒介的语音通信技术(VOIP技术)凭借其低廉的话费受到消费者的广泛关注。很多企业和科研机构也开始研究、使用这项技术。无线VOIP交换设备(即无线IPPBX)通过GSM无线模块来实现IP网络的电话用户与普通电话用户之间的通信。它融合了以太网和GSM网络,具备GSM网络与以太网络两方面的优势,既具备IP电话话费低廉的优势,又可以通过GSM网络实现IP电话落地而不受固定电话线的束缚,同时结合以太网的http协议可以在其上实现短信网关的功能。本文将从硬件和软件的角度来阐述该设备的设计与实现。
1 系统硬件设计
1.1 硬件结构
系统硬件结构如图1所示,整个硬件系统由GSM工作单元、PCM编解码工作单元、语音压缩/解压处理单元(DSP)、CPLD总线适配单元和MPC860T核心控制单元构成。系统通过两条总线实现硬件系统的协同工作:通过I2C总线向GSM工作单元、PCM编解码单元发送控制信令" title="信令">信令和读取状态信息;通过HPI总线实现对语音压缩解压处理单元(DSP)语音压缩包的读取和发送。系统通过CPLD以及与之相连的一块MCU实现两条总线的适配并在MPC860T核心控制单元端提供了统一的I/O" title="I/O">I/O接口。
系统的工作流程如下:若系统要传送语音数据到以太网,GSM模块或普通话机的模拟话音经PCM编解码器A law/μlaw 编码后送到E1数据总线上,然后DSP将E1线上的PCM码流按G.729/G.723的标准压缩成低比特率的语音包,并在相应的端口产生一定的状态信号,该状态信号经CPLD处理后转化为MPC860T的中断信号,MPC860T处理器响应中断,通过CPLD将语音压缩包从DSP的HPI口读取出来并通过以太网控制器将其发送到以太网上。系统从以太网接收语音压缩包,并将其还原成模拟话音,其过程与此相反。
1.2 GSM工作单元设计
GSM工作单元由MCU、GSM模块以及一些外围接口电路构成,其原理框图如图2所示。MCU是工作单元的控制部件,它通过自身的I2C接口与系统的I2C总线连接,并通过串口与GSM模块连接。单元工作时先从I2C总线接收系统发送的控制信令,然后由MCU将控制信令转化为具体的AT指令并通过串口发送给GSM模块。GSM模块根据收到的AT指令执行相应的操作(发送拨号信息、建立语音通路、发送短信等)。当然GSM模块也可以将自己的状态信息如自己的忙闲状态、来电号码通过串口发给MCU,再由MCU通过I2C总线上报给主控CPU(MPC860T)。
GSM单元的设计中需要特别注意以下几点:
(1)电源设计。GSM模块在整个系统中属于功耗比较大的部件,空闲时工作电流为35mA,工作时的平均电流为350mA,突发工作电流可以达到2A。所以GSM模块要采用单独的电源芯片供电,并且有足够的负载能力。在设计中采用DC-DC的电源芯片给模块提供4V电压并在电源的输出端并联一个2200μF的大电容,以防止模块的突发大电流使电源芯片的供电电压发生瞬时下降。
(2)串行接口电路的设计。GSM模块的串行口(UART)使用的不是标准的TTL电平,不能与控制它的MCU串口直接相连,在它们之间要有一个电平转换接口电路。该电路要能实现模块的3V高电平与MCU端5V TTL高电平的相互转换。设计中使用三极管的开关电路和电阻分压电路就可实现该功能,如图3所示。实验证明该方法简单、有效。
(3)模块语音口电路的设计。GSM模块的语音输入、输出都是差分信号,而PCM编解码器的语音口要求单端信号。在两个语音端口之间要有差分信号与单端信号的转换电路,才可实现两者的连接。设计中采用运放电路来实现差分与单端的转换。由于GSM模块的语音口特别容易受到射频干扰,所以模块的语音口还要连接一些滤波电容。此外,PCB布板也要保证语音信号线远离模块的天线,这样才能将噪声干扰降到最低,保证话音质量。
1.3 PCM编解码单元设计
PCM编解码单元主要有两个任务:将来自GSM模块或普通话机的模拟话音进行A law/μ law PCM编码,然后发送到系统E1数据线上;获取系统E1数据总线某个时隙的PCM编码并将其还原成模拟话音。设计中采用一块带I2C接口的MCU作为PCM编解码器的控制器。该控制器从I2C总线接收主控CPU(MPC860T)发送的控制信令并将该信令转化为PCM编解码器命令序列,PCM编解码器接受命令后完成相应的编解码功能。
1.4 语音压缩解压单元设计
语音压缩解压单元的工作是:将前端PCM编码器发送来的PCM数据压缩成低比特率的语音包后交由主控CPU处理;将主控CPU发送来的语音压缩包还原成PCM编码。该单元的设计中采用AudioCodes公司的AC48304C_C作为语音PCM编码的压缩解压处理器。该处理器支持四个语音处理通道,每个通道可以单独编程,配置不同的PCM时隙和压缩/解压算法(G.723、G.729等)。根据主控CPU(MPC860T)的数据包处理能力,本设计在系统中挂载四片AC48304C_C,可同时处理16路语音的编解码(压缩/解压)。
1.5 总线端口适配单元设计
总线端口适配单元的功能是从硬件上屏蔽I/O总线操作的复杂性,使主控CPU以一种简单的I/O读写方式即可实现系统两大总线的操控(I2C总线和HPI总线)。该单元的设计采用一片CPLD和一块带I2C接口的MCU来实现总线适配功能。CPLD的功能是实现不同I/O口间逻辑关系的转换,具体来说就是将主控CPU的I/O读写逻辑转换为AC48304C_C的HPI口的读写逻辑或MCU I/O口的读写逻辑。MCU的作用是进一步将CPLD的接口逻辑转化为I2C总线上的通信协议。CPLD的I/O逻辑功能的设计通过为其编写VHDL语言来实现,它的等效内部逻辑和外围接口如图4所示。
2 系统软件设计
2.1 分层架构
无线IPPBX软件系统以嵌入式 Linux为操作系统平台,采用软件分层的设计思想。整个系统的软件架构分为三层:设备驱动层、通信协议层和通信事件处理层,如图5所示。每一层都为上层提供API,图中虚线表示分层,箭头表示层与层之间API的调用关系。
2.2 设备驱动层设计
设备驱动层属于系统软件的最底层,它根据所处理的硬件对象的不同又可分为网络设备驱动和通信设备驱动。网络设备驱动负责处理以太网控制器的操控,它控制以太网芯片从以太网发送和接收数据包。通信设备驱动负责控制系统各工作单元信息处理的物理实现,包括AC48304C_C初始化、各语音处理通道的配置、语音压缩包的存取和DTMF信号处理,以及各控制单元(AM79Q02,GSM模块)信令发送、状态读取。通信设备驱动通过Linux虚拟文件系统接口向上层提供标准的API,上层可以不管设备的复杂性,只要调用这些API就可以。
在上述设备驱动功能的设计中与GSM工作单元信息交互的实现方法需要特别注意,这也是实现设备无线通信功能的核心所在。与GSM工作单元的信息交互是通过向控制GSM模块的MCU发送控制指令实现的。这些控制指令通过I2C总线传送。本系统I2C总线是一个多主机通信系统,当主控CPU(MPC860T)在该总线传送信息时,先要侦听信道是否空闲(该功能由总线适配单元实现),如果空闲则将待发送的指令序列分解成一定长度的数据包,然后一个包一个包地发送出去(与以太网相似)。
鉴于I2C总线的这个特性,在驱动层要制定一个简单的协议才可实现主控CPU与GSM控制单元(MCU)间信令的传递。系统采用HDLC帧的方式,即在传递信令前先将要发往GSM控制单元的控制信令打成HDLC帧的格式,然后再将此帧分解成固定长度的数据包发往I2C总线,控制GSM模块的MCU接收这些数据包并将其还原成HDLC帧,再根据帧中各字节的定义将该帧解析成具体的AT指令发送给GSM模块。系统HDLC帧结构如表1所示。
控制GSM模块的MCU接收到HDLC帧后先读取类型字段,根据该字段判断载荷内容,然后再执行相应的操作。例如收到HDLC帧的类型为0x01时表示拨号操作,后面的载荷就是电话号码,此时就执行拨号的AT指令。又如收到HDLC帧的类型为0x04则表示发送短信操作,载荷则为电话号码和短信内容的PDU码,那么就执行发送短信AT指令。
2.3 通信协议层设计
通信协议层主要为上层应用程序提供各通信协议栈。本系统通信协议层实际还可细分为两层:TCP/IP协议层和应用层协议(SIP协议和RTP协议)。设计通信协议时,TCP/IP协议是Linux操作系统自带的运行在内核当中,SIP协议和RTP协议需要从外部移植,运行时以函数库的形式存在于用户空间。不论TCP/IP协议层还是应用层协议都为其上层提供了标准的API,对于上层程序来说只要调用这些API就可实现协议功能。
2.4 通信事件处理层设计
通信事件处理层是运行在应用层为一些具体的通信事件(如用户的摘挂机、电话的呼入呼出、呼叫转移等)服务的程序。具体的设计方法是在系统的应用层开启一个守护进程,并在该进程下开辟多个监控线程。每个监控线程负责监控一类通信事件,如果有通信事件发生,则监控它的线程就调用相应的状态机服务程序,而状态机服务程序会调用具体的协议栈并驱动实现具体的通信过程。
2.5 短信网关设计
本系统短信网关的设计通过http协议以及CGI技术予以实现:首先在该系统上移植boa web服务器程序,然后用html语言设计短信网关的访问页面,同时设计好处理用户输入信息CGI脚本程序。用户通过浏览器远程访问服务器上的页面,将目标用户的电话号码和待发短信内容填写在页面的表单上,然后提交表单。运行在Web服务器上的CGI程序处理提交表单的内容并将处理结果送入一个消息队列。运行在通信事件处理层的一个监控线程(流程如图6所示)读取该消息队列的消息并调用通信设备驱动相应的API发出信令让GSM模块将短信发出。
无线IPPBX融合了GSM网络技术和以太网技术,它与传统的IP电话交换设备相比,不但避免了固定电话线的束缚,而且还具备短信网关的功能。由于它使用GSM网络进行IP电话的落地工作,从而使该设备得到了移动运营商的支持。该设备目前已成功应用于企业,承载了他们的IP电话业务与短信网关职能。
参考文献
[1] 张智江,张云勇,刘韵洁.SIP协议及其应用.北京:电子工业出版社,2005.
[2] 谢斌. MPC860/850嵌入式系统开发入门与指导.西安:西安电子科技大学出版社,2004.
[3] 张登银,孙精科.VoIP技术分析与系统设计.北京:人民邮电出版社,2003.
[4] Alessandro Rubini, Jonathan Corbet著,魏永明, 骆刚, 姜君译. Linux设备驱动程序(第二版).北京:中国电力出版社,2002.
[5] MC35i Hardware Interface Description. 2004.
[6] AC4830xC-C Designer's Manual. 2003.
[7] AC4830xC-C VoPP Data Book. 2003.
[8] Datasheet of Am79Q02/021/031. 1999.