¿Por qué las personas usan comandos AT en la comunicación en serie?

21

Necesito saber por qué las personas en sistemas integrados usan comandos AT?
Cuando le pregunté a la gente dice que es un estándar.

Entonces mi pregunta es: ¿Qué significa "AT"? ¿Por qué la gente sigue diciendo que es un estándar?

xsari3x
fuente
1
+++ ATH0 alguien?
kinokijuf
@kinokijuf, ¿qué quieres decir?
xsari3x
1
why people in embedded systems use AT commands- no hay nada específico sobre su pregunta o el uso de AT en un enlace en serie. Puede ser que hayas visto esto en un sistema integrado, pero su origen se explica a continuación y no es específico de los sistemas integrados. (Tenga cuidado de no pintar cosas con un pincel demasiado ancho).
Radian
1
El comando AT incluso se implementó en algo llamado modemu: un programa Unix que crea un dispositivo pseudo-tty maestro / esclavo, y simula un módem que en realidad pasa por telnet. Usted "marca" un host con ATD<hostname>. Lo curioso es que ese programa salió casi exactamente en el momento en que lo necesitaba, alrededor de 1996: versión 0.0.1. No lo he necesitado desde entonces. ¡Y todavía es 0.0.1! Lo usé junto con minicom para hacer transferencias de zmodem a través de telnet a hosts remotos a los que solo se podía llegar de esa manera.
Kaz
@kinokijuf Por favor, no ponga eso en los comentarios. ¡Acabas de hacer que StackOverflow me cuelgue! :-)
Curt J. Sampson

Respuestas:

31

Un detalle poco apreciado sobre los comandos "AT" es que muchos módems comenzarían en modo "auto-baud / auto-parity". Inicialmente, el módem comenzaría sin tratar de decodificar ningún dato en serie, sino que simplemente observaría un pulso bajo y pulso alto consecutivos cuyos anchos coincidieran con el mismo período de bits válido (por ejemplo, 3.333 ms para 300 baudios, 833us para 1200 baudios, etc. .). Al encontrar eso, verían si el siguiente pulso bajo era cinco veces ese ancho. Si es así, estarían atentos a otro alto-bajo-alto o de al menos 1,5 bits veces más alto. Encontrar cualquiera de estos indicaría que el módem acaba de ver un 0x41 o 0xC1 (es decir, "A") de la velocidad de transmisión identificada. Además, indicaría que la computadora conectada estaba usando 8-N-1 o 7-E-1, o que estaba usando 7-N-1 o 7-O-1. En cualquier caso, buscaría que el siguiente carácter sea 0x54 o 0xD4 (es decir, "T"). Eso permitiría al módem categorizar aún más la longitud de los caracteres y la configuración de paridad.

Tenga en cuenta que todo lo recibido antes del "AT" sería ignorado. Si se activa el eco, los datos se devolverán a la computadora conectada simplemente reflejando todas las transiciones de línea sin ninguna decodificación en serie. Si una computadora enviara datos antes del "AT" a, por ejemplo, 247 baudios, se haría eco a esa velocidad.

Hoy en día, algunos dispositivos usan una "A" inicial para la detección automática de la velocidad de transmisión, pero por lo demás el hecho de que los comandos comienzan con "AT" es básicamente una curiosidad histórica.

Super gato
fuente
1
ehm ... ¿qué quieres decir con "7-N-1"?
xsari3x
1
Siete bits de datos, sin paridad, un bit de parada. Permite que los datos se envíen un 11% más rápido que 8-N-1, si uno no va a enviar datos con el conjunto de bits alto.
supercat
Excepto que el auto-bauding fue (y se hace) típicamente en la parte +++ de un comando +++ AT o +++ <guard time> AT. Ver en.wikipedia.org/wiki/Time_Independent_Escape_Sequence
david
1
@david: no veo ninguna mención de auto-bauding en el artículo de secuencia de escape independiente del tiempo, ni he visto un módem aceptar +++ a ninguna velocidad de transmisión diferente a la que estaba usando para la comunicación. Los caracteres 0x9E 0x86 enviados consecutivamente a 2400-8-N-1 (o ^ N ^ F a 2400-7-O-1) producirían exactamente las mismas transiciones de línea que un carácter "+" a 1200 baudios, entonces consideraría "+" como una elección extraña para un personaje de entrenamiento en baudios.
supercat
La referencia de Wikipedia (!) Fue solo para personas que no conocen +++. Hardware que utilizo trenes en 'U', software entrena en cadenas personalizadas. ¿Conoces un estándar? Todas las cadenas de conexión se usaban para iniciar +++, por lo que el auto bauding estaba completo antes de cualquier otra comunicación.
David
22

Se refiere al conjunto de comandos de Hayes que ha sido el estándar durante mucho tiempo para emitir comandos a módems (y otros equipos) a través de una línea en serie.

En lugar de que los comandos y los datos tengan dos líneas separadas, solo se usa una línea y para pasar al modo comando desde los datos se envía una secuencia determinada, por ejemplo, +++ seguida de una pausa de longitud establecida. Luego, el equipo receptor recibe los siguientes datos como un comando.
La razón para usar algo como esto es el hecho de que evita la necesidad de otro par de líneas, que en muchos casos simplemente no están disponibles, especialmente en pequeños sistemas integrados.

Eche un vistazo a la página Wiki y los enlaces en la parte inferior: hay muchos detalles allí.

Sin embargo, hay todo tipo de extensiones para el conjunto AT original, por lo que no confiaría en que todo lo que menciona AT realmente use todos los comandos Hayes originales. Por ejemplo, tengo un chip serie bluetooth aquí que IIRC usa su propio conjunto de tipo AT.
Sin embargo, no soy un experto en ello, solo recuerdo hackear con comandos en los viejos días de acceso telefónico y BBS.

Oli Glaser
fuente
13

El conjunto de comandos "AT" fue resolver un problema de necesitar información de control fuera de banda sobre el mismo canal de bytes de datos arbitrarios enviados. Este era un problema común de los módems, cuando eran cajas externas conectadas a computadoras a través de un cable serial.

Hayes fue un fabricante de tales módems, y ganó mucha popularidad temprana. Su solución para el problema fuera de banda fue enviar al módem principalmente comandos de control ASCII de dos letras con una secuencia especial para ponerlo en modo de paso de datos. Para reducir la probabilidad de que cosas al azar parezcan comandos, todas sus secuencias de comandos comenzaron con el comando AT, que significaba "atención".

Hayes ganó tanta participación en el mercado que otros fabricantes de módems tuvieron que implementar el mismo conjunto de comandos para ser compatibles. De esa forma, los clientes podrían usar sus módems sin tener que volver a escribir el software, que ya estaba configurado para manejar un módem Hayes.

Hoy en día, este esquema rara vez se usa, pero por supuesto, algo que era tan generalizado se queda en los rincones oscuros incluso hoy en día.

Olin Lathrop
fuente
1
Me gustó esta nota histórica sobre Hayes y cómo forzó su propio estándar, concatenar su respuesta con las dos respuestas anteriores es más que suficiente :)
xsari3x
Por cierto, muchos módems más nuevos ya no parecen requerir que los caracteres "AT" estén en mayúsculas, lo que aumenta la frecuencia con la que una desconexión en el medio del envío de un archivo de texto causará un comportamiento erróneo del módem.
supercat
El código de control Band-Break es +++ AT o +++ <guard time>. AT son los dos primeros caracteres de un conjunto de control estándar y significa ATtention.
David
0

¿Por qué las personas en sistemas embebidos usan comandos AT?

No soy una de esas "personas en sistemas embebidos", pero diría que los ATcomandos todavía están en uso porque provienen de un estándar bien definido de baja sobrecarga para la señalización en línea.

Lo que eso significa es que puede usar el mismo canal de comunicación tanto para la señalización (comandos AT para administrar la comunicación) como para los datos (datos reales que desea enviar). El ATestándar especifica cómo diferenciar entre los dos para que usted y su dispositivo en serie no se confundan al hablar entre ellos.

¿Qué significa "AT"?

ATes para ATENCION

¿Por qué la gente sigue diciendo que es un estándar?

Pues porque lo es. Yo diría que en realidad es una mezcla de estandarización de facto y un par de estándares "reales" y algunas recomendaciones .

Lucas404
fuente
Esto parece no decir nada que no se haya dicho ya en otras respuestas hace años. Si va a desenterrar una vieja pregunta, realmente debería ser decir algo importante que no se haya dicho antes.
Chris Stratton