顯示具有 AT command 標籤的文章。 顯示所有文章
顯示具有 AT command 標籤的文章。 顯示所有文章

2025年6月9日 星期一

IOT_PCB CODE 4G LTE 數據機狀態機分析

4G LTE 數據機狀態機分析器

4G LTE 數據機狀態機分析器

本頁提供 `modem_main()` 函式的核心流程控制邏輯解析、相關輔助函式的功能查詢,以及關鍵資料結構的詳細說明。

modem_main() 流程控制邏輯

modem_main() 函式主要透過一個大的 switch 語句來根據 info->session (當前數據機會話狀態) 執行不同的邏輯。每個 case 代表一個特定的數據機操作階段。

case _AT_SESSION_RESET: (數據機重置階段)

目的: 等待數據機完成硬體重置後的初始化延遲。

邏輯:

  • 檢查自 at_cmd_reset_tick 以來的時間是否超過 AT_RESET_INITIAL_TIMEOUT_MS (5 秒)。
  • 如果超過,表示重置延遲已滿足,則將會話切換到 _AT_SESSION_INIT (初始化階段)。
  • 同時初始化 at_cmd_polling_tickat_cmd_poll_gps_tick,為後續的命令輪詢和 GPS 數據讀取計時。
case _AT_SESSION_INIT: (數據機初始化階段)

目的: 執行一系列初始化的 AT 命令,包括基本設定、讀取 UUID、檢查訊號品質、設定 RTC 時間、以及 MQTT 相關參數載入和訂閱主題等。

邏輯:

  • 呼叫 cmd_processing(info):這是處理單個 AT 命令的核心函式,負責發送命令、等待響應、解析響應並更新命令狀態。
  • if(info->status == STATUS_CMD_OK)
    • 重置 info->statusSTATUS_CMD_NONE
    • 檢查訊號品質 (chk_cmd_response()==CMD_STATUS_BAD_SQ): 如果當前命令響應指示訊號品質不佳 (例如 AT+CSQ 命令返回的值低於預設閾值),則:
      • 增加 _modem.chk_sq_cnt
      • 根據當前會話是否為 _AT_SESSION_CHK_SQ,決定是直接切換到 _AT_SESSION_WAIT_TO_CHK_SQ 還是保留原會話並切換到 _AT_SESSION_WAIT_TO_CHK_SQ (使用 switchATSessionK 保留原會話)。
      • 更新 at_cmd_reset_tick
    • 檢查是否為命令集的末尾 (commands[info->index+1].mode == _CMD_MODE_END): 如果當前命令是會話中的最後一個命令:
      • 增加 info->index
      • 根據不同的會話類型執行相應的收尾工作:
        • _AT_SESSION_CHK_SQ: 恢復到之前的會話 (restoreToOrgSession())。
        • _AT_SESSION_TX: 將 _modem.lte_4G_TX_flag 清零,表示數據已發送,然後切換到 _AT_SESSION_FREE_RUN
        • _AT_SESSION_POLLING: 更新 at_cmd_polling_tick,然後切換到 _AT_SESSION_FREE_RUN
        • _AT_SESSION_GET_GPS: 更新 at_cmd_poll_gps_tick,然後切換到 _AT_SESSION_FREE_RUN
        • _AT_SESSION_INIT / _AT_SESSION_LOG_OUT_IN: 設定 _send_ping_data 為 1 (表示需要發送 PING 數據)、設定 _connected 為 1 (表示已連接 MQTT)、清除 _relog_request 旗標。
        • default: 切換到 info->cmdSet[info->index].sleeps 所指定的下一個會話。
  • else if (info->status == STATUS_CMD_ERROR)
    • 重置 info->statusSTATUS_CMD_NONE
    • 如果 _modem.error_count 超過 20 次,則執行 modem_reset() (硬體重置數據機)。
  • else if (info->status == STATUS_CMD_TIMEOUT)
    • STATUS_CMD_ERROR 處理方式類似,如果超時次數過多,也執行 modem_reset()
case _AT_SESSION_WAIT_TO_CHK_SQ: (等待檢查訊號品質階段)

目的: 在訊號品質不佳時,暫停其他操作,等待一段時間後重新檢查訊號。

邏輯:

  • 如果 _modem.chk_sq_cnt 小於 5 次 (表示還在初始的快速重試階段),且自 at_cmd_reset_tick 以來超過 5 秒,則切換到 _AT_SESSION_CHK_SQ
  • 如果 _modem.chk_sq_cnt 大於等於 5 次 (表示已經進行多次重試,需要更長的等待時間),且自 at_cmd_reset_tick 以來超過 30 秒,則切換到 _AT_SESSION_CHK_SQ
case _AT_SESSION_FREE_RUN: (自由運行階段)

目的: 釋放數據機物件的控制權 (semaphore),並切換到下一個自由運行階段。

邏輯:

  • 呼叫 releaseSemaObj(_OWNER_MODEM) 釋放數據機的互斥鎖。
  • 切換到 _AT_SESSION_FREE_RUN_1
  • 更新 at_cmd_reset_tick
case _AT_SESSION_FREE_RUN_1: (自由運行子階段)

目的: 提供一個短暫的窗口,允許其他模組 (例如 CAN) 處理數據,然後再進入數據機的輪詢階段。

邏輯:

  • 如果自 at_cmd_reset_tick 以來超過 1 秒,則切換到 _AT_SESSION_WAIT_TO_GET_GPS
case _AT_SESSION_WAIT_TO_GET_GPS: (等待獲取 GPS 或輪詢數據階段)

目的: 這是數據機在穩定連接後的主要運行階段,負責根據不同的條件觸發數據傳輸、重新登錄或 GPS/訊息輪詢。

邏輯:

  • 優先處理數據發送 (_modem.lte_4G_TX_flag==1): 如果有待發送的數據:
    • 嘗試獲取數據機的互斥鎖 (acquireSemaObj(_OWNER_MODEM))。
    • 如果成功,則切換到 _AT_SESSION_TX
  • 處理重新登錄請求 (chk_relog_request()): 如果有 MQTT 重新登錄請求:
    • 嘗試獲取數據機的互斥鎖。
    • 如果成功,則切換到 _AT_SESSION_LOG_OUT_IN,並將 _connected 設為 0。
  • 平衡 GPS 數據讀取和訊息輪詢: 這部分邏輯比較複雜,旨在交替執行 GPS 請求和輪詢接收到的數據,以避免阻塞:
    • 高頻率同時觸發 (chk_timeup_ms(timer1ms,at_cmd_poll_gps_tick, _modem.at_gps_read_time) && chk_timeup_ms(timer1ms, at_cmd_polling_tick, 5*1000)): 如果 GPS 讀取時間和輪詢時間都到期:
      • 嘗試獲取互斥鎖。
      • 根據 _prev_action_gps 的值,決定是切換到 _AT_SESSION_POLLING (輪詢) 還是 _AT_SESSION_GET_GPS (獲取 GPS),並更新 _prev_action_gps
    • 僅輪詢時間到期 (chk_timeup_ms(timer1ms, at_cmd_polling_tick, 5*1000)): 如果只有輪詢時間到期:
      • 嘗試獲取互斥鎖。
      • 切換到 _AT_SESSION_POLLING,並將 _prev_action_gps 設為 0。
    • 僅 GPS 時間到期 (chk_timeup_ms(timer1ms,at_cmd_poll_gps_tick, _modem.at_gps_read_time)): 如果只有 GPS 時間到期:
      • 嘗試獲取互斥鎖。
      • 切換到 _AT_SESSION_GET_GPS,並將 _prev_action_gps 設為 1。
cmd_processing(COMMAND_STATE_INFO *info) (輔助函式但與主邏輯緊密相關)

功能: 這是執行單個 AT 命令的核心。

邏輯: 根據 info->state (當前命令狀態) 進行處理:

  • _AT_CMD_TO_SEND: 準備並發送 AT 命令到 UART 0。如果命令類型是 _CMD_MODE_PUB, _CMD_MODE_DOWN, _CMD_MODE_UP,則需要處理 UUID 或將 IoT 數據轉換為十六進制格式發送。
  • _AT_CMD_WAIT_TO_RECEIVE: 等待 UART 0 接收到足夠的數據 (通過判斷 \r\n 的數量)。如果超時,則將 info->status 設為 STATUS_CMD_TIMEOUT
  • _AT_CMD_TO_RECEIVE: 檢查接收到的數據是否包含 "OK" 或 "ERROR"。
    • 如果包含 "OK",表示命令成功,清除錯誤計數,複製數據到 platformrxbuffer,並將狀態切換到 _AT_CMD_WAIT_TO_SEND
    • 如果包含 "ERROR",增加錯誤計數,如果錯誤是 MQTT 登錄相關且不影響後續流程,則切換到 _AT_CMD_WAIT_TO_SEND;否則切換到 _AT_CMD_ERROR_RESEND
    • 如果超時,則將 info->status 設為 STATUS_CMD_TIMEOUT
  • _AT_CMD_WAIT_TO_SEND: 等待一段時間後,將狀態切換到 _AT_CMD_TO_SEND 並增加命令索引,準備發送下一個命令。
  • _AT_CMD_ERROR_RESEND: 等待一段時間後,將狀態切換到 _AT_CMD_TO_SEND (重發當前命令)。
chk_cmd_response() (輔助函式但與主邏輯緊密相關)

功能: 解析 platformrxbuffer 中接收到的 AT 命令響應,並根據響應內容更新 _modem 結構中的相關資訊 (如 UUID, 訊號品質, RTC 時間, GPS 數據)。

邏輯: 根據解析結果返回 CMD_STATUS_OK, CMD_STATUS_BAD_SQCMD_STATUS_BAD_GPS

switchATSessionK(), switchATSession()restoreToOrgSession() (會話切換輔助函式)
  • switchATSessionK(AT_SESSION_STATES session):切換到新的 AT 會話,並保留當前會話的狀態資訊,以便後續恢復。
  • switchATSession(AT_SESSION_STATES session):切換到新的 AT 會話,不保留當前會話的狀態資訊。
  • restoreToOrgSession():恢復到之前保存的 AT 會話狀態。
modem_reset() (數據機硬體重置輔助函式)

功能: 執行數據機的硬體重置,包括 GPIO 控制電源和重置引腳,並初始化 _modem 結構中的所有相關變數。

acquireSemaObj()releaseSemaObj() (互斥鎖輔助函式)

功能: 用於實現對數據機操作的互斥鎖,確保在同一時間只有一個模組可以控制數據機,避免競爭條件。

輔助函式與資料結構查詢

請從左側列表選擇一個項目,或在上方搜尋。

核心資料結構定義

以下是 4G LTE 數據機狀態機中使用的核心資料結構定義,您可以展開查看詳細內容。

typedef enum COMMAND_STATUS

功能: 定義 AT 命令的執行狀態。

typedef enum
{
    STATUS_CMD_NONE=0,
    STATUS_CMD_OK,
    STATUS_CMD_ERROR,
    STATUS_CMD_TIMEOUT,
    STATUS_CMD_IN_PROCESS,
} COMMAND_STATUS;
  • STATUS_CMD_NONE: 無狀態,或初始狀態。
  • STATUS_CMD_OK: 命令執行成功。
  • STATUS_CMD_ERROR: 命令執行失敗或返回錯誤。
  • STATUS_CMD_TIMEOUT: 命令執行超時。
  • STATUS_CMD_IN_PROCESS: 命令正在處理中。
typedef enum AT_SESSION_STATES

功能: 定義數據機狀態機的各個會話階段。

typedef enum
{
    _AT_SESSION_INIT =0,
    _AT_SESSION_RESET,              //1
    _AT_SESSION_CHK_SQ,             //2 check signal quality when error or timeout happens.
    _AT_SESSION_WAIT_TO_CHK_SQ,     //3
    _AT_SESSION_FREE_RUN,           //4
    _AT_SESSION_TX,                 //5 MQTT up send json message
    _AT_SESSION_WAIT_TO_GET_GPS,    //6
    _AT_SESSION_GET_GPS,            //7
    _AT_SESSION_LOG_OUT_IN,         //8
    _AT_SESSION_POLLING,            //9
    _AT_SESSION_FREE_RUN_1,         //10
}AT_SESSION_STATES;
  • _AT_SESSION_INIT: 初始化會話。
  • _AT_SESSION_RESET: 數據機重置後等待階段。
  • _AT_SESSION_CHK_SQ: 檢查訊號品質會話。
  • _AT_SESSION_WAIT_TO_CHK_SQ: 等待檢查訊號品質的延遲階段。
  • _AT_SESSION_FREE_RUN: 自由運行階段 (釋放鎖)。
  • _AT_SESSION_TX: 數據上傳 (MQTT) 會話。
  • _AT_SESSION_WAIT_TO_GET_GPS: 等待獲取 GPS 或輪詢數據的決策階段。
  • _AT_SESSION_GET_GPS: 獲取 GPS 數據會話。
  • _AT_SESSION_LOG_OUT_IN: MQTT 登出再登入會話。
  • _AT_SESSION_POLLING: 輪詢接收數據會話。
  • _AT_SESSION_FREE_RUN_1: 自由運行子階段 (短暫延遲)。
typedef enum AT_CMD_STATES

功能: 定義單個 AT 命令的執行狀態,用於 cmd_processing() 函式。

typedef enum
{
    _AT_CMD_NONE = 0,
    _AT_CMD_TO_SEND,
    _AT_CMD_TO_RECEIVE,
    _AT_CMD_TO_RECEIVE1,
    _AT_CMD_WAIT_TO_SEND,
    _AT_CMD_ERROR_RESEND,
    _AT_CMD_WAIT_TO_RECEIVE,
}AT_CMD_STATES;
  • _AT_CMD_NONE: 無命令狀態。
  • _AT_CMD_TO_SEND: 準備發送命令。
  • _AT_CMD_TO_RECEIVE: 準備接收響應。
  • _AT_CMD_TO_RECEIVE1: 另一種接收響應狀態。
  • _AT_CMD_WAIT_TO_SEND: 等待下次發送命令。
  • _AT_CMD_ERROR_RESEND: 錯誤後等待重發。
  • _AT_CMD_WAIT_TO_RECEIVE: 等待接收響應數據。
typedef enum _CMD_MODES

功能: 定義 AT 命令的處理模式,影響命令的發送和響應解析方式。

typedef enum {
    _CMD_MODE_0 = 0,    //normal command, just send it to modem
    _CMD_MODE_PUB,
    _CMD_MODE_DOWN,
    _CMD_MODE_UP,
    _CMD_MODE_P0,
    _CMD_MODE_CSQ,
    _CMD_MODE_TM,
    _CMD_MODE_E,        //ignore the error
    _CMD_MODE_TEST,
    _CMD_MODE_GPS,
    _CMD_MODE_TX,
    _CMD_MODE_POLL,         //poll reading the data of Link Commands from uBlox catched buffer.
    _CMD_MODE_MQTTLOGIN,        //=== 20241111 handel check mqtt login === "+UUMQTTC: 1 ,1"
    _CMD_MODE_END,
}_CMD_MODES;
  • _CMD_MODE_0: 普通命令,直接發送。
  • _CMD_MODE_PUB: MQTT 發布相關命令。
  • _CMD_MODE_DOWN: MQTT 訂閱下載相關命令。
  • _CMD_MODE_UP: MQTT 上傳相關命令。
  • _CMD_MODE_P0: 可能用於特定參數設定或檔案操作。
  • _CMD_MODE_CSQ: 查詢訊號品質命令。
  • _CMD_MODE_TM: 查詢時間命令。
  • _CMD_MODE_E: 忽略錯誤的命令模式。
  • _CMD_MODE_TEST: 測試模式命令。
  • _CMD_MODE_GPS: GPS 相關命令。
  • _CMD_MODE_TX: 數據傳輸命令。
  • _CMD_MODE_POLL: 輪詢 Link Command 數據命令。
  • _CMD_MODE_MQTTLOGIN: MQTT 登錄檢查命令。
  • _CMD_MODE_END: 命令集的結束標誌。
typedef struct AT_COMMANDS

功能: 定義單個 AT 命令的結構,包括其模式、延遲時間和命令字串。

typedef struct{
    _CMD_MODES mode;
    uint8_t sleeps;
    char *command;
} AT_COMMANDS;
  • mode: 命令的處理模式 (參考 _CMD_MODES)。
  • sleeps: 命令發送後的延遲時間或切換到的下一個會話狀態。
  • command: AT 命令字串。
typedef struct COMMAND_STATE_INFO

功能: 儲存數據機狀態機的當前運行資訊。

typedef struct{
    AT_SESSION_STATES   session;
    AT_SESSION_STATES   prev_session;
    AT_CMD_STATES       state;
    uint8_t             index;
    uint8_t             prev_index;
    COMMAND_STATUS      status;
    AT_COMMANDS* cmdSet;
    uint8_t             signal_bad; //the quality of 4G signal, 0: good, 1:bad
}COMMAND_STATE_INFO;
  • session: 當前會話狀態。
  • prev_session: 上一個會話狀態 (用於恢復)。
  • state: 當前命令執行狀態。
  • index: 當前命令在命令集中的索引。
  • prev_index: 上一個命令的索引。
  • status: 當前命令的執行結果狀態。
  • cmdSet: 指向當前使用的 AT 命令集陣列。
  • signal_bad: 4G 訊號品質標誌 (0: 好, 1: 差)。
typedef struct GPS_LOCATION

功能: 儲存 GPS 定位資訊。

typedef struct {
    char utcTime[16];
    char utcDate[16];
    char latitude[32];
    char longitude[32];
} GPS_LOCATION;
  • utcTime: UTC 時間字串。
  • utcDate: UTC 日期字串。
  • latitude: 緯度字串。
  • longitude: 經度字串。
typedef struct MODEM_DATA

功能: 數據機的整體數據和狀態儲存結構,包含了數據機運行所需的所有關鍵資訊。

typedef struct MODEM_DATA
{
    uint8_t modem_uuid_md5[33];
    uint8_t lte_4G_TX_flag;
    uint8_t lte_4G_TX_data[UART_TX_RX_SIZE*2+100];

    uint8_t lte_4G_RX_index1;
    uint8_t lte_4G_RX_index2;
    uint8_t lte_4G_RX_data[LTE_4G_RX_DATA_COUNT][UART_TX_RX_SIZE];
    uint8_t error_count;
    uint8_t relog_request;

    uint8_t chk_sq_cnt;

    COMMAND_STATE_INFO at_cmd_info;

    uint8_t  lte_4G_gps_first_flag;
    uint8_t  lte_4G_gps_read_flag;
    uint32_t lte_4G_gps_tick;

    GPS_LOCATION gpsLoc;

    uint32_t at_gps_read_time;

    UTC_TIME rtc_time;
    uint8_t chk_mqtt_login;
    uint8_t lte_4G_csqval;
} MODEM_DATA;
  • modem_uuid_md5: 數據機的 UUID (MD5 格式)。
  • lte_4G_TX_flag: 4G 數據發送標誌。
  • lte_4G_TX_data: 用於發送 IoT 數據的緩衝區。
  • lte_4G_RX_index1, lte_4G_RX_index2: 接收數據緩衝區的索引。
  • lte_4G_RX_data: 接收到的訊息列表。
  • error_count: 錯誤計數。
  • relog_request: 重新登錄請求標誌。
  • chk_sq_cnt: 檢查訊號品質的計數。
  • at_cmd_info: 數據機狀態機的當前資訊。
  • lte_4G_gps_first_flag, lte_4G_gps_read_flag, lte_4G_gps_tick: GPS 讀取相關的標誌和計時。
  • gpsLoc: GPS 定位資訊。
  • at_gps_read_time: GPS 讀取時間間隔。
  • rtc_time: RTC 時間資訊。
  • chk_mqtt_login: MQTT 登錄狀態 (1: 登錄, 0: 登出)。
  • lte_4G_csqval: 4G 訊號品質 (CSQ 值)。
typedef enum CMD_STATUS (不同於 COMMAND_STATUS 的狀態)

功能: 定義命令響應的狀態,特別用於 chk_cmd_response() 函式的返回結果。

typedef enum {
    CMD_STATUS_OK = 0,
    CMD_STATUS_BAD_SQ,
    CMD_STATUS_BAD_GPS,
}CMD_STATUS;
  • CMD_STATUS_OK: 命令響應正常。
  • CMD_STATUS_BAD_SQ: 訊號品質不佳。
  • CMD_STATUS_BAD_GPS: GPS 數據不佳。
靜態 AT 命令集陣列

以下是數據機初始化、檢查訊號、獲取 GPS、發送數據、登出登入和輪詢等不同會話所使用的 AT 命令集定義。

這些陣列包含了 _CMD_MODESsleeps (延遲或下一會話) 和實際的 command 字串。

例如:

static AT_COMMANDS atCmdInit[]={
    // ...
    {_CMD_MODE_CSQ    ,2  ,"AT+CSQ\r\n"},
    {_CMD_MODE_TM     ,2  ,"AT+CCLK?\r\n"},
    // ...
    {_CMD_MODE_END    ,_AT_SESSION_FREE_RUN ,""}
};

static AT_COMMANDS atCmdChkSQ[] = {
    {_CMD_MODE_CSQ    ,1  ,"AT+CSQ\r\n"},
    {_CMD_MODE_END    ,99 ,""} //back to previous session
};

static AT_COMMANDS atCmdGetGPS[] = {
    {_CMD_MODE_TM     ,1  ,"AT+CCLK?\r\n"},
    {_CMD_MODE_GPS    ,1  ,"AT+UGRMC?\r\n"},
    {_CMD_MODE_END    ,_AT_SESSION_FREE_RUN  ,""}
};

static AT_COMMANDS atTxData[] = {
    {_CMD_MODE_TM     ,1  ,"AT+CCLK?\r\n"},
    {_CMD_MODE_UP     ,1  ,"AT+UMQTTC=2,0,0,1,\"EMOTO/DEV/"},
    {_CMD_MODE_END    ,_AT_SESSION_FREE_RUN  ,""}
};

static AT_COMMANDS atCmdLogOutIn[] = {
    {_CMD_MODE_0      ,2  ,"AT+UMQTTC=0\r\n"},
    {_CMD_MODE_0      ,2  ,"AT+UMQTTC=1\r\n"},
    {_CMD_MODE_DOWN   ,2  ,"AT+UMQTTC=4,0,\"EMOTO/DEV/"},
    {_CMD_MODE_PUB    ,2  ,"AT+UMQTTC=4,0,\"EMOTO/DEV/"},
    {_CMD_MODE_END    ,_AT_SESSION_FREE_RUN  ,""}
};

static AT_COMMANDS atCmdPolling[] = {
    {_CMD_MODE_TM     ,1  ,"AT+CCLK?\r\n"},
    {_CMD_MODE_POLL   ,1  ,"AT+UMQTTC=6\r\n"},
    {_CMD_MODE_END    ,_AT_SESSION_FREE_RUN ,""}
};

static void* atCommands[] = {
    atCmdInit,          //_AT_SESSION_INIT
    0,                  //_AT_SESSION_RESET
    atCmdChkSQ,         //_AT_SESSION_CHK_SQ
    0,                  //_AT_SESSION_WAIT_TO_CHK_SQ
    0,                  //_AT_SESSION_FREE_RUN
    atTxData,           //_AT_SESSION_TX
    0,                  //_AT_SESSION_WAIT_TO_GET_GPS
    atCmdGetGPS,        //_AT_SESSION_GET_GPS
    atCmdLogOutIn,      //_AT_SESSION_LOG_OUT_IN
    atCmdPolling,       //_AT_SESSION_POLLING
    0                   //_AT_SESSION_FREE_RUN1
};

IOT_PCB_4G LTE 模組狀態流程:`_AT_SESSION_WAIT_TO_GET_GPS

4G LTE 模組狀態流程:_AT_SESSION_WAIT_TO_GET_GPS

4G LTE 模組狀態流程:`_AT_SESSION_WAIT_TO_GET_GPS`

`_AT_SESSION_WAIT_TO_GET_GPS` 會話狀態的主要目的是在獲取 GPS 資訊之前,作為一個等待和判斷點,根據不同的條件決定下一步的操作。它是一個**優先級判斷**的邏輯,確保重要的任務(如數據發送或重新登入)能夠優先執行,而週期性任務(如 GPS 獲取和命令輪詢)則在空閒時進行。

進入 `_AT_SESSION_WAIT_TO_GET_GPS` 狀態
判斷 1:是否有資料發送請求? (`_modem.lte_4G_TX_flag == 1`)
**是 (Yes):**
嘗試獲取模組信號量 (`acquireSemaObj(_OWNER_MODEM)`)
若成功獲取:
→ 切換至 `_AT_SESSION_TX` 狀態 (執行資料發送)
(執行完畢後回到 `_AT_SESSION_WAIT_TO_GET_GPS` 或由 `_AT_SESSION_TX` 決定下一個狀態)
**否 (No):**
進入下一個判斷。
判斷 2:是否有重新登入請求? (`chk_relog_request()`)
**是 (Yes):**
嘗試獲取模組信號量 (`acquireSemaObj(_OWNER_MODEM)`)
若成功獲取:
→ 切換至 `_AT_SESSION_LOG_OUT_IN` 狀態 (執行 MQTT 登出再登入)
→ 設定 `_connected = 0`
(執行完畢後回到 `_AT_SESSION_WAIT_TO_GET_GPS` 或由 `_AT_SESSION_LOG_OUT_IN` 決定下一個狀態)
**否 (No):**
進入下一個判斷。
判斷 3:GPS 時間到 且 輪詢時間到?
(`chk_timeup_ms(GPS_Tick, GPS_Read_Time)` AND `chk_timeup_ms(Polling_Tick, 5_Sec)`)
**是 (Yes):**
嘗試獲取模組信號量 (`acquireSemaObj(_OWNER_MODEM)`)
若成功獲取:
→ **判斷:上次執行的是否為 GPS 獲取?** (`_prev_action_gps == 1`)
    **是**: 切換至 `_AT_SESSION_POLLING` 狀態 (輪詢),設定 `_prev_action_gps = 0`
    **否**: 切換至 `_AT_SESSION_GET_GPS` 狀態 (GPS 獲取),設定 `_prev_action_gps = 1`
(執行完畢後回到 `_AT_SESSION_WAIT_TO_GET_GPS` 或由相應狀態決定下一個狀態)
**否 (No):**
進入下一個判斷。
判斷 4:僅輪詢時間到? (`chk_timeup_ms(Polling_Tick, 5_Sec)`)
**是 (Yes):**
嘗試獲取模組信號量 (`acquireSemaObj(_OWNER_MODEM)`)
若成功獲取:
→ 設定 `_prev_action_gps = 0`
→ 切換至 `_AT_SESSION_POLLING` 狀態
(執行完畢後回到 `_AT_SESSION_WAIT_TO_GET_GPS` 或由 `_AT_SESSION_POLLING` 決定下一個狀態)
**否 (No):**
進入下一個判斷。
判斷 5:僅 GPS 時間到? (`chk_timeup_ms(GPS_Tick, GPS_Read_Time)`)
**是 (Yes):**
嘗試獲取模組信號量 (`acquireSemaObj(_OWNER_MODEM)`)
若成功獲取:
→ 設定 `_prev_action_gps = 1`
→ 切換至 `_AT_SESSION_GET_GPS` 狀態
(執行完畢後回到 `_AT_SESSION_WAIT_TO_GET_GPS` 或由 `_AT_SESSION_GET_GPS` 決定下一個狀態)
**否 (No):**
回到 `_AT_SESSION_WAIT_TO_GET_GPS` 狀態,等待下一個循環判斷。

優先級總結

在 `_AT_SESSION_WAIT_TO_GET_GPS` 狀態中,判斷和切換的邏輯遵循以下優先級:

  1. **資料發送 (Tx)**:最高優先級,確保數據及時上傳。
  2. **重新登入 (Relog)**:次高優先級,維持模組連線穩定性。
  3. **GPS 獲取與命令輪詢同時到期**:這兩個任務交替執行,以平衡資源使用。
  4. **僅命令輪詢 (Polling)**:在沒有更高優先級任務且輪詢時間到時執行。
  5. **僅 GPS 獲取**:在所有更高優先級任務都已處理完畢且 GPS 時間到時執行。

相關程式碼片段 (僅供參考)

case _AT_SESSION_WAIT_TO_GET_GPS:
    if (_modem.lte_4G_TX_flag == 1) {
        //enter the TX session
        if(acquireSemaObj(_OWNER_MODEM))
            switchATSession(_AT_SESSION_TX);
        
    } else if(chk_relog_request()) {
        if(acquireSemaObj(_OWNER_MODEM)) {
            switchATSession(_AT_SESSION_LOG_OUT_IN);
            _connected = 0; //disconnecting.....
            #ifdef _RUN_TIME_DEBUG_ON
            outputDbgMsg("start re-log sequence......\r\n");
            #endif 
        }
    } else if(chk_timeup_ms(timer1ms,at_cmd_poll_gps_tick, _modem.at_gps_read_time) && chk_timeup_ms(timer1ms, at_cmd_polling_tick, 5*1000)){ 
        if(acquireSemaObj(_OWNER_MODEM)) {
            if(_prev_action_gps) {
                switchATSessionK(_AT_SESSION_POLLING);
                _prev_action_gps = 0;
                #ifdef _RUN_TIME_DEBUG_ON
                    outputDbgMsg("msg+++\r\n");
                #endif
            }else{
                switchATSession(_AT_SESSION_GET_GPS);
                _prev_action_gps = 1;
                #ifdef _RUN_TIME_DEBUG_ON
                    outputDbgMsg("gps+++\r\n");
                #endif
            }
        }
    } else if (chk_timeup_ms(timer1ms, at_cmd_polling_tick, 5*1000)) {
        if(acquireSemaObj(_OWNER_MODEM)) {
            _prev_action_gps = 0;
            switchATSessionK(_AT_SESSION_POLLING);
            #ifdef _RUN_TIME_DEBUG_ON
                outputDbgMsg("poll...\r\n");
            #endif
        }
    } else if (chk_timeup_ms(timer1ms,at_cmd_poll_gps_tick, _modem.at_gps_read_time)) {
        if(acquireSemaObj(_OWNER_MODEM)) {
            _prev_action_gps = 1;
            switchATSessionK(_AT_SESSION_GET_GPS);
            #ifdef _RUN_TIME_DEBUG_ON
                outputDbgMsg("gps...\r\n");
            #endif
        }
    }
    break;

2017年7月11日 星期二

AT command Note 20170712

主要功能操作如下:
1.網絡註冊
AT+CPIN?
+CPIN: READY // 查詢是否檢測到SIM卡
OK
AT+CSQ
+CSQ: 14,99 // 查詢信號強度。一般註冊WCDMA網絡CSQ值相對較低,
這主要與當地WCDMA網絡覆蓋有關。
OK
AT+AUTOCSQ=1,1 // 設置CSQ 變化時URC 上報,該方式當rssi 有變化時進行
URC上報。
OK
AT+CNMP?
+CNMP: 2 // 查詢選擇網絡模式。默認auto模式,首選WCDMA 網絡,
如果WCDMA網絡很弱或無網絡,會自動選擇GSM網絡。
AT+CNMP=13 ——鎖定GSM網絡
AT+CNMP=14 ——鎖定WCDMA網絡
OK
AT+CNAOP? // 查詢設置選網優先級
+CNAOP: 2 // 默認2,WCDMA網絡優先。
OK
AT+CNSDP? // 查詢設置域
+CNSDP: 2 // 默認CS+PS域
OK
AT+CPSI?
+CPSI:WCDMA,On -01,0xA809,11122855,WCDMA IMT ,0,6.5,106,23,-11,500
OK // 查詢註冊網絡狀態及區分模塊註冊WCDMA 或GSM網絡。
如果開機後長時間沒有註冊網絡,請查詢一下是否設置pin碼或者設置AT+CFUN的參數了。
AT+CFUN?
+CFUN: 4 // 如果查詢不是1,請重新設置AT+CFUN=1。
OK
AT+CFUN=1
OK
 
2.獲取網絡時間
AT+CPSI?
+CPSI: GSM,On -01 0x144f, DCS 1800,-85,0,19-39
OK // 註冊網絡後才可以獲取網絡時間
AT+CHTPSERV="ADD"," ",80,1
OK // HTP服務器設置信息
AT+CHTPUPDATE // 通過HTP協議更新時間
OK
+CHTPUPDATE: 0
AT+CCLK? // 讀取時間
+CCLK: "11/07/ +32"
OK
3.語音功能
設置被叫號碼顯示
AT+COLP=1 // 設置被叫號碼顯示
OK
ATD ;
VOICE CALL: BEGIN
+COLP: "32523094",129,,,
AT+CHUP // 掛斷
VOICE CALL: END: 000018
OK

設置顯示來電號碼
AT+COLP=1 //設置顯示來電號碼
批註[April1]: 這個是不是應
該是ME的時間?
批註[April2]: AT+CLIP=1
OK
RING
+CLIP:
"02132523417",128,,,,0
//CLIP的實際操作是這個
OK
RING
+CLIP: "02132523094",161,,,,0
AT
RING
+CLIP: "02132523094",161,,,,0
+CHUP
OK
MISSED_CALL: 00:20AM 02132523094

緊急呼叫
AT+CPIN?
+CME ERROR: SIMfailure // 設備沒有插入SIM卡
AT+CSQ
+CSQ: 5,99 // 可以檢測到信號強度,或者有時顯示+CSQ: 99,99
OK
AT+CEMNLIST=1 // 使能緊急呼叫功能
OK
AT+CEMNLIST=2,"112,000,911" // 編輯緊急呼叫號碼
OK
AT+CEMNLIST?
+CEMNLIST: 1,"112,000,911"
OK
ATD112; // 撥打緊急呼叫號碼
OK
AT+CHUP
VOICE CALL: END: 000000
OK
批註[April3]: AT+COLP=1
OK
ATD10010;
VOICE CALL: BEGIN
+COLP: " ,,,
OK //COLP的

實際操作
批註[April4]: at+csq
+csq: 99,99
OK
//也有這種情況
4.短信功能
查詢SIM卡內短息存儲容量
AT+CPMS?
+CPMS: "SM",0,30,"SM",0,30,"SM",0,30 // 對於普通的SIM卡,建議定期查詢,信息滿時再有短信進來
會有SMS_FULL的提示,刪除部分短信後就可以接收之前的
短信。
OK

設置新短消息提示功能
AT+CNMI=2,1
OK
+CMTI: "SM",10
AT+CMGR=10 // 讀取短信息
+CMGR: "REC UNREAD","+8618602184656","","11/07/ +32"
HELLO
OK

設置閃信模式
AT+CNMI=1, 2
OK
+CMT: "+8618602184656","","11/07/ +32"
HELLO // 新短消息直接打印到串口,不會存儲於SIM卡中。

快發信息
AT+CMGSO="18602184656","CESHI"
+CMGSO: 224
OK

讀取信息後從SIM卡中將該信息刪除
+CMTI: "SM",1
AT+CMGRD=1
+CMGRD: "REC UNREAD","+8618602184656","","11/07/ +32"
CESHI
OK
AT+CMGR=1
+CMS ERROR: Invalid memory index

文本模式發送英文短信
批註[April5]: 同上這個是ME中的不是SIM卡
AT+CMGF=1 // 設置文本模式
OK
AT+CSCS="GSM" // 設置字符集為GSM格式
OK
AT+CSMP=17,167,0,241 // 設置文本模式參數
OK
AT+CSCA?
+CSCA: "+8613010314500",145 // 查詢短消息中心號碼
OK
AT+CMGS="18602184656"
> hello test // 發送短消息
+CMGS: 225
OK

文本模式下發送中文短信
AT+CMGF=1
OK
AT+CSCS="UCS2"
OK
AT+CSMP=
OK
AT+CSCA?
+CSCA: "002B0038003600310033003000310030003300310034003500300030",145
OK
AT+CMGS="00310033003800310038003200370030003000360039"
> 4F60597D
+CMGS: 230
OK

PDU模式發送短息
AT+CMGF=0 // 設置PDU 模式
OK
AT+CSCS="UCS2" // 設置字符集為UCS2格式
OK
AT+CMGS=19
> 0011000D91688106124856F6001801044F60597D
+CMGS: 229
OK
5.數傳功能
在建立TCP/IP 連接之前請先確認模塊已經註冊網絡且附著GPRS網絡
AT+CPSI?
+CPSI:WCDMA,On -01,0xA809,11085717,WCDMAIMT ,0,8.5,109,19,6,500
OK
AT+CGATT?
+CGATT: 1
OK
AT+CGSOCKCONT=1,"IP","3gnet" // 設置APN
OK

單鏈接方式:
AT+NETOPEN="tcp",7015
Network opened // 打開TCP 端口
OK
AT+TCPCONNECT="116.228.221.51",7015
Connect ok // 建立TCP/IP連接
OK
AT+TCPWRITE=10
> 1234567890 // 發送數據
+TCPWRITE: 10, 10
OK
Send ok
AT+NETCLOSE
Network closed
OK

多鏈接方式:
AT+NETOPEN=,,1
OK
AT+CIPOPEN=0,"TCP","116.228.221.51",7015 // 建立第一路TCP/IP連接
Connect ok
OK
AT+CIPOPEN=1,"TCP","116.228.221.51",9066 // 建立第二路TCP/IP連接
Connect ok
OK
AT+CIPSEND=0,5 // 在第一路TCP/IP下發送數據
> HELLO
+CIPSEND: 5, 5
OK
Send ok
AT+CIPSEND=1,5 // 在第二路TCP/IP下發送數據
> HELLO
+CIPSEND: 5, 5
OK
Send ok
AT+CIPOPEN? // 查詢當前連接狀態
+CIPOPEN: 0, "TCP", "116.228.221.51", 7015
+CIPOPEN: 1, "TCP", "116.228.221.51", 9066
+CIPOPEN: 2
+CIPOPEN: 3
+CIPOPEN: 4
+CIPOPEN: 5
+CIPOPEN: 6
+CIPOPEN: 7
+CIPOPEN: 8
+CIPOPEN: 9
OK
AT+CIPCLOSE=1 // 關閉第一路TCP/IP連接
OK
AT+NETCLOSE // 關閉所有連接(注意Netclose之前必須先CIPCLOSE所有的
連接,不然會返回ERROR)
Network closed
OK
6.音頻參數調節
回音抑制
AT+CECM=?
+CECM: (0-8)
OK

SPK增益
AT+CRXGAIN=?
+CRXGAIN: (0-65535) // 默認60000
OK
AT+CLVL=?
+CLVL: (0-4) // 需要配合AT+CVLVL一起使用,比如
AT+CVLVL=1,2000
AT+CVLVL=2,3000
那麼AT+CLVL=2時,音量等級就是3000
OK
AT+CVLVL=?
+CVLVL: (1-4),(- ) // 注意該指令設置
OK
AT+CRXVOL=?
+CRXVOL: (-100 - 100) // 默認-100
OK

MIC增益
AT+CTXGAIN=?
+CTXGAIN: (0-65535)
OK
AT+CTXVOL=?
+CTXVOL: (0-65535)
OK

側音
AT+SIDET=?
+SIDET: (0-65535) // 調節回音的時候可以設置為0
OK
7.USB Audio功能
AT+DSWITCH=1 // 切換DBG模式到數據模式
OK
AT+CPCMREG=1 // 控制PCM數據從diagnostics 輸出
OK
ATD ;
OK // 可以從diagnostics口輸出Audio數據輸出
VOICE CALL: BEGIN
8.接收PC側文件
AT+FSMEM
+FSMEM: C , 917504) // 查詢模塊存儲空間
OK
AT+FSCD?
+FSCD: C:/ // 選擇放置路徑
OK
AT+CRXFILE="tupian.jpg" // 接收文件
OK
C
CCCCC
input timeout!receiving task exit! // 如果執行完AT+CRXFILE="tupian.jpg"一直不進行文件傳
送,模塊端會上報超時提示。

當開始傳送文件過程中任何AT命令都不響應,直到文件傳送完成。
批註[April6]: 還有發送文件到PC側 文件傳送完成,可以繼續操作AT 命令。
9.MMS 功能
設置參數
AT+CMMSCURL=" "
OK
AT+CMMSPROTO=1,"10.0.0.172",80
OK
AT+CMMSSENDCFG=6,3,0,0,2,4
OK

發送MMS
AT+CGSOCKCONT=1,"IP","cmwap" // 設置APN
OK
AT+CMMSEDIT=1 // 進入MMS編輯模式
OK
AT+CMMSDOWN="title",10 // 寫入標題
>hello test
OK
AT+CMMSDOWN="file",0,"tupian.jpg" // 直接選擇存儲模塊內的圖片
OK
AT+CMMSDOWN="text",21,"t.txt" // 寫入文本
>hhhhhhhhhhhhjjjkklhgj
OK
AT+CMMSRECP="18602184656" // 添加接收
OK
AT+CMMSVIEW
+CMMSVIEW:2,"","18602184656",,,"1980-01- ","H
AT+CMMSSEND // 發送MMS
OK
+CMMSSEND: 0 // 發送成功
AT+CMMSEDIT=0 // 退出編輯模式,同時清空buff​​er
OK

接收MMS
+WAP_PUSH_MMS:
"+8618602184656","CWpOBkya7dRA","http://10.95.251.141/CWpOBkya7dRA","11/07/ +32",
0,10466
+WAP_PUSH: 0,,157
0891683110304105F24408A1015635300004117020222475238C0605040B8423F05506246170706C69
636174696F6E2F766E642E7761702E6D6D732D6D65737361676500B487AF848C82984357704F426
B796137645241008D9083687474703A2F2F31302E39352E3235312E3134312F4357704F426B796137
645241008805810303F461891A802B383631383630323138343635362F545950453D504C4D4E008A8
08E0228E2
AT+CGSOCKCONT=1,"IP","cmwap"
OK
AT+CMMSEDIT=0
OK
AT+CMMSRECV="http://10.95.251.141/CWpOBkya7dRA"
OK
+CMMSRECV: 0
AT+CMMSsave=0
+CMMSSAVE:0
OK

2017年6月28日 星期三

AT command 標準AT command 翻譯

AT command

標準AT command 翻譯,轉自網路…

一、 一般命令
1、 AT+CGMI 給出模塊廠商的標識。
2、 AT+CGMM 獲得模塊標識。
這個命令用來得到支持的頻帶(GSM 900,DCS 1800 或PCS 1900)。
當模塊有多頻帶時,回應可能是不同頻帶的結合。
3、 AT+CGMR 獲得改訂的軟件版本。
4、 AT+CGSN 獲得GSM模塊的IMEI(國際移動設備標識)序列號。
5、 AT+CSCS 選擇TE特徵設定。
這個命令報告TE用的是哪個狀態設定上的ME。
ME於是可以轉換每一個輸入的或顯示的字母。這個是用來發送、讀取或者撰寫短信。
6、 AT+WPCS 設定電話簿狀態。這個特殊的命令報告通過TE電話簿所用的狀態的ME。
ME於是可以轉換每一個輸入的或者顯示的字符串字母。
這個用來讀或者寫電話簿的入口。
7、 AT+CIMI 獲得IMSI。
這命令用來讀取或者識別SIM卡的IMSI(國際移動簽署者標識)。
在讀取IMSI之前應該先輸入PIN(如果需要PIN的話)。
8、 AT+CCID 獲得SIM卡的標識。這個命令使模塊讀取SIM卡上的EF-CCID文件。
9、 AT+GCAP 獲得能力表。(支持的功能)
10、 A/ 重複上次命令。只有A/命令不能重複。這命令重複前一個執行的命令。
11、 AT+CPOF 關機。這個特殊的命令停止GSM軟件堆棧和硬件層。命令AT+CFUN=0的功能與+CPOF相同。 12、 AT+CFUN 設定電話機能。這個命令選擇移動站點的機能水平。
13、 AT+CPAS 返回移動設備的活動狀態。
14、 AT+CMEE 報告移動設備的錯誤。
這個命令決定允許或不允許用結果碼「+CME ERROR:」或者「+CMS ERROR:」代替簡單的「ERROR」。
15、 AT+CKPD 小鍵盤控制。仿真ME小鍵盤執行命令。
16、 AT+CCLK 時鐘管理。這個命令用來設置或者獲得ME真實時鐘的當前日期和時間。
17、 AT+CALA 警報管理。這個命令用來設定在ME中的警報日期/時間。(鬧鈴)
18、 AT+CRMP 鈴聲旋律播放。這個命令在模塊的蜂鳴器上播放一段旋律。有兩種旋律可用:到來語音、數據或傳真呼叫旋律和到來短信聲音。
19、 AT+CRSL 設定或獲得到來的電話鈴聲的聲音級別。

二、 呼叫控制命令
1、 ATD 撥號命令。這個命令用來設置通話、數據或傳真呼叫。
2、 ATH 掛機命令。
3、 ATA 接電話。
4、 AT+CEER 擴展錯誤報告。這個命令給出當上一次通話設置失敗後中斷通話的原因。
5、 AT+VTD 給用戶提供應用GSM網絡發送DTMF(雙音多頻)雙音頻。這個命令用來定義雙音頻的長度(默認值是300毫秒)。
6、 AT+VTS 給用戶提供應用GSM網絡發送DTMF雙音頻。這個命令允許傳送雙音頻。
7、 ATDL 重撥上次電話號碼。
8、 AT%Dn 數據終端就緒(DTR)時自動撥號。
9、 ATS0 自動應答。
10、 AT+CICB 來電信差。
11、 AT+CSNS 單一編號方案。
12、 AT+VGR,AT+VGT 增益控制。這個命令應用於調節喇叭的接收增益和麥克風的傳輸增益。
13、 AT+CMUT 麥克風靜音控制。
14、 AT+SPEAKER 喇叭/麥克風選擇。這個特殊命令用來選擇喇叭和麥克風。
15、 AT+ECHO 回音取消。
16、 AT+SIDET 側音修正。
17、 AT+VIP 初始化聲音參數。
18、 AT+DUI 用附加的用戶信息撥號。
19、 AT+HUI 用附加的用戶信息掛機。
20、 AT+RUI 接收附加用戶信息。

三、 網絡服務命令
1、 AT+CSQ 信號質量。
2、 AT+COPS 服務商選擇。
3、 AT+CREG 網絡註冊。獲得手機的註冊狀態。
4、 AT+WOPN 讀取***作員名字。
5、 AT+CPOL 優先***作員列表。

四、 安全命令
1、 AT+CPIN 輸入PIN。
2、 AT+CPIN2 輸入PIN2。
3、 AT+CPINC PIN的剩餘的嘗試號碼。
4、 AT+CLCK 設備鎖。
5、 AT+CPWD 改變密碼。

五、 電話簿命令
1、 AT+CPBS 選擇電話簿記憶存儲。
2、 AT+CPBR 讀取電話簿表目。
3、 AT+CPBF 查找電話簿表目。
4、 AT+CPBW 寫電話簿表目。
5、 AT+CPBP 電話簿電話查詢。
6、 AT+CPBN 電話簿移動動作。
這個特殊命令使電話簿中的條目前移或後移(按字母順序)
7、 AT+CNUM 簽署者號碼。
8、 AT+WAIP 防止在下一次重起時初始化所有的電話簿。
9、 AT+WDCP 刪除呼叫電話號碼。
10、 AT+CSVM 設置語音郵件號碼。

六、 短消息命令
1、 AT+CSMS 選擇消息服務。
支持的服務有GSM-MO、SMS-MT、SMS-CB。
2、 AT+CNMA 新信息確認應答。
3、 AT+CPMS 優先信息存儲。這個命令定義用來讀寫信息的存儲區域。
4、 AT+CMGF 優先信息格式。執行格式有TEXT方式和PDU方式。
5、 AT+CSAS 保存設置。保存+CSAS和+CSMP的參數。
6、 AT+CRES 恢復設置。
7、 AT+CSDH 顯示文本方式的參數。
8、 AT+CNMI 新信息指示。這個命令選擇如何從網絡上接收短信息。
9、 AT+CMGR 讀短信。信息從+CPMS命令設定的存儲器讀取。
10、 AT+CMGL 列出存儲的信息。
11、 AT+CMGS 發送信息。
12、 AT+CMGW 寫短信息並存儲。
13、 AT+CMSS 從存儲器中發送信息。
14、 AT+CSMP 設置文本模式的參數。
15、 AT+CMGD 刪除短信息。刪除一個或多個短信息。
16、 AT+CSCA 短信服務中心地址。
17、 AT+CSCB 選擇單元廣播信息類型。
18、 AT+WCBM 單元廣播信息標識。
19、 AT+WMSC 信息狀態(是否讀過、是否發送等等)修正。
20、 AT+WMGO 信息覆蓋寫入。
21、 AT+WUSS 不改變SMS狀態。
在執行+CMGR或+CMGL後仍保持UNREAD。

七、 追加服務命令
1、 AT+CCFC 呼叫繼續。
2、 AT+CLCK 呼叫禁止。
3、 AT+CPWD 改變追加服務密碼。
4、 AT+CCWA 呼叫等待。
5、 AT+CLIR 呼叫線確認限制。
6、 AT+CLIP 呼叫線確認陳述。
7、 AT+COLP 聯絡線確認陳述。
8、 AT+CAOC 費用報告。
9、 AT+CACM 累計呼叫計量。
10、 AT+CAMM 累計呼叫計量最大值。
11、 AT+CPUC 單價和貨幣表。
12、 AT+CHLD 呼叫相關的追加服務。
13、 AT+CLCC 列出當前的呼叫。
14、 AT+CSSN 追加服務通知。
15、 AT+CUSD 無組織的追加服務數據。
16、 AT+CCUG 關閉的用戶組。

八、 數據命令
1、 AT+CBST 信差類型選擇。
2、 AT+FCLASS 選擇模式。
這個命令把模塊設置成數據或傳真***作的特殊模式。
3、 AT+CR 服務報告控制。這個命令允許更為詳細的服務報告。
4、 AT+CRC 劃分的結果代碼。這個命令在呼叫到來時允許更為詳細的鈴聲指示。
5、 AT+ILRR 本地DTE-DCE速率報告。
6、 AT+CRLP 無線電通信線路協議參數。
7、 AT+DOPT 其他無線電通信線路參數。
8、 AT%C 數據壓縮選擇。
9、 AT+DS 是否允許V42二度數據壓縮。
10、 AT+DR 是否報告V42二度數據壓縮。
11、 AT\N 數據糾錯選擇。

九、 傳真命令
1、 AT+FTM 傳送速率。
2、 AT+FRM 接收速率
3、 AT+FTH 用HDLC協議設置傳真傳送速率。
4、 AT+FRH 用HDLC協議設置傳真接收速率。
5、 AT+FTS 停止特定時期的傳送並等待。
6、 AT+FRS 接收沉默。

十、 第二類傳真命令
1、 AT+FDT 傳送數據。
2、 AT+FDR 接收數據。
3、 AT+FET 傳送頁標點。
4、 AT+FPTS 頁轉換狀態參數。
5、 AT+FK 終止會議。
6、 AT+FBOR 頁轉換字節順序。
7、 AT+FBUF 緩衝大小報告。
8、 AT+FCQ 控制拷貝質量檢驗。
9、 AT+FCR 控制接收傳真的能力。
10、 AT+FDIS 當前會議參數。
11、 AT+FDCC 設置DCE功能參數。
12、 AT+FLID 定義本地ID串。
13、 AT+FPHCTO 頁轉換超時參數。

十一、V24-V25命令
1、 AT+IPR 確定DTE速率。
2、 AT+ICF 確定DTE-DCE特徵結構。
3、 AT+IFC 控制DTE-DCE本地流量。
4、 AT&C 設置DCD(數據攜帶檢測)信號。
5、 AT&D 設置DTR(數據終端就緒)信號。
6、 AT&S 設置DST(數據設置就緒)信號。
7、 ATO 回到聯機模式。
8、 ATQ 決定手機是否發送結果代碼。
9、 ATV 決定DCE響應格式。
10、 ATZ 恢復為缺省設置。
11、 AT&W 保存設置。
12、 AT&T 自動測試。
13、 ATE 決定是否回顯字符。
14、 AT&F 回到出廠時的設定。
15、 AT&V 顯示模塊設置情況。
16、 ATI 要求確認信息。
這命令使GSM模塊傳送一行或多行特定的信息文字。
17、 AT+WMUX 數據/命令多路復用。

十二、特殊AT命令
1、 AT+CCED 電池環境描述。
2、 AT+CCED 自動RxLev指示。
3、 AT+WIND 一般指示。
4、 AT+ALEA 在ME和MSC之間的數據密碼模式。
5、 AT+CRYPT 數據密碼模式。
6、 AT+EXPKEY 鍵管理。
7、 AT+CPLMN 在PLMN上的信息。
8、 AT+ADC 模擬數字轉換度量。
9、 AT+CMER 移動設備事件報告。
這個命令決定是否允許在鍵按下時是否主動發送結果代碼。
10、 AT+WLPR 讀取語言偏好。
11、 AT+WLPW 寫語言偏好。
12、 AT+WIOR 讀取GPIO值。
13、 AT+WIOW 寫GPIO值。
14、 AT+WIOM 輸入/輸出管理。
15、 AT+WAC 忽略命令。
這個特殊命令允許忽略SMS、SS和可用的PLMN。
16、 AT+WTONE 播放旋律。
17、 AT+WDTMF 播放DTMF旋律。
18、 AT+WDWL 下載模式。
19、 AT+WVR 配置信差的聲音速率。
20、 AT+WDR 配置數據速率。
21、 AT+WHWV 顯示硬件的版本。
22、 AT+WDOP 顯示產品的出廠日期。
23、 AT+WSVG 聲音增益選擇。
24、 AT+WSTR 返回指定狀態的狀態。
25、 AT+WSCAN 掃瞄。
26、 AT+WRIM 設置或返回鈴聲指示模式。
27、 AT+W32K 是否允許32kHz掉電方式。
28、 AT+WCDM 改變缺省旋律。
29、 AT+WSSW 顯示內部軟件版本。
30、 AT+WCCS 編輯或顯示訂製性質設置表。
31、 AT+WLCK 允許在特定的***作符上個性化ME。
32、 AT+CPHS 設置CPHS命令。
33、 AT+WBCM 電池充電管理。
34、 AT+WFM 特性管理。是否允許模塊的某些特性,如帶寬模式、SIM卡電壓等。
35、 AT+WCFM 商業特性管理。是否允許Wavecom特殊特性。
36、 AT+WMIR 允許從當前存儲的參數值創建定制的存儲鏡像。
37、 AT+WCDP 改變旋律的缺省播放器。
38、 AT+WMBN 設置SIM卡中的不同郵箱號碼。

十三、SIM卡工具箱命令
1、 AT+STSF 配置工具箱實用程序。
2、 AT+STIN 工具箱指示。
3、 AT+STGI 獲得從SIM卡發來的預期命令的信息。
4、 AT+STCR 主動提供的結果:工具箱控制反應。