AT命令錯誤訊息解密:ERROR 和 +CME ERROR 原來大不同!

最近在開發物聯網設備時,遇到了一個讓我困惑很久的問題:為什麼同樣是錯誤,有時候模組回傳 ERROR,有時候卻回傳 +CME ERROR: 3?一直覺得很奇怪,都是錯誤,但是訊息卻不一樣。所以去研究了一下,發現原來還有這層意義!今天就來分享這個發現。

一開始的困惑

當我在測試 AT 命令時,遇到了這樣的情況:

AT+ABCDEFG
ERROR

AT+KSREP
+CME ERROR: 3

同樣都是失敗,為什麼錯誤訊息格式完全不同?這讓我開始深入研究 AT 命令的錯誤機制。

真相大白:兩種錯誤的本質差異

🔴 ERROR – 「你說錯話了」

ERROR 是最基本的錯誤回應,代表命令本身有問題

  • ❌ 命令不存在
  • ❌ 語法格式錯誤
  • ❌ 參數類型不對
  • ❌ 命令拼寫錯誤

實際範例:

AT+CGMI=123      → ERROR (CGMI 不接受參數)
AT+NOTEXIST      → ERROR (命令不存在)
ATCGMI           → ERROR (缺少 + 號)

🟡 +CME ERROR – 「我聽懂了,但做不到」

+CME ERROR (Mobile Equipment Error) 代表命令格式正確,但執行時遇到問題

  • ✅ 命令語法正確
  • ❌ 但因為某些原因無法執行
  • 📊 提供具體的錯誤代碼

實際範例:

AT+CPIN="1234"   → +CME ERROR: 16 (密碼錯誤)
AT+COPS=1,2,"46000" → +CME ERROR: 30 (無網路服務)

關鍵發現:需要「開啟」詳細錯誤

這是我研究後最重要的發現:+CME ERROR 需要手動啟用!

錯誤報告模式

AT+CMEE=0    // 關閉詳細錯誤(預設)- 只顯示 ERROR
AT+CMEE=1    // 啟用數字錯誤代碼
AT+CMEE=2    // 啟用文字錯誤描述

實測對比

未啟用詳細錯誤(CMEE=0):

AT+CPIN="wrong_pin"
ERROR

👉 完全不知道哪裡錯了!

啟用數字代碼(CMEE=1):

AT+CPIN="wrong_pin"
+CME ERROR: 16

👉 知道是錯誤代碼 16,可以查表

啟用文字描述(CMEE=2):

AT+CPIN="wrong_pin"
+CME ERROR: Incorrect password

👉 一目了然!密碼錯誤

常見的 CME ERROR 代碼速查表

代碼 含義 常見原因
0 Phone failure 模組硬體故障
3 Operation not allowed 操作不被允許/不支援
4 Operation not supported 功能未實作
10 SIM not inserted 未插入 SIM 卡
11 SIM PIN required 需要輸入 PIN 碼
13 SIM failure SIM 卡故障
16 Incorrect password PIN/PUK 碼錯誤
30 No network service 無網路訊號
100 Unknown error 未知錯誤

實戰應用:Debug 流程優化

❌ 以前的我(沒有概念):

AT+SOMECOMMAND
ERROR

「又錯了…到底哪裡錯?」😫

✅ 現在的我(理解機制):

// 1. 先啟用詳細錯誤
AT+CMEE=2
OK

// 2. 執行命令
AT+CPIN?
+CME ERROR: SIM PIN required

// 3. 根據錯誤採取對應措施
AT+CPIN="1234"
OK

開發建議

1. 初始化時就啟用詳細錯誤

// 在程式初始化階段
sendATCommand("AT+CMEE=2");  // 啟用文字錯誤描述

2. 建立錯誤處理機制

def parse_at_response(response):
    if "ERROR" in response:
        if "+CME ERROR:" in response:
            # 解析具體錯誤代碼
            error_code = extract_error_code(response)
            return handle_cme_error(error_code)
        else:
            # 命令語法錯誤
            return "Command syntax error"

3. 記錄完整錯誤資訊

[2025-12-16 15:30:45] Command: AT+COPS=1,2,"46000"
[2025-12-16 15:30:46] Response: +CME ERROR: 30
[2025-12-16 15:30:46] Meaning: No network service

總結

特性 ERROR +CME ERROR
錯誤層級 命令層級 執行層級
原因 語法/格式錯誤 執行邏輯錯誤
詳細程度 簡單 詳細(含錯誤代碼)
需要設定 是(AT+CMEE)
Debug 難度 困難 容易

結語

這次研究讓我深刻體會到:細節決定效率

以前遇到 ERROR 只能盲目嘗試,現在透過 +CME ERROR 的詳細資訊,可以快速定位問題。如果你也在開發使用 AT 命令的設備(GSM/LTE 模組、藍牙模組等),強烈建議:

  1. ✅ 開發時一定要啟用 AT+CMEE=2
  2. ✅ 建立完整的錯誤代碼對照表
  3. ✅ 記錄詳細的錯誤日誌

希望這篇文章能幫助到同樣困惑的你!如果有任何問題或經驗分享,歡迎留言討論 😊


參考資料:
– 3GPP TS 27.007 (AT command set for User Equipment)
– 各廠商模組的 AT Command Manual

分類: IoT物聯網, 技術相關,標籤: , , , , , , , , , , 。這篇內容的永久連結

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *