基于MC13192射频芯片的VoIP无线语音网络

RF/无线

1823人已加入

描述

  引言

  VoIP是当今热门技术,而越来越多的用户提出了在VoIP网络的用户侧一端构建起无线网络,传统意义上的VoIP终端充当 VoIP网关的方案。当前许多解决方案采用了蓝牙或其他技术,不难发现这些技术均有成本高,技术复杂等缺点。飞思卡尔MC13192是一款低功耗的射频芯片,具有低成本、低功耗、性能稳定等优点,适用于低速率无线网络的射频芯片。用户可以通过该芯片及zigbee协议栈实现无线网络的构建,该技术已经被普遍用于家电控制。本文介绍了一种利用此技术实现VoIP两路语音通信的方案,是无线语音网络的一种新的低成本、低功耗的解决方案。

  设计实现

  MC13192简介

  飞思卡尔MC13192收发器是一个典型的ZigBee产品。芯片采用16通道、2.4GHz的频带,数据速率为250kb/s。它们可与32位嵌入式控制器(如飞思卡尔的MCF523x系列)协同使用。MC13192采用标准的4线SPI及7根GPIO与MCU通信,MCU可以通过对SPI的读写来设置及获取MC13192的寄存器,还可以通过对特定GPIO的电平设置来将MC13192的特定引脚置高或者拉低。

  MC13192同32位嵌入式处理器的通信

  由于处理器及开发板的差异,MCU同MC13192相联接的引脚会有所差异,因此为了实现MC13192同MCU的正常通信,必须首先配置相关引脚的方向及功能,本文所描述的方案基于飞思卡尔MCF5234平台,该平台同MC13192的引脚对应关系如表1所示。

  引脚的配置分为三部分:QSPI的初始化、GPIO的初始化以及中断引脚的配置。QSPI和中断引脚的配置相对比较简单,下面首先对这两部分做一个介绍。

  QSPI的初始化要完成对模式寄存器及环绕寄存器的初始化,值得一提的是方式寄存器初始化需要设置宏MCF_QSPI_QMR_BAUD(x),该宏用于设置QSPI的波特率,括号内的数值x需要根据硬件环境及用户需要的QSPI的时钟频率来确定,计算公式为:

  x=系统时钟频率

  4xQSPI时钟频率

  MCF5234的时钟频率为150MHz,在本系统中使用的QSPI的频率为2MHz,因此波特率数值约等于19。对于中断引脚的初始化则更为简单,初始化过程包括触发方式、引脚方向以及中断允许三步。其中触发方式需要选择下降沿触发,引脚方向要设置为输出,由于MC13192使用IRQ3,因此最后要允许来自IRQ3的中断。

  GPIO的初始化主要分为三步:引脚配置,方向寄存器初始化,以及数据寄存器的初始化。首先需要将要使用的GPIO引脚配置为GPIO功能,然后要将这些引脚配置为输出(因为这些引脚均被MCU用来控制MC13192,方向是从MCU输出),最后要将这些引脚上的数据配置为初始值。

  通过以上步骤,就完成了射频芯片和MCU的引脚联接,可以进行下一步的设计。

  IEEE 802.15.4协议MAC层的实现

  由于本方案需要通过射频芯片来进行语音数据的传输,因此需要一个可靠的MAC层协议的支持,可以采用IEEE802.15.4协议的一部分来满足本方案的要求,由于MC13192包含4个定时器,因此可以利用这4个定时器来划分时槽从而实现时分复用。

  网络结构设计

  本方案实现了两路语音通信,即两个手持设备通过无线网络与网关进行通信,网关通过有线网络连接到因特网。手持设备可以同时与外界进行通话。

  MAC协议设计

  本方案采用时槽的方式实现两路语音的复用,因此需要手持设备和网关之间时槽的严格同步。根据协议,每16个时槽作为一个超帧,网关在每个超帧的第一个时槽发送Baecon帧,第2到第8时槽是竞争时槽,因此在本方案中保留这7个时槽,第9到第16时槽是无竞争时槽,用于时分复用,在本方案中,将8个时槽分为4部分,分别用于两个手持设备的上下行数据传输。

  MAC协议的实现

  MC13192自带有4个定时器,每个定时器定时结束时产生一个中断,可以通过MC13192中断状态寄存器获知中断源,例如,当定时器1定时结束,则会产生一个中断,此时的中断状态寄存器的第9位被置高,因此在中断服务程序中加入对定时器中断的处理,可以实现时槽的划分,并且根据当前的时槽数来决定数据的收发,可以实现MAC层协议所要求的功能。在本设计中,我们采用30ms作为一个超帧的长度。以网关为例,处理定时器中断的程序如下所示:

  if(u16StatusContent & TIMER1_IRQ_MASK)

  //中断类别为定时器1中断

  {

  time_slot++;   //每次超时都将时槽加1

  if(time_slot==16)

  time_slot=0; //时槽数的合法数值为0-15

  PLMEEnableMC13192Timer1(1875);

  //每个时槽的长度为1.875ms

  switch(time_slot)

  {

  case 0:  LoadBaecon(&tx_pkt);//读取一个Baecon

  MCPSDataRequest(&tx_pkt);//发送Baecon

  break;

  case 8:

  MLMERXEnableRequest(&rx_pkt1,0);

  //打开接收天线,并将数据保存到rx_pkt1

  break;

  case 9:

  MLMERXEnableRequest(&rx_pkt2,0);

  break;

  case 10:

  LoadPacket(&tx_pkt,0,1);   //读取一个数据包

  MCPSDataRequest(&tx_pkt);//发送数据

  case 11:

  LoadPacket(&tx_pkt,0,1);   //读取一个数据包

  MCPSDataRequest(&tx_pkt);//发送数据

  //12-15时槽略

  }}

  手持设备的程序设计与网关设计大同小异,所不同的是,网关在每个超帧的开始自动发送Baecon,而手持设备则被动的接收Baecon,每次收到Baecon之后才打开定时器来划分时槽,而第15个时槽完毕后,手持设备需要打开接收天线以接收下一个超帧的Baecon。

  MC13192与语音编解码器及网络设备的协同工作

  因为MC13192支持的速率仅为250kbit/s,因此在网关与手持设备之间必须只能传输编码后的语音数据。在选择编解码方案之前,首先需要粗略估计一下带宽,由于极限速率为250Kbit/s,而由于协议所限,仅有一半时槽可供使用,即125Kbit/s,供两个设备上下行使用。这样,每个设备的单向极限速率仅为31.25kbit/s。而MC13192自身的切换时间为144us,而如2.3.3节描述,30ms为一个超帧,每个时槽长度为 1.875ms,再加上物理层头部的消耗,每设备单项可用速率约为20kbit/s。所以,在本方案中选用ITU-T G.726作为语音编解码方案。G.726语音编码消耗带宽16kbit/s,可以满足MC13192的带宽要求。

  对于网关而言,需要记录每个手持设备的通话对象,它通过MC13192及802.15.4 MAC协议获得时槽中的数据,根据对应的时槽确定数据属于哪个手持设备。最后将收到的语音数据封装成RTP包发送到手持设备的目的地。对于从网络上收到的语音数据,则需要确定属于哪一个手持设备,再通过MC13192在特定的时槽发送出去。

  对于手持设备则比较简单,它只需要在特定的时槽发送要编码后的数据,再在特定的时槽接收数据。

  设计总结

  该设计方案已经被用于本人参与的基于MC13192的zigbee电话项目中。经过实际测试,在40M范围内,可以实现无误码通信,通话质量优良。相对于基于其他技术的同类方案,本方案具有低成本、低功耗等优点,是一种比较有经济和技术价值的设计。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分