基于飛思卡爾射頻芯片MC13192的無(wú)線語(yǔ)音網(wǎng)關(guān)
摘要: 本文介紹了基于飛思卡爾低功耗射頻芯片MC13192的無(wú)線VoIP網(wǎng)絡(luò)設(shè)計(jì)方案。采用MC13192芯片及IEEE 802.15.4協(xié)議進(jìn)行無(wú)線網(wǎng)絡(luò)控制,使用飛思卡爾的低成本32位嵌入式處理器MCF5234作為MCU的無(wú)線VoIP網(wǎng)關(guān)的解決方案。本文著重介紹網(wǎng)關(guān)的設(shè)計(jì),并簡(jiǎn)要介紹了手持設(shè)備的設(shè)計(jì)。
關(guān)鍵詞: MC13192;VoIP;802.15.4;網(wǎng)關(guān)
引言
VoIP是當(dāng)今熱門(mén)技術(shù),而越來(lái)越多的用戶(hù)提出了在VoIP網(wǎng)絡(luò)的用戶(hù)側(cè)一端構(gòu)建起無(wú)線網(wǎng)絡(luò),傳統(tǒng)意義上的VoIP終端充當(dāng)VoIP網(wǎng)關(guān)的方案。當(dāng)前許多解決方案采用了藍(lán)牙或其他技術(shù),不難發(fā)現(xiàn)這些技術(shù)均有成本高,技術(shù)復(fù)雜等缺點(diǎn)。飛思卡爾MC13192是一款低功耗的射頻芯片,具有低成本、低功耗、性能穩(wěn)定等優(yōu)點(diǎn),適用于低速率無(wú)線網(wǎng)絡(luò)的射頻芯片。用戶(hù)可以通過(guò)該芯片及zigbee協(xié)議棧實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)的構(gòu)建,該技術(shù)已經(jīng)被普遍用于家電控制。本文介紹了一種利用此技術(shù)實(shí)現(xiàn)VoIP兩路語(yǔ)音通信的方案,是無(wú)線語(yǔ)音網(wǎng)絡(luò)的一種新的低成本、低功耗的解決方案。
設(shè)計(jì)實(shí)現(xiàn)
MC13192簡(jiǎn)介
飛思卡爾MC13192收發(fā)器是一個(gè)典型的ZigBee產(chǎn)品。芯片采用16通道、2.4GHz的頻帶,數(shù)據(jù)速率為250kb/s。它們可與32位嵌入式控制器(如飛思卡爾的MCF523x系列)協(xié)同使用。MC13192采用標(biāo)準(zhǔn)的4線SPI及7根GPIO與MCU通信,MCU可以通過(guò)對(duì)SPI的讀寫(xiě)來(lái)設(shè)置及獲取MC13192的寄存器,還可以通過(guò)對(duì)特定GPIO的電平設(shè)置來(lái)將MC13192的特定引腳置高或者拉低。
MC13192同32位嵌入式處理器的通信
由于處理器及開(kāi)發(fā)板的差異,MCU同MC13192相聯(lián)接的引腳會(huì)有所差異,因此為了實(shí)現(xiàn)MC13192同MCU的正常通信,必須首先配置相關(guān)引腳的方向及功能,本文所描述的方案基于飛思卡爾MCF5234平臺(tái),該平臺(tái)同MC13192的引腳對(duì)應(yīng)關(guān)系如表1所示。
引腳的配置分為三部分:QSPI的初始化、GPIO的初始化以及中斷引腳的配置。QSPI和中斷引腳的配置相對(duì)比較簡(jiǎn)單,下面首先對(duì)這兩部分做一個(gè)介紹。
QSPI的初始化要完成對(duì)模式寄存器及環(huán)繞寄存器的初始化,值得一提的是方式寄存器初始化需要設(shè)置宏MCF_QSPI_QMR_BAUD(x),該宏用于設(shè)置QSPI的波特率,括號(hào)內(nèi)的數(shù)值x需要根據(jù)硬件環(huán)境及用戶(hù)需要的QSPI的時(shí)鐘頻率來(lái)確定,計(jì)算公式為:
x= 系統(tǒng)時(shí)鐘頻率
4xQSPI時(shí)鐘頻率
MCF5234的時(shí)鐘頻率為150MHz,在本系統(tǒng)中使用的QSPI的頻率為2MHz,因此波特率數(shù)值約等于19。對(duì)于中斷引腳的初始化則更為簡(jiǎn)單,初始化過(guò)程包括觸發(fā)方式、引腳方向以及中斷允許三步。其中觸發(fā)方式需要選擇下降沿觸發(fā),引腳方向要設(shè)置為輸出,由于MC13192使用IRQ3,因此最后要允許來(lái)自IRQ3的中斷。
GPIO的初始化主要分為三步:引腳配置,方向寄存器初始化,以及數(shù)據(jù)寄存器的初始化。首先需要將要使用的GPIO引腳配置為GPIO功能,然后要將這些引腳配置為輸出(因?yàn)檫@些引腳均被MCU用來(lái)控制MC13192,方向是從MCU輸出),最后要將這些引腳上的數(shù)據(jù)配置為初始值。
通過(guò)以上步驟,就完成了射頻芯片和MCU的引腳聯(lián)接,可以進(jìn)行下一步的設(shè)計(jì)。
IEEE 802.15.4協(xié)議MAC層的實(shí)現(xiàn)
由于本方案需要通過(guò)射頻芯片來(lái)進(jìn)行語(yǔ)音數(shù)據(jù)的傳輸,因此需要一個(gè)可靠的MAC層協(xié)議的支持,可以采用IEEE802.15.4協(xié)議的一部分來(lái)滿足本方案的要求,由于MC13192包含4個(gè)定時(shí)器,因此可以利用這4個(gè)定時(shí)器來(lái)劃分時(shí)槽從而實(shí)現(xiàn)時(shí)分復(fù)用。
網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)
本方案實(shí)現(xiàn)了兩路語(yǔ)音通信,即兩個(gè)手持設(shè)備通過(guò)無(wú)線網(wǎng)絡(luò)與網(wǎng)關(guān)進(jìn)行通信,網(wǎng)關(guān)通過(guò)有線網(wǎng)絡(luò)連接到因特網(wǎng)。手持設(shè)備可以同時(shí)與外界進(jìn)行通話。網(wǎng)絡(luò)拓?fù)鋱D如圖1所示。
MAC協(xié)議設(shè)計(jì)
本方案采用時(shí)槽的方式實(shí)現(xiàn)兩路語(yǔ)音的復(fù)用,因此需要手持設(shè)備和網(wǎng)關(guān)之間時(shí)槽的嚴(yán)格同步。根據(jù)協(xié)議,每16個(gè)時(shí)槽作為一個(gè)超幀,網(wǎng)關(guān)在每個(gè)超幀的第一個(gè)時(shí)槽發(fā)送Baecon幀,第2到第8時(shí)槽是競(jìng)爭(zhēng)時(shí)槽,因此在本方案中保留這7個(gè)時(shí)槽,第9到第16時(shí)槽是無(wú)競(jìng)爭(zhēng)時(shí)槽,用于時(shí)分復(fù)用,在本方案中,將8個(gè)時(shí)槽分為4部分,分別用于兩個(gè)手持設(shè)備的上下行數(shù)據(jù)傳輸,時(shí)槽劃分如圖2所示。
MAC協(xié)議的實(shí)現(xiàn)
MC13192自帶有4個(gè)定時(shí)器,每個(gè)定時(shí)器定時(shí)結(jié)束時(shí)產(chǎn)生一個(gè)中斷,可以通過(guò)MC13192中斷狀態(tài)寄存器獲知中斷源,例如,當(dāng)定時(shí)器1定時(shí)結(jié)束,則會(huì)產(chǎn)生一個(gè)中斷,此時(shí)的中斷狀態(tài)寄存器的第9位被置高,因此在中斷服務(wù)程序中加入對(duì)定時(shí)器中斷的處理,可以實(shí)現(xiàn)時(shí)槽的劃分,并且根據(jù)當(dāng)前的時(shí)槽數(shù)來(lái)決定數(shù)據(jù)的收發(fā),可以實(shí)現(xiàn)MAC層協(xié)議所要求的功能。在本設(shè)計(jì)中,我們采用30ms作為一個(gè)超幀的長(zhǎng)度。以網(wǎng)關(guān)為例,處理定時(shí)器中斷的程序如下所示:
if(u16StatusContent & TIMER1_IRQ_MASK)
//中斷類(lèi)別為定時(shí)器1中斷
{
time_slot++; //每次超時(shí)都將時(shí)槽加1
if(time_slot==16)
time_slot=0; //時(shí)槽數(shù)的合法數(shù)值為0-15
PLMEEnableMC13192Timer1(1875);
//每個(gè)時(shí)槽的長(zhǎng)度為1.875ms
switch(time_slot)
{
case 0: LoadBaecon(&tx_pkt);//讀取一個(gè)Baecon
MCPSDataRequest(&tx_pkt);//發(fā)送Baecon
break;
case 8:
MLMERXEnableRequest(&rx_pkt1,0);
//打開(kāi)接收天線,并將數(shù)據(jù)保存到rx_pkt1
break;
case 9:
MLMERXEnableRequest(&rx_pkt2,0);
break;
case 10:
LoadPacket(&tx_pkt,0,1); //讀取一個(gè)數(shù)據(jù)包
MCPSDataRequest(&tx_pkt);//發(fā)送數(shù)據(jù)
case 11:
LoadPacket(&tx_pkt,0,1); //讀取一個(gè)數(shù)據(jù)包
MCPSDataRequest(&tx_pkt);//發(fā)送數(shù)據(jù)
//12-15時(shí)槽略
}}
手持設(shè)備的程序設(shè)計(jì)與網(wǎng)關(guān)設(shè)計(jì)大同小異,所不同的是,網(wǎng)關(guān)在每個(gè)超幀的開(kāi)始自動(dòng)發(fā)送Baecon,而手持設(shè)備則被動(dòng)的接收Baecon,每次收到Baecon之后才打開(kāi)定時(shí)器來(lái)劃分時(shí)槽,而第15個(gè)時(shí)槽完畢后,手持設(shè)備需要打開(kāi)接收天線以接收下一個(gè)超幀的Baecon。
MC13192與語(yǔ)音編解碼器及網(wǎng)絡(luò)設(shè)備的協(xié)同工作
因?yàn)镸C13192支持的速率僅為250kbit/s,因此在網(wǎng)關(guān)與手持設(shè)備之間必須只能傳輸編碼后的語(yǔ)音數(shù)據(jù)。在選擇編解碼方案之前,首先需要粗略估計(jì)一下帶寬,由于極限速率為250Kbit/s,而由于協(xié)議所限,僅有一半時(shí)槽可供使用,即125Kbit/s,供兩個(gè)設(shè)備上下行使用。這樣,每個(gè)設(shè)備的單向極限速率僅為31.25kbit/s。而MC13192自身的切換時(shí)間為144us,而如2.3.3節(jié)描述,30ms為一個(gè)超幀,每個(gè)時(shí)槽長(zhǎng)度為1.875ms,再加上物理層頭部的消耗,每設(shè)備單項(xiàng)可用速率約為20kbit/s。所以,在本方案中選用ITU-T G.726作為語(yǔ)音編解碼方案。G.726語(yǔ)音編碼消耗帶寬16kbit/s,可以滿足MC13192的帶寬要求。
對(duì)于網(wǎng)關(guān)而言,需要記錄每個(gè)手持設(shè)備的通話對(duì)象,它通過(guò)MC13192及802.15.4 MAC協(xié)議獲得時(shí)槽中的數(shù)據(jù),根據(jù)對(duì)應(yīng)的時(shí)槽確定數(shù)據(jù)屬于哪個(gè)手持設(shè)備。最后將收到的語(yǔ)音數(shù)據(jù)封裝成RTP包發(fā)送到手持設(shè)備的目的地。對(duì)于從網(wǎng)絡(luò)上收到的語(yǔ)音數(shù)據(jù),則需要確定屬于哪一個(gè)手持設(shè)備,再通過(guò)MC13192在特定的時(shí)槽發(fā)送出去,如圖3所示。
對(duì)于手持設(shè)備則比較簡(jiǎn)單,它只需要在特定的時(shí)槽發(fā)送要編碼后的數(shù)據(jù),再在特定的時(shí)槽接收數(shù)據(jù),如圖4所示。
設(shè)計(jì)總結(jié)
該設(shè)計(jì)方案已經(jīng)被用于本人參與的基于MC13192的zigbee電話項(xiàng)目中。經(jīng)過(guò)實(shí)際測(cè)試,在40M范圍內(nèi),可以實(shí)現(xiàn)無(wú)誤碼通信,通話質(zhì)量?jī)?yōu)良。相對(duì)于基于其他技術(shù)的同類(lèi)方案,本方案具有低成本、低功耗等優(yōu)點(diǎn),是一種比較有經(jīng)濟(jì)和技術(shù)價(jià)值的設(shè)計(jì)。
參考文獻(xiàn):
1.Freescale, MC13192 Reference Manual.
2.IEEE Std 802.15.4-2003
3.李晶皎、王愛(ài)俠、張廣淵, Coldfire系列32位微處理器與嵌入式Linux應(yīng)用, 北京:北京航空航天大學(xué)出版社,2005.6
評(píng)論