最近在開發物聯網設備時,遇到了一個讓我困惑很久的問題:為什麼同樣是錯誤,有時候模組回傳 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 模組、藍牙模組等),強烈建議:
- ✅ 開發時一定要啟用
AT+CMEE=2 - ✅ 建立完整的錯誤代碼對照表
- ✅ 記錄詳細的錯誤日誌
希望這篇文章能幫助到同樣困惑的你!如果有任何問題或經驗分享,歡迎留言討論 😊
參考資料:
– 3GPP TS 27.007 (AT command set for User Equipment)
– 各廠商模組的 AT Command Manual