Dlaczego zestaw poleceń AT?

15

Szczerze mówiąc, dlaczego wszystkie komunikacyjne układy scalone (lub przynajmniej wiele z nich lub najbardziej znanych lub popularnych), takie jak Bluetooth, WIFI, GSM, itp. Obsługują zestaw poleceń AT? dlaczego nie mają prostego pinu do D / C (Data lub Command) do komunikacji? Jakie są zalety korzystania z zestawu poleceń AT?

Zestaw poleceń AT jest duży i zajmuje dużo czasu i miejsca w pamięci oraz utrudnia komunikację, podczas gdy zamiast tego można użyć zwykłego pinu D / C i wysłać liczbę całkowitą do ustawienia rejestrów lub wysłania danych.

Roh
źródło
18
Jedno słowo: Dziedzictwo ... Wszystkie udają, że są modemami kompatybilnymi z Hayes i istnieją od zarania dziejów (a przynajmniej od lat 80-tych, co jest w dużej mierze tym samym). I nie, to nie jest naprawdę dobry powód.
brhans 23.03.15
4
Nie tylko dziedzictwo, ale naprawdę dobry pomysł. Jak mówi stare powiedzenie: „Cudowną rzeczą w standardach jest to, że jest tak wiele do wyboru”. Chcę, aby mój sprzęt i oprogramowanie działały z dowolnym modułem komunikacyjnym, którego używam, bez martwienia się, czy mówi on innym językiem (zestawem poleceń) niż ten, którego wcześniej używałem.
Dwayne Reid
7
Obowiązkowe XKCD tutaj .
bitsmack
1
Teoretycznie możesz odłączyć moduł WIFI i zastąpić go innym dostawcą. A ponieważ protokół jest taki sam, nie musisz nawet dostosowywać kodu.
Paul
1
Jeśli coś będzie nie tak z komunikacją / bitami, nie uzyskasz właściwej odpowiedzi, tj .: „OK”. Więc jeśli odpowiednio sobie z tym poradzisz, jest dość stabilny. Debugowanie jest dość łatwe, ponieważ wiadomości mają w pewnym sensie sens. Obsługa jest jednak nieco trudniejsza do wdrożenia. Musisz sprawdzić te wiadomości. I przeczytaj je, w sposób nietypowy dla MCU. Ale z drugiej strony, jeśli zrobisz to raz, będzie działać dla innych urządzeń AT.
Paul

Odpowiedzi:

27

brhans ma rację - Dziedzictwo.

W latach 80. Hayes zaczął produkować „Smartmodem 1200”. Stało się prawie natychmiastowo przestarzałe, a Hayes wypędził Smartmodem 2400. W tym pośpiechu nie było czasu na zmiany konstrukcyjne między modemami. W rezultacie Hayes jako pierwszy wyprodukował dwa różne modemy prędkości, które przyjmowały te same polecenia programowania! Każde oprogramowanie, które może skłonić Smartmodem 1200 do wybrania numeru telefonu, może również wybrać Smartmodem 2400.

W tym czasie każdy nowy modem wymagał miesięcy na napisanie zaktualizowanego sterownika. Kiedy Smartmodem 2400 pojawił się na rynku, był już działający sterownik dla Smartmodem 1200, więc nie trzeba było czekać miesięcy. Nagle inni producenci zauważyli zaletę nowych modemów mających taki sam zestaw poleceń, jak starsze modemy. W ciągu sześciu miesięcy dostawcy oferowali modemy „kompatybilne z Hayes” jako jedyny wybór. Co sprawiło, że zostali pozwani przez Hayesa. Wszyscy więc zaczęli nazywać swoje modemy „kompatybilnymi z zestawem poleceń AT”, ale nadal używali zestawu poleceń Hayesa.

W połowie lat 80. nie wyprodukowano modemów konsumenckich, które nie mogłyby korzystać z zestawu poleceń AT. W rezultacie każdy modem, taki jak system komunikacyjny, używa komend AT. Są też inne zalety - ponieważ zestaw poleceń to ASCII, każdy może ręcznie wpisać polecenia AT w oknie terminala, aby sterować modemem. Ponieważ mój modem miał kruche połączenie RJ11, każdą sesję w Procomm Plus zaczynałem od:

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

Aby się upewnić, że dostałem sygnał wybierania. Gdybym tego nie zrobił, kręciłbym się i trochę poruszał drutami!

carveone
źródło
1
Dobra uwaga na temat możliwości debugowania. Czysty protokół binarny (taki jak strumień danych na ekranie LCD) wymaga zaprojektowania sprzętu / oprogramowania układowego, aby nawet zaczął rozmawiać z urządzeniem. Zestaw poleceń AT pozwala przetestować urządzenie przy zerowym sprzęcie. Wszystko czego potrzebujesz to port szeregowy (lub obecnie konwerter USB na szeregowy) i emulator terminala.
slebetman
1
Jedna mała sprzeczka ... Winmodems zachował zgodność na poziomie APLIKACJI z poleceniami AT, ale całkowicie złamał kompatybilność na poziomie systemu operacyjnego. Przed Winmodemem nawet wewnętrzne modemy współpracowały ze standardowym interfejsem UART 16550A, którego działanie było dobrze znane i przejrzyste wspierane przez system Linux (ponieważ wyglądały jak normalne porty szeregowe ISA lub PCI dla systemu operacyjnego). Winmodems wrzucił w to małpię, przenosząc logikę wyższego poziomu (Lucent) lub dosłownie wszystko (HSP) do sterownika. Ponieważ host polecenia AT Winmodem był wirtualny, w Linuksie byli dosłownie przyciskami do papieru.
Bitbang3r
1
Tak, kiedyś też wpisywałem je ręcznie ze względu na linię telefoniczną z wybieraniem impulsowym (ale wszystkie aplikacje komunikacyjne zakładają, że wszyscy mają ton dotykowy). :-)
Brian Knoblauch
@slebetman: Podoba mi się, gdy urządzenia mają opcje obsługi protokołów binarnych lub tekstowych, ale polecenia „AT” to osobny problem. W systemach bez automatycznego wykrywania prędkości transmisji „AT” nie ma żadnej szczególnej przewagi jako prefiksu polecenia i widziałem wiele systemów, które poprzedzają polecenia „AT”, ale nadal wymagają zdolności do wysyłania i odbierania znaków poza zasadą Zestaw ASCII i wspólne kody kontrolne.
supercat
1
IIRC, Linux ostatecznie dostał sterowniki dla niektórych winmodemów. W wielu przypadkach za pośrednictwem sterowników dźwięku ALSA lub OSS, ponieważ najbardziej rozebrane softmodemy były zasadniczo kartami dźwiękowymi podłączonymi do linii telefonicznych. IIRC, z Winmodems można było korzystać z niewielkich opóźnień, ponieważ dane nie utknęły w buforach UART. Tylko gracze się tym przejmowali. Wszyscy inni nie znosili marnowania cykli z jednordzeniowego procesora.
Peter Cordes,
20

Mówisz tylko o wadach zestawu poleceń. Rozważ zalety:

  1. Za pomocą zestawu poleceń AT urządzenie komunikacyjne można natychmiast umieścić w dowolnej sieci IP za pośrednictwem implementacji PPP systemu operacyjnego . Alternatywą jest to, że oprócz zaprojektowania niestandardowego interfejsu protokołu musisz napisać własny sterownik urządzenia sieciowego dla każdego systemu operacyjnego, który chcesz obsługiwać, zanim ten system będzie mógł używać twojego urządzenia do łączenia się z Internetem.

  2. Każdy kompetentny inżynier zna już ten protokół. Weź to od tego, którego codzienna praca wymaga od niego zrozumienia i wdrożenia dziesiątek niestandardowych protokołów szeregowych: lepszy jest jeden dobrze zaprojektowany wspólny protokół.

  3. Chociaż prawdą jest, że protokół AT jest dość skomplikowany i zajmuje więcej pamięci do wdrożenia niż protokół specjalnie utworzony dla określonego zadania, zdarza się również, że ktoś, kto zdecyduje się na wdrożenie tego protokołu, uniknie spędzania czasu na wymyślaniu nowego idealnie dobre koło. Ma dziesięciolecia doświadczenia w projektowaniu. Wie, że to zadziała, zanim poświęci na to czas rozwoju. Dobry projekt protokołu jest zaskakująco trudny.

    (Któregoś dnia zamierzam opublikować moje dzieło magnum, „Your Protocol Sucks”, w nadziei, że uda się zapobiec popełnieniu okropniejszych, na wpół uważanych protokołów jednorazowych).

Warren Young
źródło
1
Chociaż zgadzam się z sentymentem; „dobrze zaprojektowany”? Trzy słowa: ATSpolecenie ...
CVn
Większość urządzeń, które widziałem, które używają tak zwanych poleceń „AT”, nie mają nic wspólnego w zestawach poleceń oprócz dwóch pierwszych znaków. Jeśli moduł Wi-Fi może zaakceptować „ATDT192,168,254,5W1234” jako polecenie otwarcia połączenia TCP z portem 1234 pod adresem 192.168.254.5, oprogramowanie oczekujące, że modem będzie w stanie dobrze użyć modułu, ale jeszcze go nie widziałem nic podobnego.
supercat
@ superupat: To dlatego, że modem Wi-Fi jest bardziej podobny do karty Ethernet, co widać po odpowiednich standardach (seria IEEE802) i wykorzystaniu adresów MAC. I chociaż pytanie mówi o „układach komunikacyjnych”, nie sądzę, aby układy scalone Ethernet Coomon używały zestawu poleceń AT.
MSalters
@MSalters: W wielu scenariuszach podstawowym zastosowaniem modułu WiFi będzie ustanowienie jednego połączenia TCP na raz; Emulacja Hayesa może do tego pięknie działać. Widziałem sterownik FOSSIL, który zezwalałby na używanie programów terminalowych opartych na systemie DOS jako klientów telnet poprzez wybieranie numerów takich jak powyższe, i pomyślałem, że to samo podejście działałoby pięknie z modułami WiFi. W każdym razie chodzi mi o to, że jeśli produkt użyłby takiego łańcucha jak wyżej do nawiązania połączenia TCP, takie użycie przyniosłoby znaczące korzyści kompatybilności / znajomości, ale ...
supercat
... Podejrzewam, że większość urządzeń, które obecnie używają poleceń zaczynających się na „AT”, robi to po prostu dlatego, że ich twórcy widzieli wiele innych urządzeń rozpoczynających wszystkie polecenia od „AT” i podążali za nimi, nie mając pojęcia, dlaczego te inne urządzenia miałyby to zrobić. więc.
supercat
14

Po drugiej stronie pytania rozwinę się ... dlaczego nie po prostu dodać kolejną linię sygnalizacyjną do interfejsu?

Może o to zapytać tylko ktoś, kto nie przeżył wszystkich permutacji linii sygnalizacyjnych na oryginalnym 25-pinowym interfejsie RS232. Oprócz TXD, RXD i Gnd, było już kilka innych par sygnałów, RTS / CTS (Gotowy do wysłania, Wyczyść do wysłania) DSR / DTR (Gotowy zestaw danych, Gotowy terminal danych) i sprzętowy pin rozłączający. I inni. I nie ma jednoznacznej uniwersalnej umowy między producentami, co dokładnie działało, jaką funkcję - dlaczego w pierwszej kolejności potrzebne były dwa zestawy sprzętowych sygnałów handshaking I programowy protokół XON / XOFF na dodatek) (I dlaczego drukarki Diablo nalegały - wyjątkowo, o ile mi wiadomo - na uzgadnianie na pinie 11?)

Niektóre urządzenia wymagały pełnego interfejsu. Niektórzy byli zadowoleni z TXD / RXD / Gnd. Niektórych można oszukać do pracy przez zwarcie styków 4 i 6 (w ten sposób zapętlając ich własny RTS do CTS). A niektóre, które powinny być DCE, były DTE lub odwrotnie i rozmawiałyby tylko z czymkolwiek innym za pośrednictwem kabla „zerowego modemu” przy każdej zamianie połączeń.

Następnie, aby uprościć to wszystko, IBM PC wprowadził nowy 9-pinowy interfejs dla RS232. Oznacza to, że cała istniejąca kolekcja kabli była przestarzała i trzeba było zacząć od nowa ...

Wszystko to utrudniało życie, nawet nie biorąc pod uwagę, że oba końce mogły być ustawione na różne prędkości transmisji ...

Wspierało to całą branżę opartą na modułach, kablach i narzędziach do testowania / debugowania RS232.

Dodanie kolejnego sygnału w tym kontekście prawdopodobnie nie będzie latać ...

Brian Drummond
źródło
9

Pierwszy modem Hayesa, który używał poleceń „AT”, wybrał „A” jako pierwszy znak przedrostka polecenia, ponieważ musiał obsługiwać wiele prędkości transmisji, a „A” w linii wygląda następująco: -------_-_____-x----------ma stosunek 5: 1 między najdłuższe i najkrótsze czasy „niskie” („x” może być wysokie lub niskie w zależności od ustawień parzystości). Żadna szybkość mniejsza niż 1200 bodów nie poradzi sobie z „krótkim” czasem 833us lub mniejszym, a żadna szybkość większa niż 2400 nie poradzi sobie z „długim” czasem 4,16 ms lub dłuższym, więc modem może bezpiecznie założyć, że jeśli zobaczy coś, co wygląda podobnie jak „A” 1200 bodów, i tak jest (i podobnie z 300 bodów itp.). „T” ma przeciwną parzystość niż „A”, więc jeśli drugi znak wygląda jak „T”,

Urządzenia lub sterowniki, które używają poleceń „AT”, które działają podobnie lub analogicznie do poleceń modemu Hayesa (np. Akceptują ATDTW192,168,254,123W4567jako polecenie połączenia z portem 4567 z 192.168.254.123), robią to w celu zapewnienia zgodności z oprogramowaniem, które oczekuje na komunikację ze starym stylem modem lub kompatybilne urządzenie. Istnieje jednak wiele urządzeń, które używają poleceń zaczynających się od „AT”, zgodnie z teorią, że „zestaw poleceń AT” wydaje się przydatnym modnym hasłem marketingowym, mimo że urządzenia nie są zdolne do automatycznego wykrywania prędkości transmisji i mają polecenia odmienne cokolwiek na dowolnym innym urządzeniu. Użycie „AT” jako prefiksu polecenia w takich kontekstach nie dodaje wartości zgodności i nie służy żadnemu przydatnemu celowi; projektanci to robią, ponieważ widzieli, jak robią to inni projektanci,

supercat
źródło