一、簡訊AT命令
1、AT+CPMS 作用:設定簡訊儲存位置
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)
複製程式碼
引數說明:
“SM”(U)SIM資訊儲存 “ME”移動裝置資訊儲存 “MT”與“ME”儲存相同 "SR"在EC20 AT手冊也沒找到相應說明,暫時置之不理。
mem1:要從該記憶體儲存中讀取和刪除的訊息 mem2:訊息將被寫入併傳送到該記憶體儲存 mem3:接收到的訊息將被放置在這個記憶體儲存中(前提沒有使用AT+CNMI進行設定)
AT+CPMS="SM","SM","SM"設定簡訊儲存在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
作用:設定簡訊格式
AT+CMGF=?
+CMGF: (0,1)
OK
複製程式碼
引數說明:
0為PDU模式 1為Text模式
注意:在CDMA網路下,只支援Test模式。
4、AT+CMGS
作用:傳送簡訊
(1)先設定Test模式
AT+CMGF=1 不然會出現
AT+CMGS="139000000"
+CMS ERROR: 304
複製程式碼
(2)設定終端字符集
AT+CSCS="GSM"
OK
複製程式碼
(3)輸入號碼簡訊內容
AT+CMGS="13900000000"
> 666
>
+CMGS: 46
OK
複製程式碼
AT+CMGS="13900000000"
回車後出現> 輸入完內容回車,接著ctrl + z傳送。
5、AT+CMGR
作用:讀取簡訊
AT+CMGR=< index >
引數index 手冊翻譯內容如下:
關聯記憶體支援的位置號範圍內的整數型別值。(後面一大連串的引數說明搞得頭暈暈的,感覺暫時也不用關注那麼細。)
AT+CMGR=0表示接收到的第一條簡訊,AT+CMGR=1表示接受到的第二條簡訊,以此類推。
Test模式
“REC UNREAD” Received unread messages 收到未讀訊息
“REC READ” Received read messages 收到已讀資訊
“STO UNSENT” Stored unsent messages 儲存未傳送的訊息
“STO SENT” Stored sent messages 儲存已傳送的訊息
“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
作用:羅列出所有簡訊
引數:查詢對應狀態的所有簡訊
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
複製程式碼
羅列出所有簡訊內容。
7、AT+CMGD
作用:刪除簡訊
AT+CMGD=?
+CMGD: (0,1,2,3),(0-4)
複製程式碼
+CMGD: (list of supported s),(list of supported s)
引數: index指的就是簡訊索引號,從0開始,3表示第四條簡訊。
delflag
0 刪除索引號指定的簡訊
1 刪除所有從儲存器讀取的簡訊
2 刪除所有從儲存器讀取的簡訊,併傳送手機簡訊
3 刪除所有從儲存中讀取的簡訊,以及所有傳送和未傳送的手機簡訊
4 刪除儲存器中所有簡訊
複製程式碼
AT+CMGD=1 //刪除索引為1的簡訊
OK
AT+CMGD=1,4 //刪除所有簡訊
OK
複製程式碼
8、AT+CSCA
作用:查詢簡訊中心號碼。
AT+CSCA?
+CSCA: "+8613010300000",145
OK
複製程式碼
二、離線簡訊問題分析
1、簡訊作用
(1)簡訊主要作用用來引數設定與控制裝置。 特殊使用場景,傳送復位簡訊。裝置每次開機會去讀取簡訊內容。因此必須保證已讀的簡訊刪除,否則裝置會不斷復位。 (2)由於SIM卡只有1萬到10萬次的讀寫次數和40-50短訊息的儲存空間。使用壽命與空間的問題,導致前期設定接收到簡訊不儲存直接通知TE(Terminal Equipment 終端裝置)。
問題: 離線傳送控制簡訊,裝置重新上電後無法正常接收,應用層沒法讀取到離線簡訊的控制命令。
疑問: 離線簡訊的具體原理是否事先存放在基站中,等手機終端廣播告知基站已經駐網然後下發到手機終端上? 如果是這樣那麼整個簡訊收發流程跟正常裝置線上是一致的?那為何接收不到呢?
2、簡單簡訊原理闡述
(1)手機收發簡訊流程
源手機-》基站-》簡訊中心-》基站-》目的手機
(2)基站
基站會不斷廣播資訊 方便手機搜尋到基站 不同基站的廣播頻率不一致 GSM系統 掃描整個頻段,訊號最強為合適基站【類比收音機收聽廣播的原理】 CDMA系統 基站固定使用頻率。【控制載頻 調諧】
(3)基站如何找到手機
基站不斷廣播,手機連上時當前基站會傳送個位置區。當手機發現自己當前位置區發生變化,會傳送自己當前位置,無線網路會記錄在資料庫裡(位置暫存器) 手機週期性告訴無線網路自己當前的位置。
(4)流程說明
- 源手機傳送簡訊,其實是傳送到基站。手機與基站有個專門的通道,控制通道為SMS簡訊提供通路。
- 每個手機都有個SMSC(簡訊業務中心),當其他人給自己手機傳送SMS簡訊時,其實是傳送給簡訊業務中心。這種機制應該類似早期的傳呼機原理。
- 該條簡訊將以控制通道上小型資料包的形式先通過SMSC(簡訊業務中心),然後通過基站將簡訊傳送到手機。同理,當自己傳送簡訊時,手機將通過控制通道將簡訊傳送到基站,再由基站傳送到SMSC,最後從這個位置到達接收目標。
3、目前的做法
為了保證離線簡訊能夠被應用層正常獲取。
- 不管什麼狀態下傳送的簡訊,都先儲存到sim卡中。
- 裝置初始化之後,等執行程式讀取該簡訊之後再把sim卡的內容刪除。
主要的問題依然在sim卡讀寫壽命問題,不過還好簡訊控制命令使用頻率不是很高!
參考資料:移遠EC20 AT指令手冊、《大話無線資料通訊》