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