人们为什么在串行通信中使用AT命令?


21

我需要知道为什么嵌入式系统中的人会使用AT命令?
当我问人们说这是一个标准时。

所以我的问题是:“ AT”是什么意思?人们为什么一直说这是一个标准?


1
+++ ATH0有人吗?
kinokijuf 2012年

@kinokijuf是什么意思?
xsari3x 2012年

1
why people in embedded systems use AT commands-关于您的问题或串行链路上AT的使用,没有任何嵌入式特定内容。可能您已经在嵌入式系统上看到了这一点,但是下面将解释其起源,并且它并非特定于嵌入式系统。(请注意不要用太宽的画笔来画东西。)
Radian 2012年

1
AT命令甚至在称为modemuUnix的程序中实现,该程序创建一个主/从伪tty设备,并模拟一个实际上通过telnet传输的调制解调器。您通过与主机“拨号” ATD<hostname>。有趣的是,该程序几乎是在我需要它的时候发布的,大约在1996年:0.0.1版。从那以后我就不需要了。仍然是0.0.1!我将它与minicom结合使用,以通过telnet将zmodem传输到只能通过这种方式到达的远程主机。
卡兹(Kaz)2013年

@kinokijuf请不要在评论中输入。您只是让StackOverflow挂在我身上!:-)
Curt J. Sampson

Answers:


31

关于“ AT”命令的一个鲜为人知的细节是,许多调制解调器将以“自动波特率/自动奇偶校验”模式启动。最初,调制解调器开始时不会尝试实际解码任何串行数据,而只是监视宽度与相同有效位周期匹配的连续的低脉冲和高脉冲(例如,3.333ms表示300波特,833us表示1200波特,等等)。 )。发现后,他们将查看下一个低脉冲是否为该宽度的五倍。如果是这样,他们将注意另一个高-低-高或至少1.5倍高的时间。找到任何一个将表明调制解调器刚刚看到了所标识波特率的0x41或0xC1(即“ A”)。它将进一步指示连接的计算机正在使用8-N-1或7-E-1,或者它正在使用7-N-1或7-O-1。无论哪种情况,它都会寻找下一个字符为0x54或0xD4(即“ T”)。这将使调制解调器能够进一步对字符长度和奇偶校验设置进行分类。

注意,“ AT”之前收到的所有内容都将被忽略。如果打开回声,则只需镜像所有线路转换而无需任何串行解码,就可以将数据回显到连接的计算机。如果计算机以“ 247”波特率在“ AT”之前发送数据,它将以该速度回显。

如今,一些设备使用初始的“ A”进行自动波特率检测,但是其他情况下,命令以“ AT”开头的事实基本上是出于历史原因。


1
嗯...你是什么意思“ 7-N-1”?
xsari3x 2012年

1
七个数据位,无奇偶校验,一个停止位。如果不打算发送任何设置了高位的数据,则数据的发送速度比8-N-1快11%。
supercat 2012年

除了通常在+++ AT或+++ <guard time> AT命令的+++部分上进行过自动波特处理之外。参见en.wikipedia.org/wiki/Time_Independent_Escape_Sequence
2013年

1
@david:在与时间无关的转义序列文章中,我没有看到任何有关自动波特率的内容,也没有见过调制解调器以任何波特率接受+++而不是用于通信的波特率。在2400-8-N-1处背对背发送的字符0x9E 0x86(或在2400-7-O-1处为^ N ^ F)将与在1200波特处的“ +”字符产生完全相同的行转换,因此对于波特率训练字符,我认为“ +”是一个奇怪的选择。
2013年

Wikipedia(!)参考仅供那些不了解+++的人使用。我在“ U”上使用硬件,在自定义字符串上使用软件。您知道标准吗?所有用于启动+++的连接字符串,因此在进行任何其他通信之前,自动波特率已完成。
2013年

22

它指的是Hayes命令集,该命令集长期以来一直是通过串行线路向调制解调器(和其他设备)发出命令的标准。

代替具有两行的命令和数据,仅使用一行,并且从数据中发送特定顺序(例如+++,然后设置一定长度的暂停)来将其切换到命令模式。然后,下一个数据被接收设备视为命令。
之所以使用这样的东西,是因为它避免了另一对线的需要,这在许多情况下根本就不可用,尤其是在小型嵌入式系统中。

看看Wiki页面和底部的链接-那里有很多细节。

尽管原始AT集有各种各样的扩展,所以我不会依靠所有提到AT的东西来实际使用所有原始Hayes命令。例如,我在这里有一个蓝牙串行芯片,IIRC使用它自己的AT类型集。
但是我不是专家,我只是记得在过去的拨号和BBS时代使用命令来破解。


13

“ AT”命令集用于解决需要在同一字节流通道上发送任意数据的带外控制信息的问题。这是调制解调器的一个普遍问题,当时调制解调器是通过串行电缆连接到计算机的外部设备。

海斯是这种调制解调器的制造商,并且在早期很受欢迎。他们对带外问题的解决方案是向调制解调器发送大多数两个字母的ASCII控制命令,并按特殊顺序将其置于数据通过模式。为了减少看起来像命令的随机事件的可能性,它们的命令序列均以AT命令开头,AT命令代表“注意”。

Hayes获得了如此多的市场份额,以至于其他调制解调器制造商必须实施相同的命令集才能兼容。这样,客户可以使用其调制解调器而不必重新编写软件,该软件已经设置为驱动Hayes调制解调器。

如今,这种方案很少使用,但是即使在今天,仍然存在如此普遍的问题。


1
我喜欢这份有关Hayes的历史记录,以及它如何强制采用自己的标准,将您的答案与上述两个答案结合起来是足够的:)
xsari3x 2012年

顺便说一句,许多新的调制解调器似乎不再要求字符“ AT”为大写,这增加了发送文本文件的过程中断开连接将导致错误的调制解调器行为的频率。
supercat 2012年

带断裂控制代码为+++ AT或+++ <保护时间>。AT是标准控件集的前两个字符,代表ATtention。
2013年


0

为什么嵌入式系统中的人们使用AT命令?

我不是那些“嵌入式系统中的人”之一,但我会说AT命令仍在使用中,因为它们来自定义明确的低开销标准,用于嵌入式信令。

这意味着您可以将同一通信通道用于信令(用于管理通信的AT命令)和数据(您要发送的实际数据)。该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.