首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

透過序列埠即時接收簡訊 (上):AT+CNMI 主動通知機制與兩種運作模式詳解

     編輯:VC 教學

輪詢模式的缺點

  • 延遲取決於查詢間隔
  • 每次 AT+CMGL 需 5-10 秒完成,佔用頻寬

即時通知:AT+CNMI

類比中斷機制。ME (手機/模組) 收到簡訊後主動向 TE (PC/MCU) 發送通知或直接轉發內容。

簡訊類別 (Class) 與 TP-DCS Bit 映射

Class行為TP-DCS Bit7-4 / Bit1-0
0僅顯示,不存儲00x1 / 00
1存入 ME 記憶體00x1 / 01
2存入 SIM 卡00x1 / 10
3直接轉發 TE00x1 / 11
無指定依預設處理其他

AT+CNMI 參數詳解

AT+CNMI=[[,[,[,[,]]]]]
  • mode 通知方式:0=不通知、1=閒時通知、2=忙時緩衝後通知、3=忙時混合傳輸
  • mt 簡訊處置:
    • 0: 全部存預設位置
    • 1: 存預設位置 + 通知 TE (含 Class 3) ⭐ 推薦
    • 2: Class 2 存 SIM+通知,其餘直接轉發 TE
    • 3: Class 3 直接轉發,其餘同 mt=1
  • bm/ds/bfr:通常保持預設 (0,0,0)

模式一:AT+CNMI=2,1 (存儲+通知,最簡單)

AT+CNMI=2,1
OK
... (一段時間後)
+CMTI: "ME",8        // 通知:第 8 條存入 ME
AT+CMGR=8            // 讀取第 8 條
+CMGR: 8,27
0891683108200505F0240D91683158812764F80000402052110373800741E19058341E01
OK
AT+CMGD=8            // 刪除釋放空間
OK

流程:收到 +CMTI → 解析索引 → AT+CMGR 讀取 → 處理完 AT+CMGD 刪除。

模式二:AT+CNMI=2,2 (Class 2 存儲,其餘直接轉發)

AT+CNMI=2,2
OK
... 
+CMT: ,26            // 直接輸出 PDU 內容,無索引
0891683108200505F0040D91683158812764F8000840205211639180064F60597D0021

優點:非 Class 2 簡訊不佔用 ME 閃存,延長壽命。
缺點:需同時處理 +CMTI (Class 2) 與 +CMT (直接轉發) 兩種非請求回應碼 (URC),解析邏輯較複雜。

建議策略

  • 一般應用:mode=2, mt=1,統一走「通知→讀取→刪除」流程,穩健易維護
  • 高頻、發送端可控:雙方協議使用 Class 1/No Class,採 mt=2 避免寫入閃存
  • 務必啟用流控 (RTS/CTS) 防止高速 URC 丟失
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved