⑴ AT命令的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”之后)。 以前的贺氏命令集在基于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(
)字符决定 寄存器 描述 范围 预设值 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秒 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才能访问它们。
⑵ AT指令集数据命令
AT指令集包含一系列数据命令,它们在不同场景下提供特定的功能控制。首先,AT+CBST用于选择信差类型,确保通信的精确性。接下来,AT+FCLASS命令允许模块在数据或传真模式下工作,以适应不同的操作需求。
对于服务报告的详细程度,AT+CR提供了控制选项,使得用户能够获取更丰富的服务反馈信息。而当电话呼叫接入时,AT+CRC允许通过铃声指示更细致的划分结果。
对于本地DTE-DCE速率的监测,AT+ILRR确保了通信速率的实时报告,有助于优化网络性能。在无线通信线路协议设置方面,AT+CRLP和AT+DOPT提供了必要的参数调整。
数据压缩选项是通过AT+C来实现的,用户可以使用它来选择是否启用V42二度数据压缩。此外,AT+DR命令可以报告压缩状态,这对于数据传输的效率至关重要。