为什么要设置AT命令?


15

坦白说,为什么所有的通信IC(或至少许多,或者最著名或最受欢迎的),如蓝牙或WIFI或GSM等,都支持AT命令集?他们为什么没有用于D / C(数据或命令)的简单引脚进行通信?使用AT命令集有什么好处?

AT命令集很大,会占用时间和内存空间,并且使通讯变得困难,而您可以使用简单的D / C引脚并发送整数来设置寄存器或发送数据。


18
一句话:传统……它们都假装是与Hayes兼容的调制解调器,并且自从时间曙光开始(或者至少从80年代开始,这几乎是同一件事)。不,那不是一个很好的理由。
brhans 2015年

4
不仅是传统,而且是一个非常好的主意。俗话说:“关于标准的奇妙之处在于,有很多选择。” 我希望我的硬件和软件可以与正在使用的任何通信模块一起使用,不必担心它所使用的语言(命令集)是否与以前使用的语言不同。
Dwayne Reid

7
XKCD必须在这里
bitsmack 2015年

1
从理论上讲,您可以拔下WIFI模块,然后用另一家供应商的模块替换。并且由于协议是相同的,因此您甚至不必调整代码。
Paul

1
如果通信/位出现问题,您将无法获得正确的响应,即:“确定”,因此,如果您进行相应的处理,它就相当稳定。调试起来非常容易,因为消息在某种程度上是有意义的。但是,该处理确实确实难以实现。您必须检查上述消息。并以MCU不常见的方式读出它们。但是再说一次,如果您这样做一次,它将对其他AT设备起作用。
Paul

Answers:


27

brhans是正确的-旧版。

在1980年代,海斯开始制造“ Smartmodem 1200”。它几乎已经过时了,海耶斯(Hayes)赶出了Smartmodem 2400。结果,海耶斯率先制造了两个接受相同编程命令的不同速度的调制解调器!任何可以使Smartmodem 1200拨打电话号码的软件都可以拨打Smartmodem 2400。

当时,每个新的调制解调器都需要几个月才能编写更新的驱动程序。当Smartmodem 2400投放市场时,Smartmodem 1200已经有了有效的驱动程序,因此无需等待数月。突然,其他制造商意识到了新调制解调器具有与旧调制解调器相同的命令集的优势。在六个月内,供应商将提供“兼容干草”的调制解调器作为唯一选择。海因斯起诉了他们。因此,每个人都开始将其调制解调器称为“兼容AT命令集”,但继续使用Hayes命令集。

到80年代中期,没有生产不能使用AT命令集的消费者调制解调器。结果,像调制解调器这样的每个调制解调器都使用AT命令。还有其他优点-因为命令集是ASCII,所以任何人都可以在终端窗口中手动键入AT命令来控制调制解调器。因为我自己的调制解调器具有简单的RJ11连接,所以我以前使用以下命令在Procomm Plus中启动每个会话:

AT
OK
ATH1
[dial tone]
ATDT [phone number]

只是为了确保我听到拨号音。如果没有,我会四处晃动一下电线!


1
关于可调试性的要点。纯二进制协议(例如LCD屏幕数据流)要求您设计硬件/固件,甚至开始与设备通信。AT命令集允许您使用零硬件测试设备。您需要的只是一个串行端口(或如今的USB到串行转换器)和一个终端仿真器。
slebetman

1
一个小问题-Winmodems保留了与AT命令的应用程序级别的兼容性,但完全破坏了OS级别的兼容性。在Winmodem之前的版本中,甚至内部调制解调器都通过沼泽标准16550A UART进行接口,该UART是众所周知的,并且受到Linux的透明支持(因为它们看起来像操作系统的普通ISA或PCI串行端口)。Winmodems通过将高级逻辑(Lucent)或几乎所有内容(HSP)移入驱动程序,从而在活动中投入了很多精力。由于Winmodem的AT命令主机是虚拟的,因此在Linux下它们实际上是纸镇。
Bitbang3r 2015年

1
是的,我也曾经使用脉冲拨号电话线来手动键入它们(但是所有通讯应用程序都假定每个人都有按键音)。:-)
Brian Knoblauch 2015年

@slebetman:当设备具有支持二进制或基于文本的协议的选项时,我喜欢它,但是“ AT”命令是一个单独的问题。在没有自动波特率检测的系统中,“ AT”作为命令前缀没有什么特别的优势,而且我已经看到许多系统将命令以“ AT”作为前缀,但是仍然需要在原理之外发送和接收字符ASCII集和通用控制代码。
超级猫

1
IIRC,Linux最终获得了一些winmodems的驱动程序。在许多情况下,通过ALSA或OSS声音驱动程序,因为最简化的软调制解调器实质上是连接到电话线的声卡。IIRC,winmodems具有较小的延迟优势,因为您没有将数据卡在UART缓冲区中。只有游戏玩家在乎。其他人都讨厌浪费其单核CPU的周期。
彼得·科德斯

20

您仅在谈论命令集的缺点。考虑一下好处:

  1. 通过使用AT命令集,您的通信设备可以立即通过操作系统的PPP放置在任何IP网络上实现。替代方法是,除了设计自定义协议接口之外,还必须为每个要支持的OS编写自己的网络设备驱动程序,然后该OS才能使用您的设备加入Internet。

  2. 任何称职的工程师都将已经知道此协议。从一项日常工作中需要他理解并实现许多非标准串行协议的情况中获取一项:精心设计的通用协议会更好。

  3. 尽管确实确实AT协议比特定于任务的专用协议要复杂得多,并且要花更多的内存来实施,但选择实施该协议的人也要避免花大量时间重新发明一个完美的车轮。他拥有数十年的设计经验。他在投入开发时间之前就知道它会起作用。好的协议设计非常困难。

    (这些天之一,我将发表我的巨著,“您的协议很烂”,以期防止犯下更可怕的,半价半价的一次性协议。)


1
虽然我同意这种看法;“精心设计”?三个字:ATS命令...
CVn

我见过的大多数使用所谓的“ AT”命令的设备除了前两个字符外在它们的命令集中没有什么共同点。如果WiFi模块可以接受“ ATDT192,168,254,5W1234”作为打开到192.168.254.5的端口1234的TCP连接的命令,则软件期望调制解调器可以正常使用该模块,但我尚未看到这样做的方法。诸如此类的东西。
supercat

@supercat:这是因为从相关标准(IEEE802系列)和MAC地址的使用可以看出,WiFi调制解调器更类似于以太网卡。虽然问题是关于“通信IC”的,但我认为coomon以太网IC不会使用AT命令集。
MSalters

@MSalters:在许多情况下,WiFi模块的主要用途是一次建立一个TCP连接。为此,Hayes仿真可以很好地工作。我已经看到了FOSSIL驱动程序,该驱动程序可以通过使像上面的数字那样“拨号”它们,从而将基于DOS的终端程序用作telnet客户端,并且我认为相同的方法也可以与WiFi模块一起很好地工作。无论如何,我的观点是,如果产品使用上述字符串来建立TCP连接,则这种用法将具有显着的兼容性/熟悉性,但是……
supercat

...我怀疑当今使用“ AT”开头的命令的大多数设备之所以这样做,仅是因为其创建者看到许多其他设备以“ AT”开头的所有命令,并且随后效仿却不知道为什么其他设备会这样做所以。
超级猫

14

我将在问题的另一端进行扩展...为什么不只是在接口上添加另一条信令线呢?

只能由没有经历过真正的25针RS232接口上所有信号线排列问题的人提出这个问题。除了TXD,RXD和Gnd,已经有其他几对信号,RTS / CTS(准备发送,清除发送)DSR / DTR(数据设置就绪,数据终端就绪)和硬件挂断引脚。和别的。制造商之间并没有明确的通用协议,究竟究竟是什么功能-为什么首先需要两组硬件握手信号?还有最重要的软件XON / XOFF协议)(为什么Diablo打印机(据我所知唯一)坚持在针11上进行握手?)

一些设备需要完整的接口。有些人对TXD / RXD / Gnd感到满意。可以通过短接引脚4和6来愚弄一些人(从而将自己的RTS环回CTS)。有些本来应该是DCE的则是DTE,反之亦然,它们只能通过“空调制解调器”电缆与每对连接交换的其他任何设备进行通信。

然后,为简化所有步骤,IBM PC为RS232引入了新的9针接口。意味着您现有的所有电缆集合都已过时,您必须重新开始...

所有这些都使生活变得艰难,即使不考虑两端的波特率设置都可能不同。

这为围绕RS232接线盒,电缆和测试/调试工具的整个行业提供了支持。

在这种情况下,添加另一个信号可能不会成功...


9

第一个使用“ AT”命令的Hayes调制解调器选择“ A”作为其命令前缀的第一个字符,因为它需要支持多种波特率,并且该行上的“ A”如下所示: -------_-_____-x----------两者之间的比率为5:1最长和最短的“低”时间(取决于奇偶校验设置,“ x”可能高或低)。没有低于1200波特的速率可以管理833us或更短的“短”时间,没有任何高于2400的速率不能管理4.16ms或更长的“长”时间,因此调制解调器可以放心地假设,如果看到了类似的东西就像1200波特的“ A”一样(也是300波特等)。“ T”的奇偶性与“ A”的奇偶性相反,因此,如果第二个字符看起来像“ T”,

使用“ AT”命令的设备或驱动程序与Hayes调制解调器命令类似或类似的工作(例如,接受ATDTW192,168,254,123W4567作为连接到192.168.254.123的端口4567的命令),目的是与希望与旧样式通信的软件兼容调制解调器或兼容设备。但是,有许多设备使用“ AT命令集”似乎是有用的营销流行语的理论,即使用“ AT命令集”开头的命令,即使这些设备不具备自动波特率检测功能并且其命令与任何其他设备上的任何东西。在这种情况下,使用“ AT”作为命令前缀不会增加兼容性值,也没有任何用处。设计师之所以这样做,是因为他们看到其他设计师也这样做了,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.