一、短信AT命令
1、AT+CPMS
作用:設(shè)置短信存儲位置
AT+CPMS=?
+CPMS: ("ME","MT","SM","SR"),("ME","MT","SM","SR"),("ME","MT","SM","SR")
+CPMS: (list of supported <mem1>s),(list of supported<mem2>s),(list of supported<mem3>s)
參數(shù)說明:
“SM”(U)SIM信息存儲
“ME”移動設(shè)備信息存儲
“MT”與“ME”存儲相同
"SR"在EC20 AT手冊也沒找到相應(yīng)說明,暫時置之不理。
mem1:要從該內(nèi)存存儲中讀取和刪除的消息
mem2:消息將被寫入并發(fā)送到該內(nèi)存存儲
mem3:接收到的消息將被放置在這個內(nèi)存存儲中(前提沒有使用AT+CNMI進行設(shè)置)
AT+CPMS="SM","SM","SM"設(shè)置短信存儲在sim卡中。
2、AT+CNMI
作用:SMS事件報告配置
AT+CNMI=?
+CNMI: (0-2),(0-3),(0,2),(0-2),(0,1)
OK
詳細說明,參考:https://blog.csdn.net/chenwr2018/article/details/88313436
3、AT+CMGF
作用:設(shè)置短信格式
AT+CMGF=?
+CMGF: (0,1)
OK
參數(shù)說明:
0為PDU模式
1為Text模式
注意:在CDMA網(wǎng)絡(luò)下,只支持Test模式。
4、AT+CMGS
作用:發(fā)送短信
(1)先設(shè)置Test模式
AT+CMGF=1
不然會出現(xiàn)
AT+CMGS="139000000"
+CMS ERROR: 304
(2)設(shè)置終端字符集
AT+CSCS="GSM"
OK
(3)輸入號碼短信內(nèi)容
AT+CMGS="13900000000"
> 666
>
+CMGS: 46
OK
AT+CMGS="13900000000"
回車后出現(xiàn)>
輸入完內(nèi)容回車,接著ctrl + z發(fā)送。
5、AT+CMGR
作用:讀取短信
AT+CMGR=< index >
參數(shù)index 手冊翻譯內(nèi)容如下:
關(guān)聯(lián)內(nèi)存支持的位置號范圍內(nèi)的整數(shù)類型值。(后面一大連串的參數(shù)說明搞得頭暈暈的,感覺暫時也不用關(guān)注那么細。)
AT+CMGR=0表示接收到的第一條短信,AT+CMGR=1表示接受到的第二條短信,以此類推。
Test模式
“REC UNREAD” Received unread messages 收到未讀消息
“REC READ” Received read messages 收到已讀信息
“STO UNSENT” Stored unsent messages 存儲未發(fā)送的消息
“STO SENT” Stored sent messages 存儲已發(fā)送的消息
“ALL” All messages
PDU模式
0 Received unread messages
1 Received read messages
2 Stored unsent messages
3 Stored sent messages
4 All messages
AT+CMGF=1
OK
AT+CMGR=2
+CMGR: "REC UNREAD","139000000000",,"19/03/07,19:29:33+32",161,36,0,0,"+8613010383500",145,4
2333
OK
6、AT+CMGL
作用:羅列出所有短信
參數(shù):查詢對應(yīng)狀態(tài)的所有短信
AT+CMGL=?
+CMGL: ("REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL")
OK
AT+CMGL="ALL"
+CMGL: 0,"REC READ","13900000000",,"19/03/07,19:22:15+32",161,2
66
+CMGL: 1,"REC READ","13900000000",,"19/03/07,19:24:38+32",161,3
999
+CMGL: 2,"REC READ","13900000000",,"19/03/07,19:29:33+32",161,4
2333
+CMGL: 3,"REC READ","13900000000",,"19/03/07,19:41:36+32",161,10
chenwr2018
OK
羅列出所有短信內(nèi)容。
7、AT+CMGD
作用:刪除短信
AT+CMGD=?
+CMGD: (0,1,2,3),(0-4)
+CMGD: (list of supported <index>s),(list of supported <delflag>s)
參數(shù):
index指的就是短信索引號,從0開始,3表示第四條短信。
delflag
0 刪除索引號指定的短信
1 刪除所有從存儲器讀取的短信
2 刪除所有從存儲器讀取的短信,并發(fā)送手機短信
3 刪除所有從存儲中讀取的短信,以及所有發(fā)送和未發(fā)送的手機短信
4 刪除存儲器中所有短信
AT+CMGD=1 //刪除索引為1的短信
OK
AT+CMGD=1,4 //刪除所有短信
OK
8、AT+CSCA
作用:查詢短信中心號碼。
AT+CSCA?
+CSCA: "+8613010300000",145
OK
二、離線短信問題分析
1、短信作用
(1)短信主要作用用來參數(shù)設(shè)置與控制設(shè)備。
特殊使用場景,發(fā)送復(fù)位短信。設(shè)備每次開機會去讀取短信內(nèi)容。因此必須保證已讀的短信刪除,否則設(shè)備會不斷復(fù)位。
(2)由于SIM卡只有1萬到10萬次的讀寫次數(shù)和40-50短消息的存儲空間。使用壽命與空間的問題,導(dǎo)致前期設(shè)置接收到短信不存儲直接通知TE(Terminal Equipment 終端設(shè)備)。
問題:
離線發(fā)送控制短信,設(shè)備重新上電后無法正常接收,應(yīng)用層沒法讀取到離線短信的控制命令。
疑問:
離線短信的具體原理是否事先存放在基站中,等手機終端廣播告知基站已經(jīng)駐網(wǎng)然后下發(fā)到手機終端上?
如果是這樣那么整個短信收發(fā)流程跟正常設(shè)備在線是一致的?那為何接收不到呢?
2、簡單短信原理闡述
(1)手機收發(fā)短信流程
源手機-》基站-》短信中心-》基站-》目的手機
(2)基站
基站會不斷廣播信息 方便手機搜尋到基站
不同基站的廣播頻率不一致
GSM系統(tǒng) 掃描整個頻段,信號最強為合適基站【類比收音機收聽廣播的原理】
CDMA系統(tǒng) 基站固定使用頻率。【控制載頻 調(diào)諧】
(3)基站如何找到手機
基站不斷廣播,手機連上時當(dāng)前基站會發(fā)送個位置區(qū)。當(dāng)手機發(fā)現(xiàn)自己當(dāng)前位置區(qū)發(fā)生變化,會發(fā)送自己當(dāng)前位置,無線網(wǎng)絡(luò)會記錄在數(shù)據(jù)庫里(位置寄存器)
手機周期性告訴無線網(wǎng)絡(luò)自己當(dāng)前的位置。
(4)流程說明
- 源手機發(fā)送短信,其實是發(fā)送到基站。手機與基站有個專門的通道,控制通道為SMS短信提供通路。
- 每個手機都有個SMSC(短信業(yè)務(wù)中心),當(dāng)其他人給自己手機發(fā)送SMS短信時,其實是發(fā)送給短信業(yè)務(wù)中心。這種機制應(yīng)該類似早期的傳呼機原理。
- 該條短信將以控制通道上小型數(shù)據(jù)包的形式先通過SMSC(短信業(yè)務(wù)中心),然后通過基站將短信發(fā)送到手機。同理,當(dāng)自己發(fā)送短信時,手機將通過控制通道將短信發(fā)送到基站,再由基站傳送到SMSC,最后從這個位置到達接收目標(biāo)。
3、目前的做法
為了保證離線短信能夠被應(yīng)用層正常獲取。
- 不管什么狀態(tài)下發(fā)送的短信,都先保存到sim卡中。
- 設(shè)備初始化之后,等執(zhí)行程序讀取該短信之后再把sim卡的內(nèi)容刪除。
主要的問題依然在sim卡讀寫壽命問題,不過還好短信控制命令使用頻率不是很高!
參考資料:移遠EC20 AT指令手冊、《大話無線數(shù)據(jù)通信》