Чому встановлено команду AT?


15

Відверто кажучи, чому всі ІС зв'язку (або принаймні багато з них або найвідоміші чи найпопулярніші), такі як Bluetooth, WIFI або GSM або тощо, підтримують команду AT? чому вони не мають простого штифта для D / C (даних або команди) для зв'язку? Які переваги використання набору команд AT?

Набір команд AT великий і потребує часу та місця в пам'яті, і це ускладнює спілкування, тоді як ви можете замість цього використовувати простий D / C-контакт і надіслати ціле число для встановлення реєстрів або надсилання даних.


18
Одне слово: Спадщина ... Усі вони претендують на модеми, сумісні з Хейсом, і були з зорі часу (або принаймні з 80-х, що майже те саме). І ні, це насправді не вагомі причини.
brhans

4
Не лише спадщина, а й справді гарна ідея. Як свідчить стара приказка: "Чудова річ у стандартах - це те, що можна вибрати з багатьох". Я хочу, щоб моє апаратне та програмне забезпечення працювало з будь-яким модулем зв'язку, який я використовую, не турбуючись, чи розмовляє він іншою мовою (набором команд), ніж тією, якою я користувався раніше.
Дуейн Рейд

7
Обов'язковий XKCD тут .
бітмак

1
Теоретично ви можете відключити модуль WIFI та замінити його на іншого постачальника. А оскільки протокол той самий, вам навіть не доведеться коригувати код.
Павло

1
Якщо з комунікацією / бітами щось буде не так, ви не отримаєте правильної відповіді, тобто: "ОК" Отже, якщо ви впораєтеся з цим відповідно, це досить стабільно. Налагодити це досить просто, оскільки повідомлення мають певний сенс. Однак поводження дійсно трохи складніше здійснити. Ви повинні перевірити наявність зазначених повідомлень. І прочитайте їх таким чином, що це не регулярно для MCU. Але знову ж таки, якщо ви зробите це один раз, це буде працювати для інших пристроїв AT.
Павло

Відповіді:


27

брханс правильний - Спадщина.

У 1980-х роках Хейс почав робити "Smartmodem 1200". Це було майже застарілим, і Хейс вискочив Smartmodem 2400. У цей поспіх не було часу на зміни дизайну між моделями дизайну. Як результат, Хейс першим зробив два різних швидкісних модеми, які прийняли однакові команди програмування! Будь-яке програмне забезпечення, яке може отримати Smartmodem 1200 для набору телефонного номера, також може набрати Smartmodem 2400.

У той час для кожного нового модему потрібні місяці, щоб записати оновлений драйвер. Коли Smartmodem 2400 вийшов на ринок, для Smartmodem 1200 вже був працюючий драйвер, тому місяці очікування не було. Раптом інші виробники зрозуміли перевагу нових модемів, що мають той самий набір команд, що і старіші модеми. Протягом півроку продавці пропонували модеми, сумісні з Hayes, як єдиний вибір. Через що Хейс подав до них позов. Тому всі почали називати свої модеми "AT Command Set съвместими", але продовжували використовувати набір команд Hayes.

До середини 80-х не було створено споживчих модемів, які не могли використовувати набір команд AT. В результаті кожен модем, як система comms, використовує команди AT. Є й інші переваги - оскільки набір команд ASCII, кожен може вручну вводити команди AT в вікно терміналу для управління модемом. Оскільки мій власний модем мав непростий RJ11-з'єднання, я починав кожен сеанс у Procomm Plus із:

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

Просто для того, щоб переконатися, що я отримав тон набору. Якби не я, я б трохи пішов і помацав дроти!


1
Хороший момент щодо налагоджуваності. Чистий двійковий протокол (наприклад, потік даних на РК-екрані) вимагає, щоб ви розробили апаратне / мікропрограмне забезпечення, щоб навіть почати спілкуватися з пристроєм. Набір команд AT дозволяє протестувати пристрій з нульовим обладнанням. Все, що вам потрібно, це послідовний порт (або в наші дні USB-послідовний перетворювач) і емулятор терміналу.
slebetman

1
Один невеликий каламбур ... Вінмодеми зберегли сумісність рівня APPLICATION з командами AT, але повністю зламали сумісність на рівні ОС. Попередньо Winmodem, навіть внутрішні модеми, з'єднані через болотний стандарт 16550A UART, робота якого була добре відома і прозоро підтримувалася Linux (тому що вони виглядали як звичайні послідовні порти ISA або PCI в ОС). Вінмодеми кинули в це мавповий ключ, перемістивши логіку вищого рівня (Лусент) або буквально все (HSP) у драйвер. Оскільки командний хост AT Winmodem був віртуальним, вони були буквально вагомими паперами під Linux.
Bitbang3r

1
Так, я теж вручну вводив їх через те, що маю імпульсну телефонну лінію (але всі програми для комунікацій, припускаючи, що у всіх був сенсорний тон). :-)
Брайан Ноблеуч,

@slebetman: Мені подобається, коли на пристроях є можливості підтримувати або двійкові, або текстові протоколи, але команди "AT" - це окрема проблема. У системах без автоматичного виявлення передачі даних не існує особливої ​​переваги перед AT, як командним префіксом, і я бачив ряд систем, які префіксують команди з "AT", але все ще потребують можливості відправки та отримання символів поза принципом Набір ASCII та загальні коди управління.
supercat

1
IIRC, Linux врешті-решт отримали драйвери для деяких winmodem. У багатьох випадках через звукові драйвери ALSA або OSS, оскільки найбільш збиті софтмодеми були по суті звуковими картами, підключеними до телефонних ліній. IIRC, у winmodem були невеликі переваги затримки, оскільки у вас не було застрягли ваших даних у буферах UART. Дбали лише геймери. Всі інші ненавиділи витрачати цикли зі свого одноядерного процесора.
Пітер Кордес

20

Ви говорите лише про недоліки набору команд. Розглянемо переваги:

  1. Використовуючи набір команд AT, ваш пристрій зв’язку можна негайно поставити у будь-яку мережу IP через реалізацію PPP ОС . Альтернатива полягає в тому, що крім розробки інтерфейсу користувальницького протоколу, ви повинні написати власний драйвер мережевого пристрою для кожної ОС, яку ви хочете підтримати, перш ніж ОС може використовувати ваш пристрій для підключення до Інтернету.

  2. Будь-який компетентний інженер вже знає цей протокол. Візьміть це у того, чиї робочі дні вимагають від нього розуміння та впровадження десятків нестандартних серійних протоколів: краще один добре розроблений загальний протокол.

  3. Хоча це правда, що протокол AT досить складний і займає більше пам’яті для реалізації, ніж протокол, побудований на основі конкретної задачі, але також трапляється той, хто вирішить реалізувати цей протокол, щоб уникнути витрачання часу на переосмислення ідеально хороше колесо. У нього десятки років досвіду проектування. Він знає, що це спрацює до того, як він приділить йому час розвитку. Гарне оформлення протоколу напрочуд складно.

    (Одного дня я збираюсь опублікувати свій магнітовий опус "Ваш протокол відмовляється", сподіваючись запобігти вчиненню більш страшних напіврозглянутих одноразових протоколів.)


1
Поки я згоден з настроями; "добре розроблений"? Три слова: ATSкоманда ...
CVn

Більшість пристроїв, які я бачив, що використовують так звані команди "AT", не мають нічого спільного серед наборів команд, окрім перших двох символів. Якщо модуль WiFi міг би прийняти "ATDT192,168,254,5W1234" як команду відкрити підключення TCP до порту 1234 в 192.168.254.5, тоді програмне забезпечення, яке очікує на модем, може використовувати модуль просто чудово, але я ще не бачу цього робити нічого подібного.
supercat

@supercat: Це тому, що WiFi модем більше схожий на карту Ethernet, як видно з відповідних стандартів (серія IEEE802) та використання MAC-адрес. І в той час як питання йде про "ІС зв'язку", я не думаю, що куман Ethernet IC використовує команду AT.
MSalters

@MSalters: У багатьох сценаріях основним використанням для модуля WiFi буде встановлення одного TCP-з'єднання одночасно; Емуляція Хейса для цього може прекрасно працювати. Я бачив драйвер FOSSIL, який дозволив би використовувати термінальні програми, засновані на DOS, як клієнтів telnet, надаючи їм "набір" номерів, як описані вище, і я вважаю, що той самий підхід буде прекрасно працювати з модулями WiFi. У будь-якому випадку, моя думка полягає в тому, що якби продукт використовував такий рядок, як описано вище, для встановлення TCP-з'єднання, таке використання мало б значні переваги сумісності / ознайомлення, але ...
supercat

... Я підозрюю, що більшість пристроїв, які сьогодні використовують команди, починаючи з "AT", роблять це просто тому, що їхні творці бачили багато інших пристроїв, що починають усі свої команди з "AT" і слідують за будь-якими ідеями, чому ці інші пристрої будуть робити так.
supercat

14

Розкрию іншу сторону питання ... чому б просто не додати ще одну лінію сигналізації до інтерфейсу?

Це може запитати лише той, хто не пережив усі перестановки сигнальних ліній на справжньому 25-контактному інтерфейсі RS232. Окрім TXD, RXD та Gnd, було вже кілька інших пар сигналів, RTS / CTS (готовий до відправки, очищення для відправки) DSR / DTR (готовий набір даних, готовий термінал даних) та апаратний штифт Hangup. Та інші. І жодної чіткої універсальної домовленості між виробниками, що саме виконувало функцію - навіщо тобі в першу чергу потрібні два набори апаратних сигналів рукостискання? І програмний XON / XOFF протокол поверх цього) (І чому принтери Diablo наполягали - наскільки я знаю, - однозначно, наскільки я знаю - на рукостисканні на штифті 11?)

Деяке обладнання вимагало повного інтерфейсу. Деякі були задоволені TXD / RXD / Gnd. Деякі можна змусити себе задіяти, за допомогою коротких штифтів 4 і 6 (таким чином, прив'язуючи свої RTS до CTS). А деякі, які повинні були бути DCE, були DTE або навпаки, і говорили б тільки з чим-небудь ще за допомогою кабелю "нульового модему", коли кожна пара підключень мінялася.

Потім, щоб спростити все це, IBM PC представив новий 9-контактний інтерфейс для RS232. Тобто вся ваша наявна колекція кабелів була застарілою, і вам довелося починати заново ...

Все це ускладнювало життя, навіть не враховуючи, що обидва цілі, можливо, були встановлені на різну швидкість передачі ...

Це підтримувало цілу галузь, побудовану навколо коробки розбиття RS232, кабелів та інструментів тесту / налагодження.

Додаючи ще один сигнал у цьому контексті, ймовірно, не збирався літати ...


9

Перший модем Хейса, що використовує команди "AT", вибрав "A" в якості першого символу його префікса команди, оскільки йому потрібно було підтримувати кілька швидкостей передачі, а "A" у рядку виглядає так: -------_-_____-x----------що має співвідношення 5: 1 між найдовші та найкоротші "низькі" часи ("х" може бути високим або низьким, залежно від параметрів паритету). Не швидкість швидше, ніж 1200 бод, не може керувати "коротким" часом 833us або менше, а швидкість швидше 2400 не може керувати "довгим" часом 4,16 мс або довше, тому модем може сміливо припускати, що якщо він бачить щось, що виглядає як "A" на 1200 бад, це (і так само з 300 бодами тощо). "T" має протилежний паритет від "A", тому якщо другий символ схожий на "T",

Пристрої або драйвери, які використовують команди "AT", які працюють аналогічно або аналогічно командам модему Hayes (наприклад, приймаючи ATDTW192,168,254,123W4567як команду для підключення до порту 4567 192.168.254.123), роблять це для сумісності з програмним забезпеченням, яке очікує спілкування зі старим стилем модем або сумісний пристрій. Однак існує багато пристроїв, які використовують команди, починаючи з "AT", на теорії, що "AT командний набір" здається корисним маркетинговим словом, хоча пристрої не здатні автоматично визначати швидкість передачі даних та мають команди на відміну від що-небудь на будь-якому іншому пристрої. Використання "AT" як префікса команди в таких контекстах не додає значення сумісності і не виконує корисних цілей; дизайнери роблять це, бо бачили, як це роблять інші дизайнери,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.