Warum AT-Befehlssatz?


15

Ehrlich gesagt, warum unterstützen alle Kommunikations-ICs (oder zumindest viele von ihnen oder die bekanntesten oder beliebtesten) wie Bluetooth, WIFI, GSM usw. den AT-Befehlssatz? Warum haben sie keinen einfachen Pin für D / C (Daten oder Befehl) für die Kommunikation? Was sind die Vorteile der Verwendung des AT-Befehlssatzes?

Der AT-Befehlssatz ist groß und würde Zeit und Speicherplatz beanspruchen und die Kommunikation erschweren, während Sie stattdessen einen einfachen D / C-Pin verwenden und eine Ganzzahl senden können, um Register zu setzen oder Daten zu senden.


18
Ein Wort: Vermächtnis ... Sie alle geben vor, Hayes-kompatible Modems zu sein, und das schon seit Anbeginn der Zeit (oder zumindest seit den 80er Jahren, was fast dasselbe ist). Und nein, das ist kein guter Grund.
brhans

4
Nicht nur Vermächtnis, sondern auch eine wirklich gute Idee. Wie das alte Sprichwort sagt: "Das Wunderbare an Standards ist, dass es so viele zur Auswahl gibt". Ich möchte, dass meine Hard- und Software mit jedem Kommunikationsmodul funktioniert, das ich verwende, ohne dass ich mir Sorgen machen muss, ob es eine andere Sprache (Befehlssatz) spricht als die, die ich zuvor verwendet habe.
Dwayne Reid

7
Obligatorische XKCD hier .
Bitsmack

1
Theoretisch könnten Sie Ihr WIFI-Modul herausziehen und durch ein Modul eines anderen Herstellers ersetzen. Und weil das Protokoll dasselbe ist, müssen Sie den Code nicht einmal anpassen.
Paul

1
Wenn etwas mit der Kommunikation / den Bits nicht stimmt, erhalten Sie nicht die richtige Antwort, z. B .: "OK". Wenn Sie also entsprechend damit umgehen, ist es ziemlich stabil. Das Debuggen ist recht einfach, da die Nachrichten in gewisser Weise einen Sinn ergeben. Das Handling ist allerdings in der Tat etwas schwieriger zu implementieren. Sie müssen nach diesen Nachrichten suchen. Und lesen Sie sie so vor, wie es für eine MCU nicht üblich ist. Wenn Sie dies jedoch einmal tun, funktioniert dies auch für andere AT-Geräte.
Paul

Antworten:


27

brhans ist richtig - Vermächtnis.

In den 1980er Jahren begann Hayes mit der Herstellung des "Smartmodem 1200". Es war fast sofort veraltet und Hayes brachte das Smartmodem 2400 heraus. In dieser Eile gab es keine Zeit für Designänderungen zwischen den Modemdesigns. Infolgedessen war Hayes der erste, der zwei verschiedene Geschwindigkeitsmodems herstellte, die dieselben Programmierbefehle akzeptierten! Jede Software, mit der ein Smartmodem 1200 eine Telefonnummer wählen kann, kann auch ein Smartmodem 2400 wählen.

Zu dieser Zeit benötigte jedes neue Modem Monate, um einen aktualisierten Treiber zu schreiben. Als das Smartmodem 2400 auf den Markt kam, gab es bereits einen funktionierenden Treiber für das Smartmodem 1200, so dass keine Monate auf sich warten ließen. Plötzlich erkannten andere Hersteller den Vorteil neuer Modems mit demselben Befehlssatz wie ältere Modems. Innerhalb von sechs Monaten boten Anbieter als einzige Option "Hayes-kompatible" Modems an. Womit sie von Hayes verklagt wurden. Daher nannten alle ihre Modems "AT Command Set-kompatibel", verwendeten aber weiterhin den Hayes-Befehlssatz.

Mitte der 80er Jahre wurden keine Consumer-Modems hergestellt, die den AT-Befehlssatz nicht verwenden konnten. Infolgedessen verwendet jedes Modem wie ein Kommunikationssystem AT-Befehle. Es gibt auch andere Vorteile: Da der Befehlssatz ASCII ist, kann jeder manuell AT-Befehle in ein Terminalfenster eingeben, um ein Modem zu steuern. Da mein eigenes Modem eine dicke RJ11-Verbindung hatte, startete ich jede Sitzung in Procomm Plus mit:

AT
OK
ATH1
[dial tone]
ATDT [phone number]

Nur um sicherzugehen, dass ich den Wählton habe. Wenn ich es nicht täte, würde ich ein bisschen herumgehen und die Drähte wackeln!


1
Guter Punkt zur Debugbarkeit. Für ein reines Binärprotokoll (z. B. Datenstrom auf dem LCD-Bildschirm) müssen Sie Hardware / Firmware entwerfen, um überhaupt mit dem Gerät zu kommunizieren. Mit dem AT-Befehlssatz können Sie das Gerät ohne Hardware testen. Sie benötigen lediglich eine serielle Schnittstelle (oder heutzutage einen USB-Seriell-Konverter) und einen Terminal-Emulator.
Slebetman

1
Ein kleines Problem ... Winmodems behielten die APPLICATION-Level-Kompatibilität mit AT-Befehlen bei, brachen jedoch die OS-Level-Kompatibilität vollständig. Vor Winmodem waren sogar interne Modems über einen Standard-16550A-UART verbunden, dessen Funktionsweise bekannt war und von Linux transparent unterstützt wurde (da sie für das Betriebssystem wie normale serielle ISA- oder PCI-Ports aussahen). Winmodems warfen einen Schraubenschlüssel hinein, indem sie übergeordnete Logik (Lucent) oder buchstäblich alles (HSP) in den Treiber schoben. Da der AT-Befehlshost des Winmodems virtuell war, handelte es sich unter Linux buchstäblich um Briefbeschwerer.
Bitbang3r

1
Ja, ich habe sie auch manuell eingegeben, weil ich eine Telefonleitung mit Impulswahl hatte (aber alle Kommunikations-Apps, vorausgesetzt, jeder hatte einen Tastenton). :-)
Brian Knoblauch

@slebetman: Ich mag es, wenn Geräte Optionen haben, um entweder binäre oder textbasierte Protokolle zu unterstützen, aber "AT" -Befehle sind ein separates Problem. In Systemen ohne automatische Bauderkennung hat "AT" als Befehlspräfix keinen besonderen Vorteil, und ich habe eine Reihe von Systemen gesehen, die Befehle mit "AT" voranstellen, aber immer noch die Fähigkeit erfordern, Zeichen außerhalb des Prinzips zu senden und zu empfangen ASCII-Satz und allgemeine Steuercodes.
Supercat

1
IIRC, Linux bekam schließlich Treiber für einige Winmodems. In vielen Fällen über ALSA- oder OSS-Soundtreiber, da die am wenigsten verwendeten Softmodems im Wesentlichen an Telefonleitungen angeschlossene Soundkarten waren. IIRC gab es kleine Latenzvorteile von Winmodems, weil Sie Ihre Daten nicht in UART-Puffern stecken. Nur Gamer kümmerten sich darum. Alle anderen hassten es, Zyklen von ihrer Single-Core-CPU zu verschwenden.
Peter Cordes

20

Sie sprechen nur über die Nachteile des Befehlssatzes. Betrachten Sie die Vorteile:

  1. Mithilfe des AT-Befehlssatzes kann Ihr Kommunikationsgerät über die PPP- Implementierung des Betriebssystems sofort in ein beliebiges IP-Netzwerk eingebunden werden . Die Alternative besteht darin, dass Sie zusätzlich zum Entwerfen einer benutzerdefinierten Protokollschnittstelle für jedes Betriebssystem, das Sie unterstützen möchten, einen eigenen Netzwerkgerätetreiber schreiben müssen, bevor dieses Betriebssystem Ihr Gerät zum Herstellen einer Internetverbindung verwenden kann.

  2. Jeder kompetente Ingenieur wird dieses Protokoll bereits kennen. Nehmen Sie es von jemandem, dessen Tagesgeschäft es erfordert, dass er Dutzende von nicht standardmäßigen seriellen Protokollen versteht und implementiert: Ein ausgereiftes gemeinsames Protokoll ist besser.

  3. Zwar ist das AT-Protokoll recht komplex und benötigt mehr Speicher für die Implementierung als ein aufgabenspezifisches, speziell erstelltes Protokoll, aber es ist auch so, dass jemand, der sich für die Implementierung dieses Protokolls entscheidet, vermeidet, viel Zeit damit zu verbringen, a neu zu erfinden vollkommen gutes Rad. Er verfügt über jahrzehntelanges Design-Know-how. Er weiß, dass es funktionieren wird, bevor er Entwicklungszeit dafür einsetzt. Gutes Protokolldesign ist überraschend schwierig.

    (Eines Tages werde ich mein umfangreiches Werk "Your Protocol Sucks" veröffentlichen, in der Hoffnung, die Verfolgung schrecklicherer, nur halb in Betracht gezogener Einzelprotokolle zu verhindern.)


1
Während ich dem Gefühl zustimme; "ausgereift"? Drei Worte: der ATSBefehl ...
ein Lebenslauf vom

Die meisten Geräte, die sogenannte "AT" -Befehle verwenden, haben außer den ersten beiden Zeichen nichts gemeinsam. Wenn ein WiFi-Modul "ATDT192,168,254,5W1234" als Befehl zum Öffnen einer TCP-Verbindung zu Port 1234 bei 192.168.254.5 akzeptieren könnte, könnte die Software, die ein Modem erwartet, das Modul in Ordnung verwenden, aber ich habe noch keinen gesehen so etwas.
Superkatze

@supercat: Das liegt daran, dass ein WiFi-Modem einer Ethernet-Karte ähnlicher ist, wie aus den relevanten Standards (IEEE802-Serie) und der Verwendung von MAC-Adressen hervorgeht. Und während die Frage über "Kommunikations-ICs" spricht, denke ich nicht, dass Coomon-Ethernet-ICs den AT-Befehlssatz verwenden.
MSalters

@MSalters: In vielen Szenarien besteht die Hauptverwendung für ein WiFi-Modul darin, jeweils eine TCP-Verbindung herzustellen. Hayes Emulation könnte dafür wunderbar funktionieren. Ich habe einen FOSSIL-Treiber gesehen, mit dem DOS-basierte Terminal-Programme als Telnet-Clients verwendet werden können, indem sie Nummern wie die oben genannten "wählen", und ich denke, dass der gleiche Ansatz auch mit WiFi-Modulen funktioniert. Mein Punkt ist auf jeden Fall, dass, wenn ein Produkt eine Zeichenfolge wie die oben genannte zum Herstellen einer TCP-Verbindung verwendet, eine solche Verwendung erhebliche Vorteile in
Bezug auf

... Ich vermute, dass die Mehrheit der Geräte, die heutzutage Befehle verwenden, die mit "AT" beginnen, dies einfach deshalb tun, weil ihre Schöpfer viele andere Geräte sahen, die alle ihre Befehle mit "AT" starteten und folgten, ohne zu ahnen, warum diese anderen Geräte dies tun würden so.
Supercat

14

Ich werde auf die andere Seite der Frage eingehen ... warum nicht einfach eine weitere Signalleitung zur Schnittstelle hinzufügen?

Das kann nur jemand fragen, der nicht alle Permutationen von Signalleitungen an einer echten 25-poligen RS232-Schnittstelle durchlebt hat. Neben TXD, RXD und Gnd gab es bereits mehrere andere Signalpaare, RTS / CTS (Bereit zum Senden, Löschen zum Senden), DSR / DTR (Bereit für Datensätze, Bereit für Datenterminal) und einen Hardware-Hangup-Pin. Und andere. Und es gibt keine eindeutige allgemeine Übereinstimmung zwischen den Herstellern, was genau funktioniert hat - warum brauchten Sie überhaupt zwei Sätze von Hardware-Handshake-Signalen? Und obendrein das Software-XON / XOFF-Protokoll. (Und warum bestanden Diablo-Drucker - meines Wissens nach einmalig - auf dem Handshake an Pin 11?)

Für einige Geräte ist eine vollständige Schnittstelle erforderlich. Einige waren mit TXD / RXD / Gnd zufrieden. Einige könnten durch Kurzschließen der Stifte 4 und 6 zum Arbeiten verleitet werden (wodurch ihre eigene RTS zu CTS zurückgeschleift wird). Und einige, die DCE gewesen sein sollten, waren DTE oder umgekehrt und sprachen nur über ein "Nullmodem" -Kabel mit irgendetwas anderem, wobei jedes Verbindungspaar ausgetauscht wurde.

Um dies zu vereinfachen, führte der IBM PC eine neue 9-polige Schnittstelle für RS232 ein. Das heißt, Ihre gesamte vorhandene Kabelsammlung war veraltet und Sie mussten erneut beginnen ...

All das machte das Leben schwierig, auch wenn man bedachte, dass beide Enden auf unterschiedliche Baudraten eingestellt waren ...

Dies unterstützte eine ganze Branche, die sich aus RS232-Breakout-Boxen, Kabeln und Test- / Debugging-Tools zusammensetzte.

Ein weiteres Signal hinzuzufügen, würde in diesem Zusammenhang wahrscheinlich nicht fliegen ...


9

Das erste Hayes-Modem, das "AT" -Befehle verwendete, wählte "A" als erstes Zeichen seines Befehlspräfixes, da es mehrere Baudraten unterstützen musste, und das "A" in der Zeile sieht folgendermaßen aus: -------_-_____-x----------mit einem Verhältnis von 5: 1 zwischen die längste und kürzeste "niedrige" Zeit (das "x" kann abhängig von den Paritätseinstellungen hoch oder niedrig sein). Keine Rate, die langsamer als 1200 Baud ist, kann eine "kurze" Zeit von 833 us oder weniger bewältigen, und keine Rate, die schneller als 2400 ist, kann eine "lange" Zeit von 4,16 ms oder mehr bewältigen, sodass ein Modem sicher davon ausgehen kann, dass es etwas sieht, das aussieht wie ein 1200-Baud "A" ist es (und ebenfalls mit 300 Baud usw.). Das "T" hat die entgegengesetzte Parität zum "A". Wenn also das zweite Zeichen wie ein "T" aussieht,

Geräte oder Treiber, die "AT" -Befehle verwenden, die ähnlich oder analog zu den Befehlen des Hayes-Modems funktionieren (z. B. Annahme ATDTW192,168,254,123W4567als Befehl zum Verbinden mit Port 4567 von 192.168.254.123), tun dies aus Gründen der Kompatibilität mit Software, die erwartet, mit einem alten Stil zu kommunizieren Modem oder kompatibles Gerät. Es gibt jedoch viele Geräte, die Befehle verwenden, die mit "AT" beginnen. Die Theorie besagt, dass "AT-Befehlssatz" ein nützliches Marketing-Schlagwort zu sein scheint, auch wenn die Geräte keine automatische Baudratenerkennung unterstützen und andere Befehle haben alles auf einem anderen Gerät. Die Verwendung von "AT" als Befehlspräfix in solchen Kontexten fügt keinen Kompatibilitätswert hinzu und dient keinem nützlichen Zweck. Designer tun es, weil sie andere Designer gesehen haben,

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.