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

电器工程 串行 沟通 命令
2022-01-09 03:40:57

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

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

4个回答

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

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

如今,一些设备使用初始“​​A”进行自动波特率检测,但除此之外,命令以“AT”开头的事实基本上是一个历史问题。

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

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

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

不过,原始 AT 集有各种各样的扩展,所以我不会指望所有提到 AT 的东西来实际使用所有原始的 Hayes 命令。例如,我在这里有一个蓝牙串行芯片,IIRC 使用它自己的 AT 类型集。
不过,我不是这方面的专家,我只记得在拨号和 BBS 的旧日子里用命令乱搞。

“AT”命令集是为了解决需要在同一字节流通道上发送任意数据的带外控制信息的问题。这是调制解调器的一个常见问题,当它们是通过串行电缆连接到计算机的外部盒子时。

Hayes 是此类调制解调器的制造商,并在早期获得了很多人气。他们对带外问题的解决方案是向调制解调器发送主要是两个字母的 ASCII 控制命令,并带有特殊的序列,以使其处于数据直通模式。为了减少看起来像命令的随机内容的可能性,它们的命令序列都以 AT 命令开头,代表“注意”。

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

如今,这种方案很少使用,但当然,即使在今天,这种方案也仍然存在于黑暗的角落。

有一个特别好的文档描述了“AT”命令的历史,可以在这里找到:

http://nemesis.lonestar.org/reference/telecom/modems/at/history.html

它包含许多关于协议如何产生的良好“历史”。