單片機(jī)與手機(jī)一般采用串行異步通信接口,具有紅外和通信電纜兩種連接方式,通信速度可設(shè)定,通常為19200bps。采用紅外接口的優(yōu)點(diǎn)是單片機(jī)系統(tǒng)與手機(jī)電氣隔離,相互不干擾,接口各自獨(dú)立,使用方便;缺點(diǎn)是通信距離較短,紅外傳播的方向性對(duì)接口相對(duì)位置有要求。采用電纜連接時(shí),數(shù)據(jù)傳輸?shù)目煽啃暂^好;其主要缺點(diǎn)是接口的電氣參數(shù)不兼容,設(shè)計(jì)不當(dāng)時(shí)會(huì)對(duì)手機(jī)的通信質(zhì)量產(chǎn)生影響。筆者經(jīng)過(guò)實(shí)踐設(shè)計(jì)的接口電平轉(zhuǎn)換電路如圖1。
GSM的短信息業(yè)務(wù)SMS利用信令信道傳輸,這是GSM通信網(wǎng)所特有的。它不用撥號(hào)建立連接,把要發(fā)的信息加上目的地址發(fā)送到短信息服務(wù)中心,經(jīng)短消息服務(wù)中心完成存儲(chǔ)后再發(fā)送給最終的信宿。所以當(dāng)目的GSM終端沒(méi)開(kāi)機(jī)時(shí)信息不會(huì)丟失。每個(gè)短消息的信息量限制為160字節(jié)。
現(xiàn)在市場(chǎng)上大多數(shù)手機(jī)均支持GSM07.05規(guī)定的AT指令集。該指令集是ETSI(歐洲通信技術(shù)委員會(huì))發(fā)布的,其中包含了對(duì)SMS的控制。利用GSM手機(jī)的串行接口,單片機(jī)向手機(jī)收發(fā)一系列的AT命令,就能達(dá)到控制手機(jī)收發(fā)SMS的目的。ETSI的GSM07.05中用于SMS收發(fā)控制的主要AT命令見(jiàn)表1。
表1 常用AT指令
GSM手機(jī)通過(guò)異步通信接口實(shí)現(xiàn)對(duì)SMS的控制共有三種接入?yún)f(xié)議:Block Mode;基于AT命令的TextMode;基于AT命令的PDU Mode。PDU模式是發(fā)送或接收手機(jī)SMS信息的一種方法,短信息正文經(jīng)過(guò)十六進(jìn)制編碼后被傳送。目前,PDU Mode應(yīng)用最為廣泛,基本上全國(guó)所有的電信局都提供支持PDU Mode的短消息業(yè)務(wù)。有些地址則不支持Text Mode和Block Mode,這就限制了這兩種接入?yún)f(xié)議的應(yīng)用,而且PDU Mode已有取代Block Mode的趨勢(shì)。為了保證系統(tǒng)具有廣泛的適用性,本文采用PDU模式收發(fā)SMS。
PDU相當(dāng)于一個(gè)數(shù)據(jù)包,它由構(gòu)成消息(SMS)的信息組成。作為一種數(shù)據(jù)單元,它必須包含源/目的地址、保護(hù)(有效)時(shí)間、數(shù)據(jù)格式、協(xié)議類(lèi)型和正文,正文長(zhǎng)度可達(dá)140字節(jié),它們都以十六進(jìn)制表示。PDU結(jié)構(gòu)根據(jù)短消息由移動(dòng)終端發(fā)起或以移動(dòng)終端為目的而不同。
當(dāng)由移動(dòng)終端發(fā)起時(shí),PDU的格式為:
|
SMSC |
PDU類(lèi)型 |
MR |
DA |
PID |
DCS |
VP |
UDL |
UD(0~140octed) |
當(dāng)以移動(dòng)終端為目的時(shí),PDU的格式為:
|
SMSC |
PDU類(lèi)型 |
OA |
PID |
DCS |
SCTS |
UDL |
UD(0~140octed) |
其中,SMSC為短消息業(yè)務(wù)中心地址,DA/OA為源/目的地址,PID為協(xié)議識(shí)別,DCS為數(shù)據(jù)編碼,UDL為用戶數(shù)據(jù)長(zhǎng)度,UD為用戶數(shù)據(jù),VP為有效時(shí)間,MR指明是發(fā)出信息,SCTS指明短消息到達(dá)業(yè)務(wù)中心的時(shí)間。
2 PDU格式下短信息的接收
根據(jù)設(shè)置不同,手機(jī)將收到的短消息保存在緩存單元或存入SIM卡,單片機(jī)從手機(jī)中接收短消息實(shí)質(zhì)上就是從SIM或緩存中讀出信息。這主要利用AT+CMGR和AT+CMGL兩條指令來(lái)完成,其工作過(guò)程見(jiàn)圖2。
由于不同的廠商對(duì)AT指令集的解釋代碼和響應(yīng)信息不一樣,所以單片機(jī)首先要確認(rèn)能否與手機(jī)建立起通信,一般用ATE指令完成此確認(rèn);然后用AT+CMGF指令選定短消息的數(shù)據(jù)格式;在收到手機(jī)的正確回答反以AT指令完成讀出功能。一般用AT+CMGL讀取以前的信息,在收到手機(jī)的RING(振鈴)數(shù)據(jù)時(shí),用AT+CMGR讀取實(shí)時(shí)信息。
以下是筆者設(shè)計(jì)的物流數(shù)據(jù)采集系統(tǒng)中用到的接收SMS的一個(gè)實(shí)例,它說(shuō)明了PDU模式的應(yīng)用。單片機(jī)發(fā)送和接收(手機(jī)回答)均為ASCII碼。所用手機(jī)為SIEMENS S3508i。
操作過(guò)程如下({}內(nèi)為注釋?zhuān)?
發(fā)送:ATE
手機(jī)回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選用PDU格式}
手機(jī)回答:OK {允許選擇PDU格式}
發(fā)送:AT+CMGL=2 {列出已有的短信息}
手機(jī)回答:+CMGL:1,2,,24{1表示信息個(gè)數(shù),2表示未發(fā)信息,24表示信息總?cè)萘縸
0D71683108370105F004000D81683179133208F10000026080410033802632184CF682D
95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608
OK
以上這組PDU格式的十六進(jìn)制字符串,不但包含了短消息的內(nèi)容,同時(shí)包含了發(fā)送者的手機(jī)號(hào)碼、短信息中心號(hào)碼、短消息發(fā)送時(shí)間等。
下面對(duì)信息內(nèi)容進(jìn)行分析:
0D:短信息中心地址(號(hào)碼)長(zhǎng)度。
91:短信息中心號(hào)碼類(lèi)型,91是TON/NPI。TON/NPI遵守International/E.164標(biāo)準(zhǔn),指在號(hào)碼前需加+號(hào);此外還可直有其他數(shù)值,但91最常用。
683108370105F0:SMSC 短信息所使用的服務(wù)中心號(hào)碼13807310500。它經(jīng)過(guò)十六進(jìn)制以字節(jié)為單位的高低半字節(jié)換位處理,號(hào)碼是奇數(shù)的添F,構(gòu)成一個(gè)HEX字節(jié)。
04:PDU類(lèi)型,文件頭字節(jié)。
0B:主叫號(hào)碼長(zhǎng)度。
81:主叫號(hào)碼類(lèi)型。
3179133208F1:0A主叫號(hào)碼,也經(jīng)過(guò)了處理,實(shí)際號(hào)碼為13973123801。
00:PID,為協(xié)議標(biāo)識(shí)。
00:DCS短信息編碼類(lèi)型是GSM Default Alphabet,即由7位ASCII碼移位組成8位十六進(jìn)制碼(octet),其方法見(jiàn)表2。
|
1sthex |
B0 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
|
2ndhex |
C1 |
C0 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
|
3rdhex |
D2 |
D1 |
D0 |
C6 |
C5 |
C4 |
C3 |
C2 |
|
4thhex |
E3 |
E2 |
E1 |
E0 |
D6 |
D5 |
D4 |
D3 |
|
5thhex |
F4 |
F3 |
F2 |
F1 |
F0 |
E6 |
E5 |
E4 |
|
6thhex |
G5 |
G4 |
G3 |
G2 |
G1 |
G0 |
F6 |
F5 |
|
6thhex |
H6 |
H5 |
H4 |
H3 |
H2 |
H1 |
H0 |
G6 |
02608041003380:SCTS短信息發(fā)送時(shí)間,02/06/08/14:00:33.08。
26:UDL經(jīng)處理后的8位碼(octet)短信息字節(jié)長(zhǎng)度,它小于消息ASCII碼的長(zhǎng)度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608:UD 編碼后的PDU數(shù)據(jù),短信息內(nèi)容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。
3 短信息的發(fā)送
與接收短信息一樣,發(fā)送時(shí)也要先建立聯(lián)接,傳送一些初始化指令,然后發(fā)送短消息內(nèi)容。下面是用SIEMENS S3508i發(fā)送一個(gè)短信息的例子,內(nèi)容為:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII碼為:“32030322F30362F30382F31333A34382049443130324F4B
2049443130334F4B2049443230314641494C20”。
發(fā)送:ATE {請(qǐng)求建立聯(lián)接}
手機(jī)回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選擇PDU模式}
手機(jī)回答:OK
發(fā)送:AT+CSMS=0{檢測(cè)手機(jī)是否支持SMS命令}
手機(jī)回答:OK
發(fā)送:AT+CMGS=52{發(fā)送短信息,52 octets(不包括最初9個(gè)短信息元字節(jié))}
手機(jī)回答:>{允許上傳數(shù)據(jù),ASCII碼是($20H,$2EH)}
發(fā)送:0891683108701305F011000B813179133208F10000AA2632184CF682D95
E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A
不計(jì)最初9個(gè)短消息信元字節(jié),本短信息有52字節(jié)(104個(gè)字符)。AT+CMGS僅說(shuō)明了SMSC信息內(nèi)容的長(zhǎng)度,在收到手機(jī)回答的>符號(hào)手才發(fā)送PDU數(shù)據(jù)串,并以(CTRL^Z)結(jié)束。

PDU數(shù)據(jù)串的內(nèi)容說(shuō)明如下:
08:短信息信元SMSC(短信息中心號(hào)碼)的字節(jié)長(zhǎng)度
91:短信息中心號(hào)碼類(lèi)型,91表明中心號(hào)碼是國(guó)際通用電話號(hào)碼。
683108701305F0:短信息中心號(hào)碼:8613807310500。
11:PDU SMS發(fā)送的文件頭字節(jié)。這里11指正常發(fā)送短信息。
00:信息類(lèi)型。這里00指讓手機(jī)自動(dòng)加上主叫號(hào)碼。
0B:被叫號(hào)碼長(zhǎng)度。
81:被叫號(hào)碼類(lèi)型。
3179133208F1:被叫號(hào)碼13973123801。
00:協(xié)議標(biāo)識(shí)。
00:短信息編碼類(lèi)型是GSM Default Alphabet。
AA:短信息被保留的時(shí)間為4天,其計(jì)算方法依照表3。
| VP值 |
短消息有效時(shí)間長(zhǎng)度 |
| 0~143 |
(VP+1)×5分鐘 |
| 144~167 |
12時(shí)+(VP-143)×30分 |
| 168~196 |
1天×(VP-166) |
| 197~255 |
1周×(VP-192) |
26:PDU格式短信息編碼后字節(jié)長(zhǎng)度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D
97A02451068B1983492608:編碼后的PDU數(shù)據(jù),短信息內(nèi)容為“2002/06/08/13:
48ID102OKID103OK ID201FAIL”。
1A:ASCII碼CTRL^Z:報(bào)文結(jié)束標(biāo)志。
4 應(yīng)用情況及常見(jiàn)主要問(wèn)題的解決
筆者用MCS-51系列的單片機(jī)研制了一個(gè)手持式的數(shù)據(jù)采集產(chǎn)品,通過(guò)SIMEENS手機(jī),利用GSM的SMS傳輸數(shù)據(jù)。經(jīng)過(guò)在國(guó)內(nèi)多個(gè)省市較大數(shù)量長(zhǎng)期廣泛的使用,性能良好,沒(méi)有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。證明上述設(shè)計(jì)用,性能良好,沒(méi)有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。證明上述設(shè)計(jì)是正確的。但在調(diào)試和試用階段也遇到了如下問(wèn)題:
(1)接口電平
手機(jī)的電纜接口電平一般是3V左右,單片機(jī)系統(tǒng)的工作電壓一般為2.7~5.5V,范圍較寬,為保證數(shù)據(jù)傳輸?shù)恼_,需在接口加電平限制電路,詳見(jiàn)圖1。
(2)部分城市無(wú)法使用
一些城市的SMS平臺(tái)不允許使用缺省短消息服務(wù)中心號(hào)碼的協(xié)議,只需在發(fā)送的PDU數(shù)據(jù)前面幾個(gè)字節(jié)加上中心號(hào)碼即可,詳見(jiàn)本文發(fā)送實(shí)例。
(3)不能接收已正確發(fā)送的短消息
除GSM的SMS信道擁塞原因外,主要是PDU中PID字節(jié)的設(shè)置,使得收到的信息要存入SIM卡,而SIM卡已滿,故不再接收信息。改變PID的設(shè)置即可。
(4)收不到開(kāi)機(jī)前的短消息
主要是發(fā)送數(shù)據(jù)時(shí),對(duì)短消息有效時(shí)間VP值設(shè)置不當(dāng)造成的。