|
摘要:随着网络的普及,基于分组交换的VoIP技术得到迅猛发展。如何将VoIP技术与无线通信技术相结合,实现无线VoIP话机是当前嵌入式VoIP话机设计的一个新方向。本文提出了一种适用于家庭办公室小范围内的无线VoIP话机系统设计方案,并且将该方案在具体的硬件平台上付诸实现。本文重点介绍了该系统的设计特点,无线MAC层的设计,以及手持设备端的硬件结构和软件结构。
当前VoIP技术和无线通信技术的迅速发展为无线VoIP话机的实现创造了条件,也形成了一个研究热点。当前提出的设计方案有采用802.11协议(WLAN)实现VoIP无线化,虽然覆盖范围可达上百米,充足的带宽对语音压缩也没有过高要求,但作为移动便携设备,其成本和功耗成为了设计瓶颈。本设计主要从性能,成本,功耗等方面出发,提出了一种利用低速低功耗的无线个域网技术IEEE802.15.4[1]来实现无线VoIP话机系统的方案,并在基于Freescale射频芯片MC13192的硬件平台上成功实现了该方案。
无线VoIP话机系统方案
作为无线便携设备,功耗是首要考虑的一个因素,如果把网络协议栈,各个语音处理模块,无线通信都放在手持设备上,必然造成手持设备功能复杂,功耗过大。本设计考虑将嵌入式VoIP话机划分为两部分:无线语音网关和手持设备端。无线语音网关作为该系统的非移动端,以有线方式连接到互联网,主要处理网络及会话协议,各种语音压缩标准与g.726压缩标准之间的转换以及无线收发工作,而作为真正移动部分的手持设备端仅作简单的会话信令处理,g.726语音编解码和无线收发工作。在这种结构下,还可以增加手持设备的数量,实现多路无线通话,本设计成功实现了两个手持设备的无线语音通话。即两个手持设备可同时与互联网上其它用户建立语音通话。该无线VoIP话机系统如图1所示。
图1 无线VoIP话机的系统示意图
无线语音网关同手持设备端之间的无线通信采用了低速低功耗的IEEE802.15.4协议,采用该协议虽然能极大地降低系统特别是手持设备的功耗,但仅仅250Kb/s的无线带宽对语音的传输却提出了挑战。为适应250Kb/s的无线传输速率同时保证语音质量,本设计采用了g.726压缩编解码将语音速率从64Kb/s降低到16Kb/s。另外根据该应用的特点:手持设备与语音网关间仅构成星型拓扑结构,删减了IEEE802.15.4协议部分功能,对其帧结构也作了一定修改以增加负载数据在帧中所占的比例。
SIP协议与无线网内部会话信令
VoIP目前有两大独立的信令标准:H.323协议和SIP协议。H.323主要参考了传统PSTN的呼叫控制和信令架构,便于与传统电话网相连。SIP协议是由IETF在1999年提出来的一个应用控制协议,它可用来创建、修改以及终结多个参与者参加的多媒体会话进程。SIP协议借鉴了Internet协议设计思想,具有简单,开放,可扩展等特点。本设计采用了SIP协议,并在实现时采用了源代码开放的SIP协议栈osip2/eXosip库。
无线网内部会话信令是本设计中无线语音网关与手持设备间进行通话所交互的信令。该信令集可以看成SIP信令在本无线网络中的扩展。由于SIP协议是放在无线语音网关上实现,而在会话过程中,部分SIP事件例如发起呼叫,需要由手持设备来响应或送出,所以需要无线语音网关将这部分消息发送给手持设备,同时需要将从手持设备接收到的消息转换成相应的SIP信息发送到互联网。无线网内部会话信令便在无线语音网关和手持设备间充当了信息传递的桥梁。表1列举了部分无线网内部会话信令在软件实现中定义的宏名。
这里以无线手持设备发起呼叫为例介绍无线手持设备如何通过内部会话信令与其他VoIP电话建立会话,如图2所示。
图2无线手持设备发起呼叫信令交互
当用户通过无线手持设备拨打一个号码时,无线手持设备将发送一个HtoG_CALL_ NEW的内部会话信令连同呼叫的号码给无线语音网关,无线语音网关收到该信令后,将根据该信令构造相应的SIP消息并发送到外部网络。当无线语音网关收到来自被叫方表示振铃信息的暂时应答RINGING时,将发送一个GtoH_CALL_RINGING的内部会话信令给手持设备。当无线语音网关收到来自被叫方表示应答的信息ANSWERED时,语音网关将启动RTP线程并发送一个GtoH_CALL_ANSWERED的内部会话信令给手持设备以通知被叫方已应答。此时手持设备开启语音进程,与被叫方实现通话。
无线MAC层设计和同步的实现
根据设计的特点,无线语音网关同手持设备间的无线网络采用星型拓扑结构,无线语音网关作为无线个域网的协调器同手持设备进行信息交互。IEEE802.15.4MAC层分为使用信标帧和不使用信标帧两种工作模式,本设计采用使用信标帧同步的超帧结构,由无线语音网关发送信标帧同步无线手持设备的数据传输。本设计中超帧长30ms,等分为16个时隙,每个时隙为1.875ms。信标帧在时隙1发送,时隙2到时隙8为竞争时隙,使用时隙CSMA-CA算法传输命令帧和应答帧。时隙9到时隙16固定分配给两个手持设备作为上下行语音数据通道。上下行各两个时隙的分配可以满足经 g.726压缩后16Kb/s的语音数据传输带宽要求。超帧结构如图3所示。
图3 超帧结构
对于命令帧,采用应答和超时重发机制保证其可靠传输。对于语音数据,采用5/6分组FEC纠错算法改善语音质量。该纠错算法可以恢复五个连续语音数据包中任意丢失的一个,且实现简单,延迟较小。
由于所有信息传输都是在双方约定的时隙内进行,时隙的错位,抖动都将造成丢帧,而丢帧对语音质量的影响非常大,所以本设计的一个关键点是实现语音网关与手持设备间的精确同步,即手持设备在收到信标帧后保证随后15个时隙与语音网关的对应时隙对齐。本设计利用了射频芯片MC13192的接收时间戳功能来实现精确同步,如图4所示。
图4 超帧的同步
时隙1开始后,语音网关需要TSTms的时间将射频芯片从空闲状态转换为发送状态,当转换为发送状态后,预先存储在射频芯片发送RAM中的信标帧立即开始发送,手持设备上的射频芯片在收到六个字节TSPms后自动锁存一个当前时间timestamp(时间戳), 这个值由手持设备在正确接收完信标帧后读取。根据这个值,手持设备可以设定MC13192定时器在(timestamp+1875-TST- TSP)ms时刻产生中断,进入该中断服务程序的时刻即时隙2的起始时刻。在时隙2中使用MCU定时器设置随后14个时隙的定时中断产生时间,定时时间为1875ms。设置MC13192定时器中断相关代码如下所示:
switch(frametype)
{
/*收到信标帧*/
case BEACON:
/*获取接收时间戳*/
timestamp=PLMEGetTimestampRequest();
/*设置时隙2定时中断时刻*/
PLMEEnableMC13192Timer1(timestamp+1875-144-192);
beacon_receive_index++;
break;
case DATA:
...
}
在时隙2中断服务程序中设置随后14个时隙中断时刻,代码如下所示:
/*MC13192定时器1中断服务*/
if ((u16StatusContent & TIMER1_IRQ_MASK) != 0) {
/* 停止MC13192计数器*/
SPIDrvWrite(T1_HI_ADDR, 0x8000);
/* 设置MCU定时器*/
EnableTMR(1875);
无线手持设备端的硬件框架
手持设备端的硬件结构需要支持以下功能:
·能接收并处理用户按键信息
·能在LCD屏上显示系统信息
·无线数据传输
·语音数据的采样、恢复以及PCM编解码
·外扩存储设备以存放大量的代码和数据
按照以上对硬件功能的要求,本设计采用了Freescale公司32位微处理器MCF5249作为主控芯片。该处理器工作主频为140MHz,实际工作频率可通过片内PLL设定,片内带有8K的指令高速缓存和96K的SRAM。该处理器还提供丰富的外设供用户使用。
无线收发模块采用Freescale公司符合IEEE802.15.4规范的射频芯片MC13192,该芯片工作在2.4GHz频段,提供16个无线通道,数据速率为250Kb/s[4],通过QSPI与主控芯片进行数据交换。语音采样模块采用Motorola公司13位线形PCM编解码芯片MC145483SD[5],该芯片对语音进行AD采样并形成线形PCM流,通过音频接口与主控芯片交换数据。时钟模块的设计充分考虑手持设备的低功耗要求,提供高低两种时钟输入。当系统处于未通话状态,可向系统提供低频率时钟。时钟输入可通过软件配置GPIO进行选择。因为要处理大量音频数据和固化代码,扩展了片外SDRAM和FLASH。其他模块还包括键盘,LCD,串口和BDM调试接口,其硬件框架如图5所示。
图5 无线手持设备端的硬件框架
无线手持设备端的软件设计
无线手持设备端的软件框架
无线手持设备在软件设计上需充分考虑系统的实时性和功耗。其一,手持设备需要处理语音,会话控制信令,键盘输入信息等多种数据,并需要进行通话过程控制,无线收发控制,单任务环境显然不能胜任。其二语音数据是实时数据,必须得到及时有效的处理,且系统不能过于复杂,以减少不必要的开销,降低功耗。综合以上两点,本设计采用了一个轻巧的多任务实时嵌入式操作系统mC/OS-II,其内核可剥夺性保证了实时任务的运行。而且其内核代码量小,能充分节省系统资源。该嵌入式操作系统提供除空闲,统计和保留任务以外的56个实时任务供用户使用,提供信号量,消息队列等机制实现任务间的同步和信息传递。其实时性强,代码量小,内核简单的特点使其非常适用于本手持设备。
使用该操作系统之前需将其移植到MCF5249上,根据处理器的具体信息,编写OS_CPU.H,OS_CPU_A.ASM和 OS_CPU_C.C三个文件。
除内核外,完整的操作系统还需要编写键盘,LCD,音频驱动和射频芯片驱动。音频驱动采用Phlips I2S数据格式,设定采样率为8KHz。射频芯片驱动采用Freescale公司为MC13192提供的配套软件模块。
操作系统之上是无线MAC层,该模块针对语音无线传输的特点简化实现了IEEE 802.15.4 协议MAC层功能。第三层为语音压缩编解码g.726模块和无线网内部会话信令处理模块。会话信令处理模块负责处理来自无线语音网关的会话信令。最上层为应用层,实现用户界面和通话过程控制。无线手持设备总统框架如图6所示。
图6 无线手持设备端的软件框架
无线手持设备端的软件流程
当手持设备上电启动后,其工作流程如图7示。首先进行的是系统的初始化,包括处理器初始化,操作系统mC/OS-II初始化,LCD,键盘,射频模块等的初始化。之后建立起始任务并通过OSStart()函数进入多任务环境。此时起始任务占用CPU资源,在起始任务中,建立按键信息处理任务并通过信号量机制挂起。然后判断是否收到来自无线语音网关的帧,如果有,调用frame_deal()函数处理帧信息,在该函数中调用call_command_deal()完成无线网内部会话信令的处理。接着判断通话是否建立,如果建立则创建语音任务,在语音进程中使能PCM编解码芯片,并进行g.726压缩编码。最后判断是否有帧需要发送给无线语音网关,如果有则把帧添加到发送缓存,等待发送时隙到来。这一过程完成以后重新跳到判断是否收到来自无线语音网关的帧,重复以上过程。如果有键盘中断,将会释放一个信号量,该信号量将解挂按键信息处理任务。该任务对键盘输入信息进行处理。
图7 无线手持设备的软件流程
结语
本设计已经在基于MCF5234微处理器(无线语音网关)和MCF5249微处理器(无线手持设备)的硬件平台上实现。如图8所示,左图为无线语音网关,右图为无线手持设备。
图8 系统硬件实物图
本设计实现了包括呼叫转移,三方通话等在内的7项通话功能。在40米范围内,具有良好的语音效果。该系统为家庭、办公环境实现无线VoIP通信提供了一种参考设计,且具有结构简单,功耗小,软件层次清晰等特点。 |
|