嵌入式系統(tǒng)中短消息實時處理的實現(xiàn)
引言 gsm數(shù)字蜂窩移動通信技術(shù)已得到成熟而廣泛的應(yīng)用,目前以建成的覆蓋全國的gsm數(shù)字蜂窩移動通信網(wǎng),是我國公眾移動通信網(wǎng)的重要方式。它能提供話音、短消息、數(shù)據(jù)等多種業(yè)務(wù)。短消息服務(wù)是gsm網(wǎng)絡(luò)的一項重要業(yè)務(wù),在遠(yuǎn)距離監(jiān)控、數(shù)據(jù)采集、gps定位、無線報警、繳費通知、車輛調(diào)度等領(lǐng)域有著廣泛的應(yīng)用。 gsm模塊通常都提供uart串行接口,因此很容易和單片機在物理層上互聯(lián)。使用符合gsm07.05和gsm07.07標(biāo)準(zhǔn)的at指令集,可以使gsm模塊方便地完成短消息接收/發(fā)送等各種操作。其通信框圖如圖1所示。 移動設(shè)備me主要負(fù)責(zé)與gsm網(wǎng)絡(luò)進(jìn)行無線通信,終端適配器ta負(fù)責(zé)me與外部終端設(shè)備te的信息交換,at指令就是在ta與te之間傳送的。te可以是pc,或者是單片機系統(tǒng),通過at指令與me進(jìn)行信息交互?,F(xiàn)在市場上的gsm模塊,如tc35、falcom等,都把me和ta集成在一起,這樣整個通信就變成了te與gsm模塊之間的通信了。 一般地,gsm模塊在處理短消息時,采用一問一答的信息交互方式,這比較符合at指令集的精神。但在實際應(yīng)用中,發(fā)現(xiàn)這種方法存在一定的缺點:模塊接收到短消息并存儲起來,用戶再用查詢方式,發(fā)送指令“at+cmgl”或“at+cmgr”,使短消息傳送到te,這中間會有一定的延時。另外,由于sim卡容量有限,要保證短消息及時準(zhǔn)備地接收,還要經(jīng)常刪除sim卡中的短消息,這樣多次的讀寫操作,勢必會影響sim卡的壽命。因此,有必要進(jìn)行一些軟件設(shè)置,使短消息不通過sim卡,而直接發(fā)送至終端設(shè)備。本文給出一種在嵌入式系統(tǒng)中實時處理短消息的實現(xiàn)方法,當(dāng)移動設(shè)備gsm模塊接收到短消息時,直接將消息轉(zhuǎn)發(fā)到終端設(shè)備,提高系統(tǒng)的響應(yīng)速度和處理效率。 1 硬件接口實現(xiàn) 一般,gsm無線通信控制終端采用標(biāo)準(zhǔn)的gsm模塊進(jìn)行二次開發(fā),目前市場上很多,如tc35、falcom、wismo3等。它們都具備gsm無線通信的全部功能,支持gsm07.05,gsm07.07所定義的at指令集。 在本設(shè)計中,采用的gsm通信模塊為falcomc2d,單片機使用的是atmel公司的高速8位處理器atmega128。atmega128內(nèi)部集成有4kb的ram,4kb的eeprom,128kb的flash,以及2個uart串行接口等。其高速和大容量ram的特性,為處理短消息這樣的大數(shù)據(jù)包提供了便利;同時,節(jié)省了外圍器件,使得硬件結(jié)構(gòu)簡化,提高系統(tǒng)可靠性。中文液晶屏用來顯示接收到的中英文短信。系統(tǒng)的硬件接口框圖如圖2所示。 2 系統(tǒng)參數(shù)設(shè)置 短消息的發(fā)送和接收控制模式有三種:block模式、pdu模式和text模式。使用block模式需要手機生產(chǎn)廠家提供驅(qū)動支持。目前,pdu模式已取代block模式,而text模式不支持中文。因此,為了系統(tǒng)的通用性,兼容中英文短消息的發(fā)送接收,本系統(tǒng)使用pdu模式來處理短消息。 在進(jìn)行系統(tǒng)設(shè)置前,先簡要說明一下短消息類(class)的概念:根據(jù)指定存儲的位置,短消息分為class0-3四個類,也可以不指定類別(no class),由移動設(shè)備按默認(rèn)設(shè)置進(jìn)行處理,存儲到內(nèi)存或者sim卡中。在tpdu的tp-dcs字節(jié)中,當(dāng)bit7-bit4為00x1、1111時,bit1-bit0指示消息所屬類。 00——class 0,可直接顯示。 01——class 1,默認(rèn)儲存在me內(nèi)存中。 02——class 2,儲存在sim卡中。 03——class 3,可直接傳輸?shù)浇K端設(shè)備te。 默認(rèn)的短消息存在sim卡中,無類別的短消息通常也存在sim卡中。 gsm modem一般都支持一條“at+cnmi”指令,用于設(shè)定當(dāng)有某類短消息到達(dá)時,如何處理它——只儲存在制定的內(nèi)存(易失的/非易失的)中;先儲存后通知te;直接轉(zhuǎn)發(fā)到te,等等。 “at+cnmi”指令語法為: at+cnmi=<mode>,<mt>,<bm>,<ds>,<bfr> (1)<mode>控制通知te的方式。 0——先將通知緩存起來,再按照<mt>的值進(jìn)行發(fā)送。 1——在數(shù)據(jù)線空閑的情況下,通知te,否則,不通知te。 2——數(shù)據(jù)線空閑時,直接通知te;否則先將通知緩存起來,待數(shù)據(jù)線空閑時再行發(fā)送。 3——直接通知te。在數(shù)據(jù)線被占用的情況下,通知te的消息將混合在數(shù)據(jù)中一起傳輸。 (2)<mt>設(shè)置短消息存儲和通知te的內(nèi)容。 0——接受的短消息存儲到默認(rèn)的內(nèi)存位置(包括class 3),不通知te。 1——接收的短消息儲存到默認(rèn)的內(nèi)存位置,并且向te發(fā)出通知(包括class 3)。通知的形式為: +cmti:”sm”,<index> 2——對于class 2短