Почему люди используют AT-команды в последовательной связи?

Мне нужно знать, почему люди во встроенных системах используют AT-команды?
Когда я спрашивал, люди говорили, что это стандарт.

Итак, мой вопрос: что означает «АТ»? Почему люди продолжают говорить, что это стандарт?

+++ATH0 кто-нибудь?
@kinokijuf, что ты имеешь в виду?
why people in embedded systems use AT commands- в вашем вопросе или использовании AT в последовательном канале нет ничего особенного. Возможно, вы видели это во встроенной системе, но его происхождение объясняется ниже и не является специфичным для встроенных систем. (Будьте осторожны, чтобы не рисовать слишком широкой кистью.)
Команда AT была даже реализована в чем-то под названием modemu: Unix-программа, которая создает псевдо-tty-устройство master/slave и имитирует модем, который на самом деле работает через telnet. Вы «набираете» хост с помощью ATD<hostname>. Самое смешное, что программа вышла почти ровно тогда, когда она мне была нужна, примерно в 1996 году: версия 0.0.1. С тех пор он мне не нужен. И это все еще 0.0.1! Я использовал его в сочетании с minicom для передачи zmodem через telnet на удаленные хосты, до которых можно было добраться только таким образом.
@kinokijuf Пожалуйста, не пишите это в комментариях. Вы только что заставили StackOverflow повесить трубку! :-)

Ответы (5)

Одна редко оцениваемая деталь в командах «AT» заключается в том, что многие модемы начинают работу в режиме «авто-скорость/авто-четность». Изначально модем не пытался фактически декодировать какие-либо последовательные данные, а просто наблюдал за последовательными низким и высоким импульсами, ширина которых соответствовала одному и тому же действительному битовому периоду (например, 3,333 мс для 300 бод, 833 мкс для 1200 бод и т. д.). .). Обнаружив это, они увидят, будет ли следующий низкий импульс в пять раз шире. Если это так, они будут следить либо за другим высоким-низким-высоким, либо как минимум с 1,5-битным временем высокого. Обнаружение любого из них будет означать, что модем только что увидел 0x41 или 0xC1 (т.е. «A») определенной скорости передачи данных. Кроме того, это указывало бы, что подключенный компьютер использует либо 8-N-1, либо 7-E-1, либо использует либо 7-N-1, либо 7-O-1. В любом случае, он будет искать следующий символ либо 0x54, либо 0xD4 (т.е. "T"). Это позволит модему дополнительно классифицировать настройки длины символов и четности.

Обратите внимание, что все, что было получено до «AT», будет проигнорировано. Если эхо было включено, данные будут передаваться обратно на подключенный компьютер, просто отражая все переходы строк без какого-либо последовательного декодирования. Если компьютер отправлял данные до «AT» со скоростью, например, 247 бод, они возвращались обратно на этой скорости.

В настоящее время некоторые устройства используют начальную букву «А» для автоматического определения скорости передачи, но в остальном тот факт, что команды начинаются с «АТ», в основном является историческим курьёзом.

эмм... что вы имеете в виду под "7-Н-1"??
Семь битов данных, без четности, один стоповый бит. Позволяет отправлять данные на 11 % быстрее, чем 8-N-1, если вы не собираетесь отправлять какие-либо данные с установленным старшим битом.
За исключением того, что авто-бод обычно выполнялся (и выполняется) в части +++ команды +++AT или +++<защитное время>AT. См. en.wikipedia.org/wiki/Time_Independent_Escape_Sequence .
@david: я не вижу никаких упоминаний об автопереходе в бодах в статье о независимой от времени управляющей последовательности, и я никогда не видел, чтобы модем принимал +++ на любой скорости передачи, кроме той, которую он использовал для связи. Символы 0x9E 0x86, отправленные вплотную по адресу 2400-8-N-1 (или ^N^F по адресу 2400-7-O-1), будут производить точно такие же переходы строк, как символ «+» на скорости 1200 бод, поэтому я бы расценил «+» как странный выбор для персонажа для обучения бодам.
Ссылка на Википедию (!) предназначена только для людей, которые не знают о +++. Аппаратное обеспечение Я использую поезда на «U», программные поезда на пользовательских строках. Знаете ли вы о стандарте? Все строки подключения использовались для запуска +++, поэтому авто-бодирование было завершено до любого другого обмена данными.
@david: я видел UART с жестко запрограммированными функциями для обучения на «A». Я не уверен, что мне нравится «U», если только нельзя быть на 100% уверенным, что повторяющиеся символы «U» будут отправлены без пробелов, и не будет повторяющихся последовательностей «3» с удвоенной скоростью передачи данных. Преимущество «А» в том, что его последовательность импульсов не может быть создана ни одной битовой строкой при любой другой скорости передачи данных. Кстати, однажды я сделал проект, в котором плата с неаккуратными, но настраиваемыми часами обучалась для связи с ПК на скорости 38400 бод, заставляя ПК чередовать 80 долларов и $C0 на скорости 57600 бод [с паузами между ними].
При скорости 57600 бод эти символы представляют низкие импульсы длительностью 7 или 8 бит. При скорости 38400 бод они станут низкими импульсами с длительностью 5,33 или 4,67 бит, поэтому оба должны приниматься как $F0. Если получатель получает $FC или $F8, это слишком медленно; если он получает $E0 или $C0, это слишком быстро. Как только он получает последовательные символы $F0, все в порядке.

Он относится к набору команд Hayes, который долгое время был стандартом для выдачи команд модемам (и другому оборудованию) по последовательной линии.

Вместо команд и данных, имеющих две отдельные строки, используется только одна строка, а для перехода в командный режим из данных посылается определенная последовательность, например, +++ с последующей паузой заданной длины. Затем следующие данные воспринимаются принимающим оборудованием как команда.
Причина использования чего-то подобного заключается в том, что это позволяет избежать необходимости в еще одной паре линий, которые во многих случаях просто недоступны, особенно в небольших встроенных системах.

Взгляните на страницу Wiki и ссылки внизу — там много подробностей.

Однако есть всевозможные расширения исходного набора AT, поэтому я бы не стал полагаться на все, что упоминает AT, чтобы фактически использовать все оригинальные команды Hayes. Например, у меня есть последовательный чип Bluetooth, который IIRC использует свой собственный набор типов AT.
Хотя я не эксперт в этом, я просто помню, как ковырялся с командами в те старые времена коммутируемого доступа и BBS.

Набор команд «AT» должен был решить проблему, связанную с необходимостью внеполосной управляющей информации по тому же каналу потока байтов, в котором отправлялись произвольные данные. Это была обычная проблема модемов, когда они были внешними блоками, подключенными к компьютерам через последовательный кабель.

Hayes был производителем таких модемов и с самого начала приобрел большую популярность. Их решение проблемы вне полосы частот заключалось в том, чтобы посылать модему в основном двухбуквенные управляющие команды ASCII со специальной последовательностью, чтобы перевести его в режим сквозной передачи данных. Чтобы уменьшить вероятность появления случайных вещей, похожих на команды, все их последовательности команд начинались с AT-команды, которая означала «внимание».

Hayes завоевал такую ​​большую долю рынка, что другим производителям модемов пришлось реализовать тот же набор команд, чтобы быть совместимыми. Таким образом, клиенты могли использовать свои модемы без необходимости переписывать программное обеспечение, которое уже было настроено для управления модемом Hayes.

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

Мне понравилась эта историческая заметка о Хейсе и о том, как она навязала свой собственный стандарт, объединения вашего ответа с двумя приведенными выше ответами более чем достаточно :)
Между прочим, многие новые модемы больше не требуют, чтобы символы «AT» были в верхнем регистре, что увеличивает частоту, с которой разрыв соединения в середине отправки текстового файла вызывает ошибочное поведение модема.
Код управления Band-Break — +++AT или +++<защитное время>. AT — это первые два символа стандартного набора элементов управления, обозначающие ВНИМАНИЕ.

Существует особенно хороший документ, описывающий историю команд «AT», который можно найти здесь:

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

Он содержит много страниц хорошей «истории» о том, как появился протокол.

почему люди во встроенных системах используют AT-команды?

Я не из тех «людей во встроенных системах», но я бы сказал, что ATкоманды все еще используются, потому что они исходят из четко определенного стандарта с низкими издержками для встроенной сигнализации.

Это означает, что вы можете использовать один и тот же канал связи как для сигнализации (AT-команды для управления связью), так и для данных (фактических данных, которые вы хотите отправить). Стандарт ATопределяет, как различать их, чтобы вы и ваше последовательное устройство не путались при общении друг с другом.

Что означает "АТ"?

ATдля ВНИМАНИЯ

Почему люди продолжают говорить, что это стандарт?

Ну, потому что это так. Я бы сказал, что на самом деле это смесь стандартизации де-факто , пары « настоящих» стандартов и некоторых рекомендаций .

Кажется, это ничего не говорит о том, что уже было сказано в других ответах много лет назад. Если вы собираетесь поднять старый вопрос, вам действительно следует сказать что-то важное, о чем раньше не говорилось.