Perché le persone usano i comandi AT nella comunicazione seriale?


21

Devo sapere perché le persone nei sistemi embedded usano i comandi AT?
Quando ho chiesto alla gente di dire che è uno standard.

Quindi la mia domanda è: cosa significa "AT"? Perché la gente continua a dire che è uno standard?


1
+++ ATH0 qualcuno?
Kinokijuf,

@kinokijuf cosa intendi?
xsari3x

1
why people in embedded systems use AT commands- non c'è nulla di specifico per la tua domanda o l'uso di AT su un collegamento seriale. Potrebbe essere che hai visto questo su un sistema incorporato, ma la sua origine è spiegata di seguito e non è specifica per i sistemi integrati. (Fai attenzione a non dipingere le cose con un pennello troppo largo.)
Radian

1
Il comando AT è stato persino implementato in qualcosa chiamato modemu: un programma Unix che crea un dispositivo pseudo-tty master / slave e simula un modem che in realtà passa su telnet. "Componi" un host con ATD<hostname>. La cosa divertente è che il programma è uscito quasi esattamente in un momento in cui ne avevo bisogno, intorno al 1996: versione 0.0.1. Non ne ho più bisogno da allora. Ed è ancora 0.0.1! L'ho usato insieme a minicom per eseguire trasferimenti zmodem su telnet su host remoti che potevano essere raggiunti solo in quel modo.
Kaz,

@kinokijuf Per favore, non inserirlo nei commenti. Hai appena fatto impiccare StackOverflow su di me! :-)
Curt J. Sampson

Risposte:


31

Un dettaglio poco apprezzato sui comandi "AT" è che molti modem si avviano in modalità "auto-baud / auto-parità". Inizialmente, il modem avrebbe iniziato a non provare a decodificare effettivamente alcun dato seriale, ma avrebbe semplicemente cercato un impulso basso e un impulso alto consecutivi le cui larghezze corrispondessero allo stesso periodo di bit valido (ad esempio 3,3333ms per 300 baud, 833us per 1200 baud, ecc. .). Scoprendolo, vedrebbero se il prossimo impulso basso fosse cinque volte quella larghezza. In tal caso, verrebbero controllati per un altro high-low-high oppure per almeno 1,5 bit volte di high. La ricerca di uno di questi indicherebbe che il modem ha appena visto uno 0x41 o 0xC1 (cioè "A") della velocità di trasmissione identificata. Indicherebbe inoltre che il computer collegato utilizzava 8-N-1 o 7-E-1 o che utilizzava 7-N-1 o 7-O-1. In entrambi i casi, cercherebbe che il carattere successivo sia 0x54 o 0xD4 (ovvero "T"). Ciò consentirebbe al modem di classificare ulteriormente la lunghezza dei caratteri e le impostazioni di parità.

Si noti che tutto ciò che è stato ricevuto prima di "AT" verrebbe ignorato. Se l'eco fosse attivato, i dati verrebbero riportati nuovamente al computer collegato semplicemente eseguendo il mirroring di tutte le transizioni di linea senza alcuna decodifica seriale. Se un computer inviasse i dati prima di "AT" ad es. 247 baud, verrebbero riportati indietro a quella velocità.

Al giorno d'oggi, alcuni dispositivi utilizzano una "A" iniziale per il rilevamento automatico del baud rate, ma per il resto il fatto che i comandi inizino con "AT" è sostanzialmente una curiosità storica.


1
ehm ... cosa intendi con "7-N-1" ??
xsari3x

1
Sette bit di dati, nessuna parità, un bit di stop. Consente l'invio di dati dell'11% più veloce rispetto a 8-N-1, se non si inviano dati con il bit alto impostato.
supercat

Tranne il fatto che l'auto-bauding era (ed è) in genere fatto sulla parte +++ di un comando +++ AT o +++ <tempo di guardia> AT. Vedi en.wikipedia.org/wiki/Time_Independent_Escape_Sequence
david

1
@david: non vedo alcuna menzione di auto-bauding nell'articolo della sequenza di escape indipendente dal tempo, né ho mai visto un modem accettare +++ a qualsiasi baud rate diverso da quello che stava usando per la comunicazione. I caratteri 0x9E 0x86 inviati back-to-back a 2400-8-N-1 (o ^ N ^ F a 2400-7-O-1) produrrebbero esattamente le stesse transizioni di riga di un carattere "+" a 1200 baud, quindi considererei "+" come una strana scelta per un personaggio di baud-training.
supercat,

Il riferimento a Wikipedia (!) Era solo per le persone che non conoscono +++. Hardware Uso i treni su "U", i treni software su stringhe personalizzate. Conosci uno standard? Tutte le stringhe di connessione utilizzate per avviare +++, quindi l'auto-bauding era completo prima di qualsiasi altra comunicazione.
david

22

Si riferisce al set di comandi Hayes che è stato a lungo lo standard per l'invio di comandi a modem (e altre apparecchiature) su una linea seriale.

Invece di comandi e dati con due righe separate, viene utilizzata solo una riga e per passare alla modalità di comando dai dati viene inviata una determinata sequenza, ad es. +++ seguita da una pausa di lunghezza impostata. Quindi i dati successivi sono visti come un comando dall'apparecchiatura ricevente.
Il motivo per usare qualcosa del genere è il fatto che evita la necessità di un'altra coppia di linee, che in molti casi semplicemente non sono disponibili, specialmente in piccoli sistemi embedded.

Dai un'occhiata alla pagina Wiki e ai link in basso - ci sono molti dettagli lì.

Tuttavia, ci sono tutti i tipi di estensioni al set AT originale, quindi non vorrei fare affidamento su tutto ciò che menziona AT per usare effettivamente tutti i comandi Hayes originali. Ad esempio, qui ho un chip seriale bluetooth che IIRC utilizza il proprio set di tipi AT.
Non ne sono un esperto, però, ricordo solo di aver hackerato con i comandi nei vecchi tempi di dial-up e BBS.


13

Il set di comandi "AT" doveva risolvere un problema di necessità di informazioni di controllo fuori banda sullo stesso canale di flusso di byte che venivano inviati dati arbitrari. Questo era un problema comune dei modem, quando erano box esterni collegati ai computer tramite un cavo seriale.

Hayes era un produttore di tali modem e ha guadagnato molta popolarità in anticipo. La loro soluzione al problema fuori banda era di inviare al modem principalmente comandi di controllo ASCII a due lettere con una sequenza speciale per metterlo in modalità passaggio dati. Per ridurre la probabilità che roba casuale assomigli a comandi, le loro sequenze di comandi sono iniziate tutte con il comando AT, che stava per "attenzione".

Hayes ha guadagnato così tanta quota di mercato che altri produttori di modem hanno dovuto implementare lo stesso set di comandi per essere compatibili. In questo modo i clienti potevano usare i loro modem senza dover riscrivere il software, che era già impostato per pilotare un modem Hayes.

Al giorno d'oggi, questo schema è usato raramente, ma ovviamente qualcosa che era così pervasivo si attacca ancora oggi negli angoli bui.


1
Mi è piaciuta questa nota storica su Hayes e su come ha imposto il proprio standard, concatenare la tua risposta con le due risposte sopra è più che sufficiente :)
xsari3x

Per inciso, molti modem più recenti non sembrano più richiedere che i caratteri "AT" siano maiuscoli, il che aumenta la frequenza con cui una disconnessione nel mezzo dell'invio di un file di testo causerà un comportamento errato del modem.
supercat

Il codice di controllo di interruzione di banda è +++ AT o +++ <tempo di guardia>. AT è i primi due caratteri di un set di controllo standard e sta per ATtention.
david


0

perché le persone nei sistemi embedded usano i comandi AT?

Non sono una di quelle "persone nei sistemi embedded", ma direi che i ATcomandi sono ancora in uso perché provengono da uno standard a basso costo ben definito per la segnalazione in linea.

Ciò significa che è possibile utilizzare lo stesso canale di comunicazione sia per la segnalazione (comandi AT per gestire la comunicazione) sia per i dati (dati effettivi che si desidera inviare). Lo ATstandard specifica come distinguere tra i due in modo che tu e il tuo dispositivo seriale non vi confondiate quando parlate.

Cosa significa "AT"?

ATè per attenzione

Perché la gente continua a dire che è uno standard?

Bene, perché lo è. Direi che in realtà è un mix di standardizzazione di fatto e un paio di standard "reali" e alcune raccomandazioni .


Questo sembra non dire nulla che non fosse già stato detto in altre risposte anni fa. Se hai intenzione di raccogliere una vecchia domanda, dovresti davvero dire qualcosa di importante che non è stato detto prima.
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.