傳統 AT+CMGL 輪詢模式缺點明顯:
OK。解決之道:設定 ME 主動通知 TE(PC/單晶片),類比硬體中斷機制。
AT+CNMI 核心參數依 TP-DCS 位元定義 4 類(Class 0-3)及無類別:
| 類別 | 行為 |
|---|---|
| Class 0 | 僅顯示,不儲存 |
| Class 1 | 儲存於 ME 記憶體 |
| Class 2 | 儲存於 SIM 卡 |
| Class 3 | 直接轉發至 TE |
AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]] 關鍵參數:
0不通知,1空閒才通知,2忙碌緩衝後通知,3混合傳輸。推薦 2。0:全存預設位置(含 Class 3)。1:存預設位置並通知 TE(含 Class 3)。推薦 1,配合 AT+CMGR 讀取。2:Class 2 存 SIM 並通知;其餘直接轉發 TE(不佔用閃存,延長壽命)。3:Class 3 直接轉發;其餘同 1。mode=2, mt=1(通知+讀取,最通用)AT+CNMI=? // 查支援範圍
+CNMI: (0-2),(0-3),(0,2,3),(0,1),(0,1)
OK
AT+CNMI=2,1 // 設定 mode=2, mt=1
OK
... 等待訊息 ...
+CMTI: "ME",8 // 收到通知:第 8 條存於 ME
AT+CMGR=8 // 讀取第 8 條
+CMGR: 8,27
0891683108200505F0240D91683158812764F80000402052110373800741E19058341E01 // PDU 內容
OK
AT+CMGD=8 // 刪除釋放空間
OK
mode=2, mt=2(直轉模式,省閃存)
AT+CNMI=2,2
OK
... 訊息到達 ...
+CMT: ,26
0891683108200505F0040D91683158812764F8000840205211639180064F60597D0021 // 直接輸出 PDU,無需讀取指令
方案 B 需解析
+CMT直接輸出的 PDU,處理較複雜;但若發送端可控(只發 Class 1/無類別),則接收端 ME 不寫入閃存,極大延長模組壽命。
+CMTI: 或 +CMT: 非請求結果碼(URC)。AT+CMGR 或 AT+CNMI 重新同步。採用 AT+CNMI=2,1 實現「收到通知 → 主動讀取 → 刪除」閉環,是工業級 GSM 模組應用的標準作法;若追求極致可靠性與模組壽命,且雙端可控,mt=2 直轉模式更具優勢。核心在於從輪詢轉向事件驅動,將延遲從「秒級」壓縮至「毫秒級」。