Warum verwenden Menschen AT-Befehle in der seriellen Kommunikation?

Ich muss wissen, warum Menschen in eingebetteten Systemen AT-Befehle verwenden?
Wenn ich gefragt habe, sagen die Leute, dass es ein Standard ist.

Meine Frage ist also: Was bedeutet "AT"? Warum sagen die Leute immer, es sei ein Standard?

+++ATH0 jemand?
@kinokijuf was meinst du?
why people in embedded systems use AT commands- Ihre Frage oder die Verwendung von AT auf einer seriellen Verbindung ist nicht eingebettet. Es könnte sein, dass Sie dies auf einem eingebetteten System gesehen haben, aber sein Ursprung wird unten erklärt und ist nicht spezifisch für eingebettete Systeme. (Achten Sie darauf, Dinge nicht mit einem zu breiten Pinsel zu malen.)
Der AT-Befehl wurde sogar in etwas namens implementiert modemu: ein Unix-Programm, das ein Master/Slave-Pseudo-TTY-Gerät erstellt und ein Modem simuliert, das tatsächlich über Telnet geht. Sie „wählen“ einen Host mit ATD<hostname>. Das Lustige ist, dass das Programm fast genau zu dem Zeitpunkt herauskam, als ich es brauchte, um 1996 herum: Version 0.0.1. Seitdem brauche ich es nicht mehr. Und es ist immer noch 0.0.1! Ich habe es in Verbindung mit minicom verwendet, um Zmodem-Übertragungen über Telnet an entfernte Hosts durchzuführen, die nur auf diese Weise erreicht werden konnten.
@kinokijuf Bitte schreibe das nicht in die Kommentare. Du hast gerade StackOverflow dazu gebracht, mich aufzulegen! :-)

Antworten (5)

Ein selten beachtetes Detail bei "AT"-Befehlen ist, dass viele Modems im "Auto-Baud/Auto-Parity"-Modus starten würden. Anfänglich würde das Modem nicht versuchen, tatsächlich irgendwelche seriellen Daten zu decodieren, sondern einfach auf einen aufeinanderfolgenden Low-Puls und High-Puls warten, deren Breiten mit der gleichen gültigen Bitperiode übereinstimmten (z. B. 3,333 ms für 300 Baud, 833 us für 1200 Baud usw .). Wenn sie das fanden, würden sie sehen, ob der nächste niedrige Impuls fünfmal so breit war. Wenn dies der Fall ist, würden sie entweder nach einem weiteren High-Low-High oder nach mindestens 1,5 Bitzeiten von High Ausschau halten. Das Auffinden eines dieser beiden würde anzeigen, dass das Modem gerade ein 0x41 oder 0xC1 (dh "A") der identifizierten Baudrate gesehen hat. Es würde ferner anzeigen, dass entweder der angeschlossene Computer entweder 8-N-1 oder 7-E-1 verwendet, oder dass er entweder 7-N-1 oder 7-O-1 verwendet. In beiden Fällen, es würde nach dem nächsten Zeichen suchen, das entweder 0x54 oder 0xD4 (dh "T") ist. Das würde es dem Modem ermöglichen, die Zeichenlänge und die Paritätseinstellungen weiter zu kategorisieren.

Beachten Sie, dass alles, was vor dem "AT" empfangen wird, ignoriert wird. Wenn Echo eingeschaltet war, würden die Daten einfach durch Spiegeln aller Zeilenübergänge ohne serielle Dekodierung an den angeschlossenen Computer zurückgesendet. Wenn ein Computer Daten vor dem "AT" mit zB 247 Baud sendete, würden sie mit dieser Geschwindigkeit zurückgesendet werden.

Heutzutage verwenden einige Geräte ein anfängliches „A“ für die automatische Baudratenerkennung, aber ansonsten ist die Tatsache, dass Befehle mit „AT“ beginnen, im Grunde eine historische Kuriosität.

äh ... was meinst du mit "7-N-1" ??
Sieben Datenbits, keine Parität, ein Stoppbit. Ermöglicht das Senden von Daten um 11 % schneller als 8-N-1, wenn keine Daten mit gesetztem High-Bit gesendet werden.
Abgesehen davon, dass Auto-Bauding normalerweise im +++-Teil eines +++AT- oder +++<Schutzzeit>AT-Befehls ausgeführt wurde (und wird). Siehe en.wikipedia.org/wiki/Time_Independent_Escape_Sequence
@david: Ich sehe im Artikel über die zeitunabhängige Escape-Sequenz keine Erwähnung von Auto-Bauding, noch habe ich jemals gesehen, dass ein Modem +++ mit einer anderen Baudrate als derjenigen akzeptiert, die es für die Kommunikation verwendet hat. Die Zeichen 0x9E 0x86, die hintereinander bei 2400-8-N-1 (oder ^N^F bei 2400-7-O-1) gesendet werden, würden genau die gleichen Zeilenübergänge erzeugen wie ein "+"-Zeichen bei 1200 Baud, Daher würde ich "+" als eine seltsame Wahl für ein Baud-Trainingszeichen betrachten.
Die Wikipedia(!)-Referenz war nur für Leute gedacht, die +++ nicht kennen. Hardware Ich benutze Züge auf 'U', Software trainiert auf benutzerdefinierten Saiten. Kennen Sie eine Norm? Alle Verbindungszeichenfolgen wurden zum Starten von +++ verwendet, sodass das automatische Bauden vor jeder anderen Kommunikation abgeschlossen war.
@david: Ich habe UARTs mit fest verdrahteter Funktionalität gesehen, um auf "A" zu trainieren. Ich bin mir nicht sicher, ob ich "U" mag, es sei denn, man kann zu 100% sicher sein, dass wiederholte "U"-Zeichen ohne Lücken gesendet werden und es keine wiederholten Folgen von "3" mit der doppelten richtigen Baudrate gibt. Das "A" hat den Vorteil, dass sein Impulsmuster nicht von irgendeiner Bitfolge bei irgendeiner anderen Baudrate erzeugt werden kann. Übrigens, ich habe einmal ein Projekt gemacht, bei dem ein Board mit einer schlampigen, aber einstellbaren Uhr für die Kommunikation mit einem PC bei 38400 Baud trainiert wurde, indem der PC abwechselnd $80 und $C0 bei 57600 Baud [mit Pausen dazwischen] sendete.
Bei 57600 Baud repräsentieren diese Zeichen niedrige Impulse mit 7 oder 8 Bitzeiten. Bei 38400 Baud würden diese zu niedrigen Impulsen von 5,33 oder 4,67 Bitzeiten werden, also sollten beide als $F0 empfangen werden. Wenn der Empfänger $FC oder $F8 bekommt, ist er zu langsam; Wenn es $E0 oder $C0 bekommt, ist es zu schnell. Sobald es aufeinanderfolgende $F0-Zeichen erhält, ist es genau richtig.

Es bezieht sich auf den Hayes-Befehlssatz, der lange Zeit der Standard für die Ausgabe von Befehlen an Modems (und andere Geräte) über eine serielle Leitung war.

Anstatt dass Befehle und Daten zwei getrennte Zeilen haben, wird nur eine Zeile verwendet und um von Daten in den Befehlsmodus zu wechseln, wird eine bestimmte Sequenz gesendet, z. B. +++ gefolgt von einer Pause mit festgelegter Länge. Dann werden die nächsten Daten von der empfangenden Ausrüstung als Befehl angesehen.
Der Grund, so etwas zu verwenden, ist die Tatsache, dass es die Notwendigkeit eines weiteren Leitungspaars vermeidet, das in vielen Fällen einfach nicht verfügbar ist, insbesondere in kleinen eingebetteten Systemen.

Schauen Sie sich die Wiki-Seite und die Links unten an - dort gibt es viele Details.

Es gibt jedoch alle möglichen Erweiterungen des ursprünglichen AT-Sets, daher würde ich mich nicht auf alles verlassen, was AT erwähnt, um tatsächlich alle ursprünglichen Hayes-Befehle zu verwenden. Zum Beispiel habe ich hier einen seriellen Bluetooth-Chip, dessen IIRC seinen eigenen AT-Typensatz verwendet.
Ich bin kein Experte darin, ich erinnere mich nur daran, wie ich in den alten Tagen von DFÜ und BBS mit Befehlen herumgehackt habe.

Der "AT"-Befehlssatz sollte ein Problem lösen, bei dem Out-of-Band-Steuerinformationen über den gleichen Byte-Stream-Kanal benötigt wurden, auf dem beliebige Daten gesendet wurden. Dies war ein häufiges Problem von Modems, als es sich um externe Boxen handelte, die über ein serielles Kabel mit Computern verbunden waren.

Hayes war ein Hersteller solcher Modems und erlangte früh große Popularität. Ihre Lösung für das Out-of-Band-Problem bestand darin, dem Modem meist zweibuchstabige ASCII-Steuerbefehle mit einer speziellen Sequenz zu senden, um es in den Datendurchgangsmodus zu versetzen. Um die Wahrscheinlichkeit zu verringern, dass zufällige Dinge wie Befehle aussehen, begannen ihre Befehlssequenzen alle mit dem AT-Befehl, der für "Aufmerksamkeit" stand.

Hayes gewann so viele Marktanteile, dass andere Modemhersteller denselben Befehlssatz implementieren mussten, um kompatibel zu sein. Auf diese Weise konnten Kunden ihre Modems verwenden, ohne Software neu schreiben zu müssen, die bereits für den Betrieb eines Hayes-Modems eingerichtet war.

Heutzutage wird dieses Schema selten verwendet, aber etwas, das so allgegenwärtig war, steckt natürlich auch heute noch in dunklen Ecken herum.

Ich mochte diese historische Notiz über Hayes und wie sie ihren eigenen Standard erzwang. Ihre Antwort mit den beiden obigen Antworten zu verketten, ist mehr als genug :)
Übrigens scheinen viele neuere Modems nicht mehr zu verlangen, dass die Zeichen "AT" in Großbuchstaben geschrieben werden, was die Häufigkeit erhöht, mit der eine Unterbrechung während des Sendens einer Textdatei zu fehlerhaftem Modemverhalten führt.
Der Band-Break-Steuercode ist +++AT oder +++<Schutzzeit>. AT sind die ersten beiden Zeichen eines Standardsteuersatzes und stehen für ATtention.

Es gibt ein besonders gutes Dokument, das die Geschichte der "AT"-Befehle beschreibt, das hier zu finden ist:

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

Es enthält viele Seiten guter „Geschichte“ darüber, wie das Protokoll zustande kam.

Warum verwenden Menschen in eingebetteten Systemen AT-Befehle?

Ich bin keiner dieser "Leute in eingebetteten Systemen", aber ich würde sagen, dass ATBefehle immer noch verwendet werden, weil sie von einem klar definierten Standard mit geringem Overhead für Inline-Signalisierung stammen.

Das bedeutet, dass Sie denselben Kommunikationskanal sowohl für die Signalisierung (AT-Befehle zur Verwaltung der Kommunikation) als auch für die Daten (tatsächliche Daten, die Sie senden möchten) verwenden können. Der ATStandard legt fest, wie zwischen den beiden unterschieden werden muss, damit Sie und Ihr serielles Gerät nicht verwirrt werden, wenn Sie miteinander sprechen.

Was bedeutet "AT"?

ATist für ACHTUNG

Warum sagen die Leute immer, es sei ein Standard?

Nun, weil es so ist. Ich würde sagen, es ist tatsächlich eine Mischung aus De -facto-Standardisierung und ein paar "echten" Standards und einigen Empfehlungen .

Dies scheint nichts zu sagen, was nicht schon vor Jahren in anderen Antworten gesagt wurde. Wenn Sie eine alte Frage ausgraben, sollten Sie wirklich etwas Wichtiges sagen, das noch nie zuvor gesagt wurde.