??? 摘? 要: CMX618與CMX7041是CML半導(dǎo)體公司推出的用于數(shù)字專網(wǎng)移動通信的專用芯片,,本文介紹了基于CMX618[1]與CMX7041[2]的數(shù)字對講機基帶系統(tǒng)的設(shè)計,,敘述了系統(tǒng)的硬件設(shè)計與軟件設(shè)計,并闡述了芯片使用中的問題與經(jīng)驗,。?
??? 關(guān)鍵詞: CMX618,;CMX7041;數(shù)字對講機,;基帶,;數(shù)字專網(wǎng)移動通信
?
??? 數(shù)字對講機擁有全新的技術(shù),是一個新時代的產(chǎn)物,,是模擬對講機的更新?lián)Q代產(chǎn)品,。所謂數(shù)字對講機,就是在其內(nèi)部將語音信號進行數(shù)字化處理,并可以擴展其他數(shù)據(jù)應(yīng)用功能的對講機,。它在以下三個方面有著模擬對講機無法比擬的優(yōu)勢:(1)窄帶通信,,一路語音信號占用一個信道,信道帶寬是12.5 kHz或者6.25 kHz,,從而能很好地應(yīng)對當(dāng)今社會頻譜資源日益缺乏的難題,。(2)由于對語音信號的數(shù)字化處理使得在接收端對接收信號進行判決時消除了一定的噪聲積累影響,而且在發(fā)送端對語音數(shù)字信號還可以進行信道編碼的處理,,這就使得數(shù)字對講機的話音質(zhì)量得到了進一步的改善,。(3)由于內(nèi)部設(shè)有數(shù)字信號處理機制,因此可以增加若干有關(guān)數(shù)據(jù)應(yīng)用的擴展功能,,例如短信息,、視頻信息等。歐美市場調(diào)查的數(shù)據(jù)顯示:2003年數(shù)字對講機與模擬對講機的比例是2:8,,在2004年上升為5:5,,且預(yù)計2007年將達到8:2。我國目前市場上并沒有自主知識產(chǎn)權(quán)的數(shù)字對講機產(chǎn)品出售,,國外公司例如摩托羅拉,、艾可慕等,其研制的數(shù)字對講機產(chǎn)品價格昂貴,,使得一般的中小型企業(yè)無法接受,。今年汶川地震時GSM網(wǎng)絡(luò)的癱瘓,使得通信,、救援等工作都受到影響,,也使得對數(shù)字對講機的需求變得異常強烈,還有我國公安,、消防,、建筑等行業(yè)部門對數(shù)字對講機的強烈需求,所以擁有我國自主知識產(chǎn)權(quán)的數(shù)字對講機亟待研發(fā)并被投入市場,。?
1 所選芯片介紹?
??? 筆者所設(shè)計的數(shù)字對講機基帶系統(tǒng)基于英國CML半導(dǎo)體公司的語音編解碼芯片CMX618和4FSK調(diào)制解調(diào)芯片CMX7041,。參照的通信協(xié)議是ETSI(歐洲電信標(biāo)準協(xié)會)發(fā)布的公用數(shù)字對講機標(biāo)準DPMR[3]。?
??? CML公司研制的這兩款芯片目的是應(yīng)用于窄帶的數(shù)字專網(wǎng)移動通信,。CMX618是語音編解碼芯片,,內(nèi)部集成A/D、D/A,,采用RALCWI(魯棒的先進的低復(fù)雜性波形插入)技術(shù),,可以將模擬語音信號轉(zhuǎn)換成數(shù)字語音信號后,再壓縮編碼為位速率是3.6 kb/s的碼流,,其中的2.4 kb/s是純語音數(shù)據(jù),,另外的1.2 kb/s是信道編碼數(shù)據(jù),壓縮率很高,并且聲音效果也不錯,。CMX618解碼時可以將語音外帶信道編碼的數(shù)據(jù)先解碼,再經(jīng)D/A轉(zhuǎn)換,,送入耳機或擴音器。芯片內(nèi)部結(jié)構(gòu)框圖如圖1所示,。CMX7041是4FSK方式的調(diào)制解調(diào)芯片,。調(diào)制時,它可以將輸入的數(shù)字信號進行4FSK調(diào)制,,并且輸出數(shù)字碼流的速率可以是4.8 kb/s或者9.6 kb/s,,可以應(yīng)對信道帶寬是6.25 kHz和12.5 kHz兩種情況。在解調(diào)端,,它可以將4FSK已調(diào)信號解調(diào),,得到原調(diào)制信號。其內(nèi)部結(jié)構(gòu)框圖如圖2所示,。?
?
?
?
??? 基帶系統(tǒng)的CPU選擇的是ARM7TDMI-S內(nèi)核的NXP的LPC2138[4],,筆者使用外接12 MHz晶振,處理器時鐘設(shè)置為48 MHz,,這樣高的時鐘頻率足以應(yīng)對對講機的工作,,LPC2138的內(nèi)部Flash為512 KB,,其中大約256 KB的Flash用來存儲字庫,,用于短信息的功能??傮w來說這款A(yù)RM芯片是很合適的,。?
2 系統(tǒng)總體介紹?
??? 系統(tǒng)的總體框圖如3所示。本設(shè)計中CMX618語音編碼后的碼流速率是3.6 kb/s,,CMX7041將信號調(diào)制后碼流速率是9.6 kb/s,,所以一路話音占用的信道帶寬是12.5 kHz。?
?
?
??? 在發(fā)送路徑上,,麥克將人的模擬語音轉(zhuǎn)換為差分的電信號,。將差分的電信號送入CMX618,在其內(nèi)部將電信號進行A/D轉(zhuǎn)換,之后將數(shù)字信號進行壓縮編碼,,輸出3.6 kb/s的數(shù)字碼流,,其中含有1.2 kb/s的信道編碼數(shù)據(jù)。LPC2138通過SPI總線將CMX618輸出的已編碼數(shù)據(jù)讀入到MCU內(nèi)部開辟的數(shù)據(jù)緩存區(qū)中,,之后將這些讀入的數(shù)據(jù)與按照DPMR協(xié)議填充的協(xié)議數(shù)據(jù)一起再通過SPI總線送給CMX7041,,CMX7041將得到的數(shù)據(jù)進行4fsk調(diào)制并發(fā)送至射頻模塊,再經(jīng)天線發(fā)射出去,。接收路徑上,,CMX7041將接收到的4fsk已調(diào)信號進行解調(diào),將解調(diào)得到的信號經(jīng)過SPI總線存儲到MCU的緩沖區(qū)中,MCU再將緩沖區(qū)中的語音數(shù)據(jù)通過SPI總線送入CMX618待其解碼,,解碼之后的差分語音信號送入揚聲器即可還原出語音,。?
3 硬件電路設(shè)計?
??? 電路原理簡圖如圖4所示,僅列出了與接口相關(guān)的引腳,。?
?
?
??? 畫PCB圖時需注意以下幾點:?
??? (1)麥克輸出的信號是差分的電信號,,所以麥克的輸出與CMX618的輸入之間的導(dǎo)線應(yīng)布成等長、等距離且距離盡可能近的差分線,。從CMX618輸出的信號到擴音器之間的導(dǎo)線同樣應(yīng)是差分線,。?
??? (2)為了獲得可調(diào)節(jié)大小且分貝較高的聲音,可以在CMX618與擴音器之間加一個音頻功放芯片,。芯片在較大功率時的聲音完全可以滿足對講機的要求,。大功率時,電流相應(yīng)也較大,,可以達到1.5 A左右,,所以導(dǎo)線的寬度最好在1~1.27 mm之間。?
??? (3)板子最好做成4層板,。除了內(nèi)層有電源層和地層以外,,最好在頂層和底層也都鋪銅,鋪成地網(wǎng)絡(luò),。為了使地平面充分相通,,可以在頂層與地層、底層與地層之間多打一些過孔,,這樣也可提高散熱性能,。?
4 軟件設(shè)計?
??? 先介紹數(shù)字對講機工作時參照的協(xié)議標(biāo)準。筆者所使用的標(biāo)準是ETSI(歐洲電信標(biāo)準協(xié)會)發(fā)布的公用數(shù)字對講機標(biāo)準——DPMR,,考慮到所使用芯片CMX7041的特性,,在幀的結(jié)構(gòu)上有所修改,如圖5所示,。為了保證語音數(shù)據(jù)的連續(xù)性,,在MCU的RAM中開辟了兩個緩沖區(qū),每個緩沖區(qū)的大小都是1 896 bit,,即237 B,。對講機工作時,輪流對這兩個緩沖區(qū)進行讀寫數(shù)據(jù)的操作,。
?
?
??? 數(shù)字對講機工作時發(fā)送端CMX618的工作流程圖見圖6,,CMX7041工作流程圖見圖7。?
?
?
?
??? 數(shù)字對講機最初處于檢測PTT鍵是否被按下的狀態(tài),。當(dāng)PTT鍵被按下時,,就啟動CMX618開始編碼,。CMX618處于編碼狀態(tài)時,每80 ms會產(chǎn)生36 B即288 bit的已編碼話音數(shù)據(jù),,并以中斷方式通知MCU,,MCU收到中斷信號后就會啟動其SPI外設(shè)從CMX618的內(nèi)部寄存器中將這36 B的語音數(shù)據(jù)讀到MCU的RAM緩沖區(qū)中。與此同時要根據(jù)DPMR協(xié)議填充相應(yīng)的協(xié)議數(shù)據(jù),,這些協(xié)議數(shù)據(jù)用于得知呼叫與被呼叫者的ID,,用于判斷呼叫類型是單呼、組呼,、短信息通信,、還是圖像通信等通信類型,因此關(guān)于協(xié)議的處理也是很重要的,。每當(dāng)產(chǎn)生4次中斷,,即320 ms時,就啟動CMX7041,,使其由IDLE狀態(tài)轉(zhuǎn)換為發(fā)送狀態(tài),,將緩沖區(qū)中數(shù)據(jù)即語音數(shù)據(jù)與協(xié)議數(shù)據(jù)一起經(jīng)調(diào)制后發(fā)送出去。?
??? CMX7041的發(fā)送機制如下,。會涉及到5個發(fā)送數(shù)據(jù)寄存器,,1個數(shù)百字節(jié)的緩沖器,1個調(diào)制解調(diào)模塊,;5個發(fā)送數(shù)據(jù)寄存器,,寬度都是16 bit,其中的四個半寄存器用于裝載待發(fā)送數(shù)據(jù),,剩余的8 bit用于裝載控制字節(jié),。CMX7041通過SPI總線將MCU緩沖區(qū)中的數(shù)據(jù)讀入到這5個發(fā)送數(shù)據(jù)寄存器中,,之后自動將這5個寄存器中的數(shù)據(jù)送入芯片內(nèi)緩沖器中,,每當(dāng)一次送入緩沖器的操作完成,CMX7041就會產(chǎn)生一個DataReady中斷,,此時,,MCU就將緩沖區(qū)中后面的數(shù)據(jù)再放到5個發(fā)送數(shù)據(jù)寄存器中。一直這樣持續(xù)下去,,直到MCU中前一半或者后一半緩沖區(qū)中的數(shù)據(jù)都被送入CMX7041中,。之后MCU所做的就是等待Txdone中斷的發(fā)生。Txdone中斷的發(fā)生就意味著MCU中緩沖區(qū)中的數(shù)據(jù)都被CMX7041調(diào)制完成并發(fā)送完畢,。值得注意的是CMX7041內(nèi)的緩沖器,。它既時刻接收由5個發(fā)送數(shù)據(jù)寄存器送過來的數(shù)據(jù),同時也在按照9.6 kb/s或者4.8 kb/s的速率向調(diào)制解調(diào)模塊發(fā)送數(shù)據(jù),,以供調(diào)制解調(diào)模塊將數(shù)據(jù)進行4fsk的調(diào)制,。也就是說緩沖器在接收數(shù)據(jù)的同時,也在送出數(shù)據(jù),,是一個動態(tài)的平衡過程,。有一點很重要,,就是一定不能讓這個緩沖器里面為空,這樣就會發(fā)生并不希望的Txdone中斷,。在不希望的Txdone中斷之后,,如果CMX7041再沒有得到來自MCU的使其從IDLE狀態(tài)轉(zhuǎn)換成發(fā)送狀態(tài)的命令,則其不會再調(diào)制任何數(shù)據(jù)和發(fā)送任何數(shù)據(jù),。這樣必然導(dǎo)致接收端無法正確解調(diào)數(shù)據(jù),,最終導(dǎo)致雙方通信的失敗。所以,,必須在CMX7041發(fā)生DataReady中斷的時刻立即向5個發(fā)送數(shù)據(jù)寄存器寫數(shù)據(jù),,既不可以在中斷發(fā)生之前寫(寫數(shù)據(jù)過快,CMX7041來不及處理,,緩沖器會溢出),,同樣也不能在中斷過后很久再寫(芯片內(nèi)的緩沖器會空,隨之產(chǎn)生Txdone中斷),。還有一個非常容易出問題的地方,,就是DataReady中斷發(fā)生的時間間隔問題。CMX7041這款芯片在這個問題上很智能,,它會針對內(nèi)部緩沖器的填滿程度而自動改變DataReady中斷發(fā)生的時間間隔,。例如:筆者設(shè)計的這個基帶系統(tǒng),CMX7041工作于9.6 kb/s的模式,,即每秒發(fā)送9600 bit位,,每產(chǎn)生一次DataReady中斷,相當(dāng)于發(fā)送了72 bit,,則可推算出DataReady中斷間隔應(yīng)該是7.5 ms,,然而事實上并不是這樣。調(diào)試程序時發(fā)現(xiàn),,中斷產(chǎn)生的間隔不到1 ms,。之所以這樣,是因為在MCU中開辟的緩沖區(qū)是237 B,,即每次CMX7041會調(diào)制并發(fā)送237 B的數(shù)據(jù),,數(shù)據(jù)的數(shù)量相對于CMX7041內(nèi)部數(shù)百字節(jié)的緩沖器來說并不多,緩沖器不會填得太滿,,所以就出現(xiàn)了這種中斷產(chǎn)生速度要快于之前計算時間的情況,。筆者又用一個例子來驗證,使CMX7041以死循環(huán)的發(fā)送方式發(fā)送數(shù)據(jù),,此時,,要發(fā)送數(shù)據(jù)的數(shù)量遠遠大于芯片內(nèi)部緩沖器的大小,,再觀察產(chǎn)生中斷的時間間隔,確實變成了7.5 ms,,驗證了推測,。?
??? CMX618產(chǎn)生的已編碼數(shù)據(jù)的速率是3.6 kb/s,CMX618產(chǎn)生4次中斷即320 ms會產(chǎn)生144 B數(shù)據(jù),,再加上協(xié)議數(shù)據(jù)共有237 B,,此時啟動CMX7041進入發(fā)送狀態(tài),CMX7041以9.6 kb/s的速率調(diào)制并發(fā)送這些數(shù)據(jù)需要197.5 ms,。CMX7041發(fā)送數(shù)據(jù)時有個特性,,會自動在要發(fā)送的數(shù)據(jù)前面添加72 bit的前導(dǎo)碼與48 bit的幀同步碼,這又會消耗12.5 ms,,因此CMX7041僅需要210 ms就可以將CMX618在320 ms內(nèi)產(chǎn)生的數(shù)據(jù)發(fā)送完畢,。發(fā)送完畢之后,CMX7041要進入IDLE狀態(tài)等待,,在下一個320 ms到來的時刻再啟動新一輪的調(diào)制與發(fā)送,。?
??? 數(shù)字對講機工作時接收端CMX7041的工作流程見圖8,CMX618工作流程圖見圖9,。?
?
?
?
??? 最初使CMX7041進入接收狀態(tài),,芯片會自動檢測幀同步,若檢測到,,會產(chǎn)生中斷來告知MCU,,之后MCU等待DataReady中斷,DataReady中斷發(fā)生就意味著調(diào)制解調(diào)模塊已經(jīng)解調(diào)好9 B的數(shù)據(jù),。此時,,MCU將這9 B數(shù)據(jù)通過SPI總線從5個接收數(shù)據(jù)寄存器中讀出放入MCU開辟的緩沖區(qū)中。當(dāng)CMX7041接收并解調(diào)完一整幀數(shù)據(jù),,即243 B時,,CMX7041進入IDLE狀態(tài),并置位使能CMX618解碼的標(biāo)志位,,在經(jīng)過一個時間長于1 ms的延時之后CMX7041進入接收狀態(tài),,以便檢測下一幀數(shù)據(jù)的到來。值得注意的是,,此處必須加延時,否則,,CMX7041會工作不正常,。?
??? 在CMX7041接收到最后一幀數(shù)據(jù)之后,要將CMX618停止解碼的標(biāo)志位置位,,MCU在檢測到此標(biāo)志位后使CMX618由解碼狀態(tài)進入IDLE狀態(tài),。MCU根據(jù)緩沖區(qū)中的協(xié)議信息得知這一幀是否為最后一幀,,有關(guān)協(xié)議信息的處理,此處不再贅述,。?
??? 當(dāng)使能CMX618解碼的標(biāo)志位置位之后,,立即啟動其進入解碼狀態(tài)。CMX618每隔80 ms產(chǎn)生一次中斷,,來表明其需要接收新的數(shù)據(jù)以供其內(nèi)部的解碼器進行解碼,,所以在CMX618產(chǎn)生中斷之時,MCU通過SPI總線將緩沖區(qū)中存儲的語音數(shù)據(jù)送入CMX618對應(yīng)的寄存器,。CMX618解碼時,,MCU每隔一定時間要檢測停止解碼的標(biāo)志位,如果檢測到標(biāo)志位已經(jīng)置位,,則CMX618必須由解碼狀態(tài)轉(zhuǎn)換為IDLE狀態(tài),。以上的通信流程在理想的通話環(huán)境可以很好地工作。?
??? 為了使系統(tǒng)可以很好地應(yīng)用在隨機的,、惡劣的無線信道的環(huán)境中,,需要以下措施:?
??? (1)在無線信道中丟幀是很正常的,可以設(shè)置一個計數(shù)器,,CMX7041收到幀時遞增,,CMX618每解碼一幀數(shù)據(jù)將計數(shù)器遞減。實際應(yīng)用中,,如果丟幀太多,,計數(shù)器會遞減到0,也就表明收到的語音數(shù)據(jù)都被解碼,,沒有新的數(shù)據(jù)可供解碼,,此時使CMX618由解碼狀態(tài)進入IDLE狀態(tài)。當(dāng)CMX7041又接收到新的數(shù)據(jù)后,,再啟動CMX618解碼,。在信道條件不好時,CMX618就會頻繁地切換狀態(tài),,這是很正常的,。?
??? (2)考慮到無線信道丟幀的頻繁性,將幀的長度設(shè)計得比較短,,本設(shè)計中的長度是243 B,。每丟一次幀帶來的影響是丟掉320? ms的語音數(shù)據(jù)。如果幀長度較長,,丟失的語音數(shù)據(jù)也會較多,。?
??? 本文設(shè)計的基帶系統(tǒng)已經(jīng)應(yīng)用在數(shù)字對講機的樣機研發(fā)當(dāng)中,測試效果不錯,,有很好的應(yīng)用前景,。?
參考文獻?
[1] CML Microcircuits Inc.CMX608/CMX618/CMX638 RALCWI?vocoders datasheet.http://www.cm1micro.com,,2008,3.?
[2] CML Microcircuits Inc.CMX7031/CMX7041 the two-way?radio processor 4FSK data modem datasheet.http://www.cm1micro.com,,2007,,4.?
[3] ETSI.ETSI TS 102 490.http://www.etsi.org,2005,,12.?
[4] NXP Inc.LPC2131/2132/2134/2136/2138 datasheet.http://www.nxp.com,,2005,4.