AT命令集
AT 即Attention,AT指令集是從
終端設備(Terminal Equipment,TE)或
數據終端設備(Data Terminal Equipment,DTE)向終端適配器(Terminal Adapter, TA)或
數據電路終端設備(Data Circuit Terminal Equipment,DCE)傳送的。通過TA,TE傳送AT指令來控制移動台(Mobile Station,MS)的功能,與GSM 網路業務進行互動。用戶可以通過AT指令進行呼叫、簡訊、電話本、數據業務、傳真等方面的控制。90年代初,AT指令僅被用於Modem操作。沒有控制行動電話文本訊息的先例,只開發了一種叫SMS BlockMode的協定,通過
終端設備(TE)或電腦來完全控制。由Hayes公司發明,已成為事實上的標準並被所有
數據機製造商採用的一個數據機命令語言。每條命令以字母"AT"開頭,因而得名。AT後跟字母和數字表明具體的功能。 SMS。之後,主要的行動電話生產廠商諾基亞、愛立信、摩托羅拉和HP共同為GSM研製了一整套AT指令,其中就包括對SMS的控制。AT指令在此基礎上演化並被加入GSM07.05標準以及的GSM07.07標準,完全標準化和比較健全的標準。如:對SMS的控制共有3種實現途徑:最初的BlockMode;基於AT指令的TextMode;基於AT指令的PDUMode。到PDUMode已經取代BlockMode,後者逐漸淡出。
GSM模組與計算機之間的通信協定是一些AT指令集,AT指令是以AT作首,
字元結束的字元串,AT指令的回響數據包在中。每個指令執行成功與否都有相應的返回。其他的一些非預期的信息(如有人撥號進來、線路無信號等),模組將有對應的一些信息提示,接收端可做相應的處理。
背景
網際網路剛出現時,人們都是用
modem來進行連線。modem通常是在電話線兩端,由一個modem開始連線並結束操作。無論modem是“發起”還是“應答”模式,數據傳輸的兩套頻率之間的手動切換,一般由發出呼叫的用戶將其modem切換為“發起”,然後手動撥打號碼。當遠程modem應答時,應已經設定為“應答”模式,電話聽筒被關閉,通信一直持續到呼叫方手動斷開。
當需要自動化時,通常只需要在應答方 - 例如,一家銀行可能需要從支行號碼呼入以結束日常處理。為了填補這一角色,某些modem包含了當其在應答模式時的自動摘機功能,其他用戶手動斷開時的清線功能。需要進行自動呼出撥號的情況相當少,並且是通過一個單獨的外圍設備—一個“撥號器”來處理的。這通常插是在電腦上的一個單獨的輸入/輸出連線埠(通常是一個
RS-232連線埠)並需要modem本身單獨編程。
這種操作方法在20世紀60年代和70年代初工作的很好,當時modem通常被用來連線終端設備如電腦(撥出)或智慧型電腦主機(應答)。然而,20世紀70年代的
微型計算機革命導致了低成本modem的引入並使這個半專用的點對點連線的想法已不在適用。成千上萬的潛在用戶可能要撥打任意的其他數千名用戶,並且在當時唯一的解決辦法就是讓用戶手動撥號。
計算機行業需要一種方式來告訴modem通過軟體來撥什麼號。較早的單獨撥號器有這個功能,但它只能使用一個單獨的連線埠,而微型計算機可能沒有。另一種解決辦法是使用一個單獨的一套“命令
引腳”專門用於傳送和接收命令,另一套可以使用一個信號引腳指示modem應該將收到的數據解釋為命令。這些都在RS-232標準有硬體支持。然而,微機的RS-232連線埠的許多實現都是非常基本的,並且為了節約成本而消除了很多引腳。
賀氏的解決方案
賀氏通訊在1981年推出了其通過沒有修改而重新使用現有的數據引腳的Smartmodem解決方案。而且,modem本身可以在兩種模式之間進行切換:
1,modem傳送數據到遠程modem時的
數據模式。(在數據模式中,modem把它從計算機接收的任何東西作為數據通過電話線傳送出去)。
2,數據被解釋為命令而給本地modem的
命令模式(本地modem應執行的命令)。
從數據模式切換到命令模式,會話發出3個加號的轉義序列字元串(“+++”)並跟隨一秒鐘的暫停。轉義序列結束後的暫停是必須的,以減少入站信號所造成的問題:如果三個加號接收後的1秒內接收到任何其他數據,它就不是轉義序列並將作為數據傳送。要切換回去,他們傳送
在線上命令,O。在實際使用中許多命令在完成後自動切換到線上模式,而對於用戶來說很少使用線上命令。
為了避免賀氏的專利授權,一些廠商實施的轉義序列沒有時間間隔保護(TIES)。這裡有一個主要的影響是拒絕服務安全,它會導致計算機嘗試在數據模式中傳送位元組序列“+++ATH0”時使modem掛斷連線。對於通過這種modem連線到Internet的任何計算機,這可以很容易地被通過傳送包含“+++ATH0”有效載荷序列的死亡請求
ping所利用。計算機作業系統會自動嘗試用相同的有效載荷回復發件人,modem會將
ICMP數據包的有效載荷數據解釋作為賀氏命令而立即將自身從網際網路斷開。同樣的錯誤也可能會觸發,如,計算機用戶試圖傳送包含上述字元串的電子郵件。
命令
賀氏命令集包括各種電話線操作命令,如撥號和掛斷。它還包括用來modem設定的各種控制,包括一組暫存器指令集,允許用戶在原來的賀氏modem上直接設定各種記憶體位置。該指令集的其中相當一部分在很大程度上幾乎被所有早期300波特modem製造商一字不差的進行了複製,包括暫存器的含義。
1200和2400波特的擴展需要一套小的新命令集,它們中一部分用(“&”)前綴來表示支持新的功能。賀氏自身被迫在它們的1200後不久迅速推出一個2400波特模型,而作為一個省時的辦法,該命令集跟1200是相同的。基本上是偶然的,這使得現有的1200波特率modem用戶使用新的賀氏2400模型時無需改變他們的軟體,這強化了賀氏版本命令的使用。數年後,
TIA/EIA將2400波特率命令集成為一個正式的標準,標題為:數據傳輸系統和設備-串列異步自動撥號和控制,TIA / EIA-602。
然而賀氏移動通信在高速套用或壓縮的使用上進展緩慢,而其它三家公司則開始領先 - Microcom,U.S. Robotics 和 Telebit。這三個公司使用自己的擴展命令集,而不是等待賀氏。到了90年代初期,共有四個主要命令集在使用,以及基於其中之一的一些版本。20世紀90年代初,隨著14.4和28.8 kbit/s的的廣泛引入事情再次變得簡單。慢慢地,基於原賀氏命令集使用“&”擴展的命令集開始流行,然後變得普遍。只有另外一個命令集一直流行:US Robotics modem命令集。
描述
以下文字列出了部分賀氏命令集(也叫AT命令:"AT" 意思是注意)。
賀氏命令可分為四組:
1.基本命令集—一個大寫字母緊跟一個數字。如:M1。
2.擴展命令集—一個“&”(and符號)和大寫字母緊跟一個數字。它是基本命令集的擴展。如:&M1。注意:M1和&M1是不同的。
3.專有命令集—通常使用一個反斜槓(“\”)或者是百分號(“%”)開頭;這些命令在各modem廠商間差異很大。
4.暫存器命令—Sr=n。這裡r是要改變的暫存器編號,n是要賦予的新值。
暫存器代表記憶體中的指定位置。Modem在主機板上有一些少量的記憶體。第四組命令的目的是為了輸入值到一個特定的暫存器(記憶體位置)。該暫存器將存儲一個modem和通信軟體可以利用的特定變數(字母數字信息)。例如,S7 = 60指示計算機“設定暫存器#7的值為60”。
雖然指令集語法的大多數命令由字母數字組合(L0,L1等)定義,零則是可選使用的。本例中,“L0”等同於普通的“L”。閱讀下表時要記住這一點。
數據模式下,轉義序列可將modem返回到命令模式。正常的轉義序列是三個加號(“+++”),並為將它跟可能的真實數據消除歧義:它的前面必須有一個停頓,加號之間沒有任何停頓,並緊跟一個暫停;默認情況下,“暫停”是一秒鐘,“不停頓”則是更少。
語法定義
以下語法定義:
<CR>回車符,是在命令行和結果代碼終止符,其值是0到255之間的十進制ASCII碼,在參數S3中指定。默認值為13。
<LF>換行字元,是公認的換行符的字元。它的值介於十進制ASCII碼的0到255之間,在參數S4中指定。默認值為10。除非使用詳細結果代碼(使用V1選項)否則換行符在回車符之後輸出,如果使用了數字格式結果代碼(使用V0選項),它不會出現在結果代碼中。
<...>尖括弧內名稱是語法元素。尖括弧不會出現在命令行中。
[...]方括弧內是命令的可選子參數或AT信息回響的可選部分。括弧本身不會出現在命令行中。當讀取AT命令時沒有給出子參數,新值是其先前的值。在AT命令中不存儲任何子參數的值,所以沒有讀命令,也即所謂的輸入動作命令,輸入應在子參數建議的默認設定的基礎上進行。
modem初始化
其他用法,見向量初始化。
一個字元串可以包含放在一起的許多賀氏命令,從而使modem以最佳方式準備撥號或接聽,如AT&F&D2&C1S0 = 0X4。這就是所謂的初始化字元串。V.250規範要求所有的DCE接受至少40個字元的級聯命令主體(在“AT”之後)。
會話示例
以下表示兩台計算機,計算機A和計算機B,都連線了modem,並且用戶使用終端仿真軟體控制modem。終端仿真軟體通常允許用戶直接傳送賀氏命令給modem,並查看回響。在這個例子中,計算機A的用戶讓modem撥modemB的電話號碼555-1234(長途)。需要注意的是每一個命令和回響之後,都有傳送回車符結束命令。
Modem A | Modem B | 備註 |
ATDT15551234 | | 用戶在modem A發出一個撥號命令:AT—讓modem注意 D-撥號 T-按鍵音 15551234-呼叫這個號碼 |
| 響鈴 | Modem A開始撥號。Modem B響鈴,並且modem會發出報告。 |
| ATA | modem B上的計算機發出回應命令。 |
連線 | 連線 | modem連線,並且兩個modem都報告狀態“連線”(在實踐中,大多數modem會在連線後報告更多信息—指出連線的速度。)另外,此時,兩個modem將在串口提高DCD,或者叫數據載荷檢測信號。 |
abcdef | abcdef | modem連線後,任何一端輸入的字元都將出現在另一端。計算機A的人開始輸入。字元通過modem出現在計算機B的螢幕上。(用戶A可能不會看到自己輸入的字元—這依賴於終端軟體的本地回顯設定) |
| +++ | 計算機B的人發出modem取消命令。(交替的,而更常見的是,計算機B可能丟掉DTR,或者叫數據終端準備信號—來實現掛斷,而不需要使用+++或ATH。) |
| OK | modem確認它。 |
| ATH | 計算機B的人發出掛斷命令。 |
無載荷 | OK | 兩個modem都報告連線結束。modem B回應“OK”命令作為預期結果;modem A說出“無載荷”來報告遠端來中斷連線。兩個modem都丟棄了他們的DCD信號。 |
配合度
以前的賀氏命令集在基於modem的通信中所代表了巨大的飛躍,隨著時間的推移,許多問題開始出現,但幾乎沒有是因為貨氏本身引起的:
由於缺乏書面的標準,其他的modem製造商抄襲了外部可見的命令和(大致的)基本命令。這導致了modem在如何改變狀態時的各種各樣的微妙的差別,以及他們如何處理錯誤條件,掛起和逾時。
每個製造商傾向於增加新的命令來處理新出現的需求,經常與其他modem不兼容。
例如,設定硬體或軟體
握手往往需要為不同的modem設定許多不同命令。這破壞了基本“AT”命令集的普遍方便性。
許多“賀氏兼容”modem具有它們不兼容的嚴重怪癖。例如,許多modem接收到“AT Z”重置命令後需要幾秒鐘的暫停。一些modem需要命令之間有空格,有的則不需要。有些會因為自己的“意志”改變波特率而幫倒忙,這將使得電腦不知道如何處理傳入位。
由於這些結果,最終許多通信方案不得不放棄了任何能跟所有的“賀氏兼容”modem交談的想法,而不得不嘗試使用程式從回響來確定modem的類型,或提供給用戶一些辦法,使他們能夠輸入隨便什麼特殊命令以強迫他們的特殊modem正確行事。
基本賀氏命令集
下面的命令是幾乎所有的modem支持的AT命令集,無論是舊新。
命令 | 描述 | 備註 |
A0 or A | 回應呼入呼叫 | |
A/ | 重複最後命令 | 不要使用AT前綴,不要跟回車符。回車符通常表示中止。 |
D | 撥號 | 撥後面的號碼並握手 P—脈衝撥號 T—撥號音撥號 W—等待下一個撥號音。 R—撥號後的反響回應模式。 @—為二次撥號等待30秒。 ,—在S8暫存器暫停指定時間(通常2秒)。 ;—撥號後保持命令模式。 !- 閃光燈開關掛機(掛斷了半秒,再轉接電話。) L—撥最後一次號碼 |
E0 或 E | 無回顯 | 不會回顯命令到計算機。 | |
E1 | 回顯 | 回顯命令道計算機(這樣一個人可以看到另一個人的輸入)。 | |
H0 | 掛鈎狀態 | 掛鈎中掛斷電話,結束過程中的任何呼叫。 | |
H1 | 掛鈎狀態 | 掛鈎結束摘起電話線(通常會聽到撥號音)。 | |
I0 toI9 | 調查、信息或訊問 | 該命令返回有關模型的信息,比如它的固件或品牌名稱。每一個數字(0〜9,有時是10或以上)返回一行modem的具體信息,或如果沒有定義返回“ERROR”。今天,Windows使用即插即用檢測專用modem的類型。 | |
L0 orLn (n=1 to 3) | 揚聲器音量。只被某些modem支持,通常擴展支持。modem很少有揚聲器,或者有物理音量控制,或者聲音輸出是通過音效卡的不支持此命令。 | 關閉或降低音量 | |
M0 or M | 喇叭關閉,撥號時無聲 | M3也很常見,但很多品牌不同 | |
M1 | | 遠程載波檢測揚聲器(即直到被其他modem聽到) | |
M2 | | 揚聲器始終打開(連線後聽到數據聲音) | |
O | 返回線上 | 由“+++”轉義代碼被中斷後返回modem到正常連線狀態。 | |
Q0 or Q | 安靜模式 | 關閉 - 顯示結果碼,用戶會看到命令回響(如OK) | |
Q1 | 安靜模式 | 打開 - 結果代碼被抑制,用戶不會看到回響。 | |
Sn | 選擇當前暫存器 需要注意的是Sn,?和=r實際上是三個單獨的命令,並且可以在單獨的AT命令中給予。 | 選擇暫存器n作為當前暫存器 | |
Sn? | 選擇暫存器n作為當前暫存器,並查詢它的值。使用?對自己查詢而不管最近選擇了那個暫存器。 | |
Sn=r | 選擇暫存器n作為當前暫存器,並在其中存儲r。使用=?對自己存儲而不管最近選擇了那個暫存器。 | |
V0 or V | | 數字結果代碼 | |
V1 | 詳細 | 英文結果代碼(例如CONNECT BUSY,NO CARRIER等) | |
X0 or X | | 賀氏Smartmodem 300兼容的結果代碼 | |
X1 | Smartmodem | 通常增加連線速度到基本結果代碼(如CONNECT 1200) | |
X2 | | 通常添加了撥號音檢測(防止盲目撥號,有時防止ATO) | |
X3 | | 通常增加忙音檢測。 | |
X4 | | 通常添加忙音和撥號音檢測 | |
Z0 or Z | | 復位modem存儲的配置。對於多個配置檔案使用Z0,Z1etc。這是跟沒有NVRAM的modem(非易失性存儲器)一樣的出場配置&F。 | |
| 重置 | | |
註:一個命令字元串由一個CR(\r)字元決定
modem s暫存器定義
暫存器 | 描述 | 範圍 | 預設值 |
S0 | 自動應答前的振鈴次數 | 0-0從不 | 0 |
S1 | 振鈴計數器 | 0-255振鈴次數 | 0 |
S2 | 轉義字元 | 0–255, 十進制ASCII碼 | 43 ("+") |
S3 | 負載返回字元 | 0-127, 十進制ASCII碼 | 13 (負載返回) |
S4 | 換行符 | 0-127, 十進制ASCII碼 | 10 (換行) |
S5 | 退格符 | 0-32, 十進制ASCII碼 | 8(退格) |
S6 | 盲撥前的等待時間 | 2–255秒 | 2 |
S7 | 撥號後等待負載 | 1–255秒 | 50 |
S8 | 停頓時間(撥號等待) | 0–255秒 | 2 |
S9 | 負載檢測回應時間 | 1–255個十分之一秒 | 6(0.6秒) |
S10 | 負載丟失和掛斷之間的延遲 | 1–255個十分之一秒 | 14(1.4秒) |
S11 | DTMF撥號持續 | 50–255毫秒 | 95毫秒 |
S12 | 取消代碼守衛時間 | 0–255 個五十分之一秒 | 50(1秒) |
S18 | 測試定時器 | 0–255秒 | 0秒 |
S25 | DTR延遲 | 0–255(同步模式時為秒,其他模式是百分之一秒) | 5 |
S26 | RTS到CTS延遲間隔 | 0–255個百分之一秒 | 1個百分之一秒 |
S30 | 不活動連線定時器 | 0–255個十分之一秒 | 0(禁止) |
S37 | 所需的電信線路速度 | 0–10 命令選項: · 0嘗試自動連線模式 · 1嘗試使用300bit/s的連線速度 · 2嘗試使用300bit/s的連線速度 · 3嘗試使用300bit/s的連線速度 · 5嘗試使用1200bit/s的連線速度 · 6嘗試使用2400bit/s的連線速度 · 7嘗試使用V.23 75/1200模式 · 8嘗試使用9600bit/s的連線速度 · 9嘗試使用12000bit/s的連線速度 · 10嘗試使用14400bit/s的連線速度 | |
S38 | 強制下線前的延遲 | 0–255秒 | 20秒 |
V.250
ITU-T在1995年在它的V.25建議中建立了一個標準,試圖來重新建立一個命令集標準。它在1998年作為跟賀氏命令集V.251無關的附屬檔案更名為v.250。V.250兼容的modem實現標準所指定的A,D,E,H,I,L,M,N,O,P,Q,T,V,X,Z,及C&D和&F命令。它也必須實現S暫存器並且必須使用標準中給出的暫存器S0,S3,S4,S5,S6,S7,S8和S10作為目的。最後還只能跟ITU建議一致,必須實現任何加號“+”後面跟隨任意A到Z字母的命令。modem製造商可以自由地實施其他命令和它們看到的適合的S暫存器,並且可以給標準命令添加選項。
V.250— 定義領先字元序列
領先字元 | 包括有關命令 |
+A | 呼叫控制(網路地址)問題,常見有,PSTN,ISDN,ITU-T建議。X.25,交換式數字 |
+C | 數字蜂窩擴展 |
+D | 數據壓縮,ITU-T建議。V.42 |
+E | 錯誤控制,ITU-T建議。V.42 |
+F | 傳真,ITU-T建議。T.30等。 |
+G | 一般性的問題,如身份和能力 |
+I | DTE-DCE接口的問題,ITU-T建議。V.24等。 |
+M | 調製,ITU-T建議。V.32等 |
+P | PCM DCE命令,ITU-T建議。V.92 |
+S | 交換或同步數據類型 |
+T | 測試問題 |
+V | 語音擴展 |
+W | 無線擴展 |
GSM
ETSI GSM 07.07(3GPP TS 27.007)規定的AT命令式控制GSM手機或modem。ETSI GSM 07.05(3GPP TS 27.005)規定的AT命令式管理GSM的SMS簡訊功能。
GSM的命令示例:
命令 | 描述 |
AT+CPIN=1234 | 輸入PIN 碼 |
AT+CPWD="SC","old","new" | 將“舊的”PIN碼“新的” |
AT+CLCK="SC",0,"1234" | 刪除PIN碼 |
AT&V | 狀態 |
ATI | 狀態(製造商,型號,版本,IMEI功能) |
AT+COPS=? | 列出可用的網路0-Unknown/2-Current/3-Forbidden,LONGNAME,SHORTNAME,數值-ID,“ACT” |
AT+CSQ | 得到的信號強度。應答+CSQ:<rssi(more=better)>,<ber, less=better> |
ATD*99# | 撥號接入點 |
AT+CGDCONT=1,"IP","access.point.name" | 定義PDP上下文 |
GSM/3G medom通常支持ETSI GSM 07.07/3GPP TS 27.007 AT指令集擴展,儘管有很多命令執行有所不同。
大多數USB modem廠商,如華為,Sierra Wireless,Option,還定義了專有無線模式選擇擴展(GSM/3G偏好)或類似擴展。因為性能的原因,某些最新的高速modem提供了一個虛擬乙太網接口而不是使用PPP連線,(PPP連線只在計算機和modem之間而不通過網路使用)。該設定需要供應商的AT命令擴展。有時候這些特定擴展規範是公開,而其他時候供應商則要求有一個NDA才能訪問它們。
WindowsAT命令
基本參數
列出在指定的時間和日期在計算機上運行的已計畫命令或計畫命令和程式。必須正在運行“計畫”服務才能使用 at 命令。
at [\\computername] [[id] [/delete] | /delete [/yes]]
at [\\computername] time [/interactive] [/every:date[,...]| /next:date[,...]] command
參數
無
如果在沒有參數的情況下使用,則 at 列出已計畫的命令。
\\computername
指定遠程計算機。如果省略該參數,命令將安排在本地計算機。
id
指定指派給已計畫命令的識別碼。
/delete
取消已計畫的命令。如果省略了 id,計算機中已計畫的命令將被全部取消。
/yes
當刪除已計畫的事件時,對系統的查詢強制進行肯定的回答。
time
指定
運行命令的時間。將時間以 24 小時標記(00:00 [午夜] 到 23:59)的方式表示為小時:分鐘。
/interactive
允許作業與在作業運行時登錄用戶的桌面進行互動。
/every:date[,...]
在每個星期或月的指定日期(例如,每個星期四,或每月的第三天)運行命令。將 date 指定為星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的數字)。用逗號分隔多個日期項。如果省略了 date,將假定為該月的當前日期。
command
指定要運行的 Windows 2000 命令、程式(.exe 或 .com 檔案)或
批處理程式(.bat 或 .cmd 檔案)。當命令需要路徑作為參數時,請使用
絕對路徑,也就是從驅動器號開始的整個路徑。如果命令在遠程計算機上,請指定伺服器和共享名的 UNC 符號,而不是遠程驅動器號。如果命令不是可執行 (.exe) 檔案,必須在命令前加上 cmd /c,例如:
cmd /c dir > c:\test.out
使用例舉
at 10:00 /every:m,t,w,th,f,s,su shutdown -s -t 30
命令解釋:在周一、周二、周三、周四、周五、周六、周日 每天的10:00 關機(30s 提示時間)
PS: 若取消關機命令,可執行命令: shutdown -a