Что такое uart в роутере

Время на прочтение
10 мин

Количество просмотров 811K

После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.

image
Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей

От телеграфа к COM-порту

Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день

физический протокол

передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.

Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.

В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней

Физика интерфейса

Чтобы понять, что роднит и отличает разные UART-интерфейсы, разберем принцип работы самого популярного и любимого нами протокола RS-232. Дотошно расписывать все тонкости его работы я не буду. Об этом написан ни один десяток мегабайт статей, и если ты умеешь пользоваться Гуглом, то без проблем найдешь всю необходимую информацию. Но основы я расскажу, благо с ними можно уже круто всем рулить, а всякие фишки используются очень редко.

Основные рабочие линии у нас – RXD и TXD, или просто RX и TX. Передающая линия – TXD (Transmitted Data), а порт RXD (Received Data) – принимающая.
Эти линии СОМ-порта задействованы при передаче без аппаратного управления потоком данных. При аппаратном потоке задействованы еще дополнительные интерфейсные линии (DTS, RTS и пр.). Выход передатчика TX соединен с входом приемника RX и наоборот. Электрический принцип работы RS-232 отличается от стандартной 5-вольтовой TTL логики. В этом протоколе логический нуль лежит от +3 до +12 вольт, а единица от -3 до -12, соответственно. Промежуток от -3 до +3 вольт считается зоной неопределенности. Учти, что все напряжения указаны относительно корпуса компьютера, или земли. Теперь, я думаю, ты понимаешь, зачем в компьютерном блоке питания существует сразу два напряжения: -12 и +12 вольт. Они были введены специально для работы СОМ-порта.

image
Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)

Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.

Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.

Стандартная посылка занимает 10 бит. Но правило это распространяется только на стандартные настройки СОМ-порта. В принципе, его можно перенастроить так, чтобы он даже интерфейс One-Wire понимал. В режиме простоя, когда по линии ничего не передается, она находится в состоянии логической единицы, или -12 вольт. Начало передачи обозначают передачей стартового бита, который всегда равен нулю. Затем идет передача восьми бит данных. Завершает посылку бит четности и стоповый бит. Бит четности осуществляет проверку переданных данных. Стоповый бит говорит нам, что пересылка данных завершена. Надо отметить, что STOP-бит может занимать 1, 1.5, и 2 бита. Не стоит думать, что это дробные биты, это число говорит только о его длительности. Стоповый бит, как и стартовый, равен нулю.

image
Сигнал UART на экране осциллографа. Виден старт бит, данные и стоповый бит. Спасибо DIHALTза картинку

Скорость работы

Даже если тебе раньше никогда не приходилось работать с СОМ-портом, по крайней мере, в модеме ты должен знать номинальные скорости работы: 9600, 28800, 33600, 56000 и т.п. Сколько бит в секунду убегает из нашего порта? Вот смотри, допустим, скорость у нас 9600 бит в секунду. Это означает, что передача одного бита будет занимать 1/9600 секунды, а пересылка байта – 11/9600. И такая скорость для байта верна только в случае, если стоп-бит будет занимать один бит. В случае, если он занимает два стоп-бита, то передача будет 12/9600. Это связано с тем, что вместе с битами данных передаются еще специальные биты: старт, стоп и бит четности. Линейка скоростей СОМ-порта стандартизирована. Как правило, все устройства работают на трех стандартных скоростях: 9600, 19200, 115200. Но возможны другие варианты, даже использование нестандартных скоростей или скорости, меняющейся во времени, – с этим я сталкивался при разборе полетов очередного устройства.

Такой разный протокол

Видов UART существует великое множество. Я не буду перечислять их наименования, ибо, если ты владеешь английским, то сумеешь и сам нагуглить. Но самые основные не отметить нельзя! Напомню, что главное отличие интерфейсов состоит в среде и способе передаче данных. Данные могут передаваться даже по оптоволокну.

Второй по распространению интерфейс после RS-232 – это RS-485. Он является промышленным стандартом, и передача в нем осуществляется по витой паре, что дает ему неплохую помехоустойчивость и повышенную скорость передачи до 4 мегабит в секунду. Длина провода тут может достигать 1 км. Как правило, он используется на заводах для управления разными станками.

Надо сказать, что IRDA, или инфракрасная связь, которая встроена в большинство телефонов и КПК, тоже по сути является UARTом. Только данные передаются не по проводам, а с помощью инфракрасного излучения.

В SMART-картах (SIM, спутниковое телевиденье, банковские карты) – тех самых устройствах, которые мечтает похачить каждый уважающий себя фрикер – тоже используется наш любимый UART. Правда, там полудуплексная передача данных, и логика работы может быть 1,8/3,3 и 5 вольт. Выглядит так, будто RX запаян с TX на одном конце и на другом – в результате, один передает, другой в этот момент слушает, и наоборот. Это регламентировано стандартом смарт-карт. Так мы точно знаем, сколько байт пошлем, и сколько нам ответит карточка. Тема достойна отдельной статьи. В общем, запомни, что UART есть практически везде.

image
Устройства, которые имеют на своём борту UART, по часовой стрелке: мышка, ридер-эмулятор SMART-карт, КПК Palm m105, отладочная плата для микроконтроллера ATtiny2313 (или AT89C2051), модем.

Сопряжение интерфейсов

Я уже глаза намозолил разными интерфейсами, но как с ними работать-то? Ну, с обычным RS-232 понятно, а, допустим, с 5-вольтовым юартом как быть? Все просто: существуют различные готовые микросхемы-преобразователи. Как правило, в маркировке они содержат цифры «232». Увидел в схеме микруху с этими цифирями – будь уверен: скорее всего, это преобразователь. Через такие микросхемы с небольшим обвязом и сопрягаются все интерфейсы UART. Я не буду рассказывать о промышленных интерфейсах, а скажу о тех преобразователях, которые интересуют нас в первую очередь.

Самый известный преобразователь интерфейса – это микросхема, разработанная фирмой MAXIM, которая и получила от нее часть своего названия (max232). Для ее работы требуется четыре конденсатора от 0,1 микрофарады до 4 микрофарад и питание 5 вольт. Удивительно, что эта микросхема из 5 вольт генерирует отрицательное напряжение, чтобы сопрягать 5-вольтовый UART с RS-232.

Существуют микросхемы сопряжения USB с UART, например, микросхема ft232rl. В Ubuntu для этой микросхемы уже встроены драйвера. Для Windows их придется качать с официального сайта. После установки драйверов в системе появится виртуальный СОМ-порт, и с ним уже можно рулить различными устройствами. Советую не принимать эти микросхемы, как единственно возможные. Найдется громадное количество более дешевых и интересных аналогов, посему наседай на Гугл и поймешь, что мир UARTа – это круто.

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

Что нам это дает?

Как ты понял, интерфейс UART присутствует во многих устройствах, в которых стоит какой-либо процессор или контроллер. Я даже больше скажу: если там стоит контроллер, то юарт есть стопудово (только он не всегда может использоваться). Как правило, по этому интерфейсу идет наладка и проверка работоспособности девайса. Зачастую производитель умалчивает о наличии этого интерфейса в изделии, но найти его несложно: достаточно скачать мануал на процессор и, где находится юарт, ты будешь знать. После того, как ты получишь физический доступ к железяке по нашему интерфейсу, можно его настроить на свое усмотрение или даже заставить работать, так как надо тебе, а не как задумал производитель. В общем, – выжать максимум возможностей из скромного девайса. Знание этого протокола дает также возможность подслушать, что же творится в линиях обмена между различными процессорами, так как часто производители организуют целые юарт-сети в своем устройстве. В общем, применений много, главное – интуитивно понимать, как это делать.

Апдейтим роутер

Намедни я намутил себе WiFi-роутер WL-520GU и, прочитав статью Step’a «Level-up для точки доступа» (][ #106), успешно установил туда Linux. Но у меня возникли проблемы с монтированием swap-раздела жесткого диска. Так появилась необходимость посмотреть лог загрузки точки доступа – подмонтировался раздел или нет – причем, как говорится, на лету, чтобы сразу вносить необходимые изменения. Шестым чувством я подозревал, что в моем роутере просто обязан быть UART. Я взял в руки крестовую отвертку и начал его разбирать. Дело тривиальное, но с заковыркой – потайные винтики находятся под резиновыми ножками (если решишь повторить, помни, что при разборе ты лишаешься гарантии). Моему взору предстала достаточно скучная плата, где все «chip-in-one»: один центральный процессор, в который включено все, внешняя оператива, флеша, преобразователь питания и рядок разъемов с кнопками. Но на плате была не распаянная контактная площадка, точнее сказать, отверстия под иголки. Их было четыре штуки. Вот он UART, это очевидно! По плате даже без мультиметра видно, что крайние иголки – это +3,3 вольта и второй – земля. Средние контакты, соответственно, RX и TX. Какой из них что, легко устанавливается методом научного тыка (спалить интерфейс очень проблематично).
Сразу хочу отметить, что интерфейс UART в каждом роутере выглядит по-разному. В большинстве случаев, это не распаянные отверстия на плате. Правда, в одном роутере от ASUS я даже встретил полностью подписанный разъем.

Собираем преобразователь

Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы RS-232 с UARTом роутера. В принципе, можно подключить к USB, используя указанную выше микросхему FT232RL, – что я и сделал при первой проверке роутера. Но эта микросхема – в достаточно сложном для пайки корпусе, посему мы поговорим о более простых решениях. А именно – микросхеме MAX232. Если ты собираешься питаться от роутера, то там, скорее всего, будет 3,3 вольта, поэтому лучше использовать MAX3232, которая обычно стоит в КПК (схему распайки нетрудно найти в инете). Но в моем роутере присутствовало питание +5 вольт на входе, а указанных микросхем у меня великое множество, и я не стал заморачиваться. Для сборки нам потребуются конденсаторы 0,1 мкФ (4 штуки) и сама микросхема. Запаиваем все по традиционной схеме, и начинаем эксперименты.

image
Исходники для сборки

На выход я сразу повесил 9-пиновый разъем типа «папа», чтобы можно было легко подключить нуль-модемный кабель. Если ты помнишь, во времена DOSа такими кабелями делали сетку из двух компов и резались в «Дюкнюкем». Провод для наших целей собрать несложно. Правда, получится не полный нуль-модем и через него особо не поиграешь, но рулить точкой доступа будет самое то! Тебе понадобятся два 9-пиновых разъема типа «мама», корпуса к ним и провод, например, от старой мышки или клавы (главное, чтобы в нем было три провода). Сначала соединяем земли ¬- это пятый контакт разъемов; просто берем любой провод и с обоих сторон припаиваем к 5-му контакту. А вот с RX и TX надо поступить хитрее. С одного конца провода запаиваем на 3-й контакт, а с другого – на 2-й. Аналогично с третьим проводом, только с одного конца запаиваем на 2-й контакт, с другого – на 3-й. Суть в том, что TX должен передавать в RX. Прячем запаянные разъемы в корпус — и готов нуль-модемный кабель!

image
Распаянные иголки на плате роутера.

Для удобства монтажа в материнку роутера я впаял штырьковый разъем, а в монтажку с MAX232 – обратный разъем и вставил платку, как в слот. RX и TX роутера подбираются экспериментально.

image
Собраная плата

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

image
Прожигаем отверстие для вывода проводов

image
Распаянный СОМ-порт

image
Всё в сборе. Обратите внимание, что красный провод питания идёт к разъёму адаптера роутера. Узелок внутри сделан, для того чтобы рывком на оторвать припаянные провода.

Настройка терминала

Нам нужно настроить терминальную программу. В Винде все достаточно просто: запускаем Hyper Terminal, отключаем программную и аппаратную проверку данных, выставляем скорость 115200 и один стоповый бит. А вот в Линухе дело обстоит чуть хитрее. У меня Ubuntu, и рассказывать буду про нее. Для начала разберись, как в твоей сборке именуется СОМ-порт. В моем случае СОМ1 был ttyS0 (если использовать к примеру микросхему FT232, то он будет именоваться ttyUSB0). Для работы с ним я использовал софтинку minicom.

Запускай ее с параметрами: minicom -l -8 -c on -s. Далее выбирай «Настройки последовательного порта»:
Последовательный порт /dev/ttyS0

* Скорость/четность/биты 115200 8N1
* Аппаратное управление потоком — нет
* Программное управление потоком — нет

Сохраняем настройки. Софтина попробует проинициализировать модем — не обращай внимания. Чтобы вызвать меню, нажми <ctrl-a z>. Там можно менять настройки, например: включить/выключить эхо — Е.
Настройка

Я не рекомендую подключать микросхему преобразователя к роутеру, дабы проверить ее функционал. Допускается только брать с него питание. Проверка проходит очень просто — необходимо перемкнуть RX с TX. Сначала перемыкаешь в СОМ-порте 2-й и 3-й контакт — проверяешь настройки терминалки. Пишешь что-то на клаве: если символы возвращаются, значит, все ОК. Также проверяешь кабель, те же контакты. Потом подключаешь микросхему, и уже у нее на выходе ставишь перемычку. Я заостряю на этом внимание, потому что, например, у меня возникли проблемы, и ничего не работало, пока я все не проверил и не нашел ошибку.

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

image
Лог загрузки роутера в программе minicom

Автономное плаванье

Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.

Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой — промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.

image
Линукс компьютер :)

Итоги

Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.

Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».

Литература:
1. Михаил Гук «Аппаратные интерфейсы ПК» — просто студенческая библия по персоналке.
2. en.wikipedia.org/wiki/RS-232
3. easyelectronics.ru/tag/rs232

UART порт на роутере – это интерфейс, который позволяет получать доступ к контроллеру роутера через последовательное соединение. Он представляет собой набор логических линий, которые передают данные в формате последовательных битов.

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

Важно отметить, что для использования UART порта необходимо иметь специальный кабель или адаптер, который подключается к COM-порту компьютера. Также необходимо знать параметры соединения, такие как скорость передачи данных (baud rate) и протокол.

В целом, UART порт является важным инструментом для работы с роутером, который обеспечивает широкие возможности в области настройки и управления устройством. Он позволяет получать доступ к основным функциям роутера, что делает его незаменимым инструментом для администраторов сети и разработчиков программного обеспечения.

Содержание

  1. Что такое UART порт и его назначение на роутере
  2. Возможности использования UART порта на роутере
  3. Особенности настройки UART порта на роутере
  4. Преимущества использования UART порта на роутере
  5. Ограничения и предостережения при использовании UART порта на роутере
  6. Практические примеры применения UART порта на роутере
  7. Рекомендации по выбору роутера с UART портом

Что такое UART порт и его назначение на роутере

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

Часто UART порт на роутере представляет собой разъем типа RJ-45 или DB-9. В зависимости от модели роутера, он может поддерживать различные стандарты связи, такие как RS-232, RS-422 или RS-485.

Для использования UART порта на роутере необходимо подключить соответствующий кабель или адаптер, чтобы подключить его к другому устройству. Затем можно настроить соответствующий программный интерфейс на компьютере или другом устройстве для взаимодействия с роутером посредством UART порта.

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

Возможности использования UART порта на роутере

1. Консольное подключение. Подключившись к роутеру через UART порт, можно получить доступ к консоли управления роутером. Это дает возможность настраивать роутер и получать информацию о его работе непосредственно из командной строки.

2. Обновление прошивки. Через UART порт можно загрузить на роутер новую версию прошивки. Это позволяет улучшить функциональность роутера, исправить ошибки и уязвимости, а также добавить новые возможности.

3. Отладка и диагностика. UART порт может быть использован для отладки и диагностики проблем сети. Подключившись к роутеру через UART порт, можно получить информацию о состоянии сети, перехватить сетевой трафик и проанализировать его.

4. Взаимодействие с периферийными устройствами. UART порт может использоваться для взаимодействия роутера с другими периферийными устройствами, такими как модемы, датчики, считыватели карт и другие.

5. Создание собственных приложений. Использование UART порта позволяет разработчикам создавать собственные приложения и сервисы, которые могут полностью контролировать работу роутера и взаимодействовать с другими устройствами в сети.

В использовании UART порта на роутере есть огромный потенциал, который зависит от вашей фантазии и потребностей. Этот функциональный интерфейс позволяет максимально гибко настроить и контролировать работу вашего роутера.

Особенности настройки UART порта на роутере

1. Физическое подключение. Для настройки UART порта роутера требуется подключение к компьютеру с помощью специального кабеля. Он может быть в формате USB-UART или RS-232. Важно учитывать, что подключение должно быть выполнено правильно, чтобы избежать повреждения порта или устройства.

2. Настройка программного обеспечения. Для работы с UART портом на роутере необходимо использовать специальное программное обеспечение, такое как PuTTY или Tera Term. Важно правильно настроить параметры порта, такие как скорость передачи данных (baud rate), битность (data bits), контроль четности (parity), стоп-биты (stop bits), чтобы обеспечить корректное взаимодействие.

3. Доступ в командный интерфейс роутера. После успешного подключения и настройки порта, можно получить доступ к командному интерфейсу роутера. В командном интерфейсе можно выполнять различные команды для настройки роутера, такие как изменение IP-адреса, настройка безопасности или управление сетевыми портами.

Важно помнить! Неправильная настройка UART порта на роутере может привести к неработоспособности устройства или потере данных. Рекомендуется перед началом настройки прочитать документацию роутера и ознакомиться с рекомендациями производителя.

Преимущества использования UART порта на роутере

  • Подключение без использования сетевого интерфейса: UART порт обеспечивает возможность подключения к роутеру без необходимости в наличии рабочей сети.
  • Отладка и настройка: UART порт позволяет осуществлять отладку и настройку роутера с помощью командной строки или специальных программ.
  • Доступ к внутренним настройкам: через UART порт можно получить доступ к внутренним настройкам роутера, таким как файловая система, конфигурационные файлы и т. д.
  • Восстановление работы роутера: при возникновении проблем с программным обеспечением или настройками роутера, UART порт позволяет восстановить работу устройства путем загрузки альтернативной прошивки или изменения настроек.
  • Интеграция с другими устройствами: UART порт можно использовать для интеграции роутера с другими устройствами, такими как микроконтроллеры или Arduino, для реализации различных проектов и сценариев.

Ограничения и предостережения при использовании UART порта на роутере

  1. Внимательно следуйте инструкциям производителя роутера по настройке и использованию UART порта. Неправильное использование может привести к нежелательным последствиям, таким как поломка устройства или потеря гарантии.
  2. Перед использованием UART порта, убедитесь, что вы обладаете достаточными знаниями и навыками для работы с аппаратными устройствами и командной строкой. Неправильное выполнение команд может вызвать серьезные проблемы с работой роутера.
  3. Если вы не уверены в своих навыках или нуждаетесь в специализированной помощи, лучше обратиться к специалисту или технической поддержке производителя для получения подробных инструкций и рекомендаций.
  4. Будьте внимательны при подключении к UART порту, чтобы не повредить разъем или провода. Используйте правильные инструменты и технику, чтобы избежать повреждения роутера или причинения вреда себе.
  5. Помните, что использование UART порта может привести к потере гарантии на ваш роутер, поэтому перед его использованием внимательно прочитайте условия гарантии и оцените все риски.
  6. Не забывайте про безопасность. Храните доступ к UART порту в надежном месте и обеспечьте его защиту от несанкционированного доступа. Используйте сложные пароли и шифрование для защиты своего роутера.
  7. Наконец, проявляйте осторожность при работе с UART портом, особенно при выполнении команд, изменяющих настройки устройства. Ошибки могут привести к непредсказуемым последствиям, поэтому всегда делайте резервные копии и имейте возможность восстановить роутер в случае необходимости.

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

Практические примеры применения UART порта на роутере

  1. Консольное подключение: UART порт позволяет подключиться к консоли роутера с помощью специального программного обеспечения, например, HyperTerminal или PuTTY. Это позволяет администратору настроить роутер и выполнять различные консольные команды.
  2. Отладка и мониторинг: UART порт может использоваться для отладки и мониторинга работы роутера. С помощью специального программного обеспечения администратор может получить доступ к отладочной информации и протоколам связи.
  3. Использование дополнительных модулей: UART порт позволяет подключать дополнительные модули к роутеру, такие как модули беспроводной связи, модули GPS и другие. Это расширяет возможности роутера и позволяет использовать его в различных сценариях.
  4. Использование в проектах Интернета вещей (IoT): UART порт может быть использован в проектах Интернета вещей для связи с различными датчиками и устройствами. Роутер может выполнять функцию хаба для сбора данных и передачи их в облако для анализа.
  5. Перевод в режим bootloader: UART порт может использоваться для перевода роутера в режим bootloader, что позволяет обновлять прошивку роутера и восстанавливать его после сбоя или ошибки.

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

Рекомендации по выбору роутера с UART портом

При выборе роутера с UART портом следует обратить внимание на несколько важных моментов, которые могут повлиять на его функциональность и совместимость с вашими потребностями.

1. Совместимость с операционной системой

Убедитесь, что роутер поддерживает вашу операционную систему и имеет необходимые драйверы и программное обеспечение. Это особенно важно, если вы планируете использовать UART порт для настройки и управления роутером.

2. Функциональность UART порта

Узнайте, какие функции предоставляет UART порт на роутере. Некоторые модели могут поддерживать только базовые функции, такие как консольное подключение, тогда как другие могут иметь расширенные возможности, такие как подключение к другим устройствам через UART.

3. Скорость передачи данных

Проверьте скорость передачи данных UART порта на роутере. Если вам нужно передавать большие объемы данных или работать с высокоскоростными устройствами, выберите роутер с поддержкой высокой скорости передачи данных.

4. Доступность и цена

Учтите доступность и цену роутера с UART портом. В зависимости от ваших потребностей, вы можете выбрать модель с определенными характеристиками и функциями. Сравните различные модели и выберите ту, которая наиболее выгодна для вас.

Прежде чем совершить покупку, лучше проконсультироваться с техническим специалистом или прочитать отзывы и рекомендации пользователей, чтобы выбрать роутер с UART портом, который будет отвечать вашим требованиям и потребностям наилучшим образом.

Подключение роутера по UART — один из самых удобных и эффективных способов настроить и контролировать работу устройства. UART (Универсальный Асинхронный Приёмопередатчик) — это стандартный интерфейс, который позволяет передавать данные между различными устройствами. Подключение по UART позволяет получить полный доступ к настройкам и настройкам роутера, что является необходимым для выполнения ряда задач, таких как изменение настроек сети, обновление прошивки или диагностика неполадок.

Для подключения роутера по UART вам понадобятся несколько инструментов и компонентов. Во-первых, вам понадобится сам роутер и его прилагаемый кабель UART. Также вам понадобится компьютер с последовательным портом или USB-портом, в который можно подключить кабель UART. Наконец, вам понадобится программное обеспечение, способное обрабатывать и отображать данные, полученные от роутера.

Первым шагом в подключении роутера по UART является нахождение последовательного порта на вашем компьютере. Обычно они обозначаются как COM1, COM2 и т.д. Подключите один конец кабеля UART к роутеру, а другой конец — к последовательному или USB-порту вашего компьютера. Затем запустите программное обеспечение для работы с последовательными портами, такое как PuTTY или HyperTerminal, и настройте его на использование нужного COM-порта и правильных настроек скорости передачи данных.

Важно помнить, что подключение роутера по UART требует осторожности и аккуратности. Неправильное подключение или настройка может привести к повреждению устройства. Поэтому перед началом работы рекомендуется ознакомиться с инструкциями производителя и, возможно, проконсультироваться с опытными специалистами.

Содержание

  1. Подключение роутера по UART: что это и как это работает?
  2. Необходимые материалы и инструменты для подключения роутера
  3. Подготовка роутера и устройства для подключения

Подключение роутера по UART: что это и как это работает?

Подключение роутера по UART предоставляет возможность управлять роутером с помощью командной строки и получать доступ к его настройкам. Использование UART позволяет осуществлять более глубокую настройку роутера и проводить диагностику проблем, которые могут возникнуть при его работе.

Для подключения роутера по UART необходимо иметь специальный кабель, называемый UART-кабелем. UART-кабель обычно имеет два разъема – один для подключения к роутеру, а другой для подключения к компьютеру или другому устройству, которое будет использоваться для управления роутером.

Подключение роутера по UART выполняется путем подключения одного конца UART-кабеля к UART-порту на роутере и другого конца к COM-порту на компьютере. После подключения роутера по UART можно использовать специальную программу – терминал эмулятор, чтобы управлять роутером.

При работе с роутером по UART необходимо знать правильные настройки для подключения. Это включает в себя выбор скорости передачи данных (бит в секунду), количество бит данных, проверку на четность, количество стоп-битов и другие параметры. Обычно эти настройки указываются в руководстве по эксплуатации роутера.

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

Подключение роутера по UART дает возможность эффективно управлять и настраивать роутер, предоставляя полный контроль над его работой.

Необходимые материалы и инструменты для подключения роутера

Для успешного подключения роутера по UART вам понадобятся следующие материалы и инструменты:

  • Роутер с UART-портом. Убедитесь, что ваш роутер имеет встроенный UART-порт или вы можете подключить его с помощью переходника.
  • USB-UART переходник. Для соединения компьютера и роутера по UART необходимо использовать USB-UART переходник. Убедитесь, что у вас есть такой переходник и его драйверы установлены на вашем компьютере.
  • USB-кабель. Вам потребуется USB-кабель для подключения USB-UART переходника к компьютеру.
  • Компьютер. Чтобы подключить роутер по UART, вам нужен компьютер, на котором установлены необходимые программы и драйверы.
  • Утилита для работы с UART. Для взаимодействия с роутером по UART вам потребуется специальная утилита, которая позволит отправлять команды и получать ответы от роутера. Убедитесь, что эта утилита установлена на вашем компьютере.

При подготовке к подключению роутера по UART убедитесь, что вы имеете все необходимые материалы и инструменты, чтобы избежать проблем в процессе работы.

Подготовка роутера и устройства для подключения

Прежде чем подключить роутер по UART, необходимо выполнить несколько подготовительных шагов:

1. Проверка совместимости

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

2. Получение необходимого оборудования

Для подключения роутера по UART вам понадобятся:

  • ПК или ноутбук с доступным последовательным портом (COM портом) или USB-портом;
  • UART-USB адаптер или UART-программатор;
  • Переходник или кабель нужного типа для подключения адаптера или программатора к последовательному или USB-порту.

3. Скачивание необходимого программного обеспечения

Перед подключением роутера по UART, убедитесь, что у вас есть необходимое программное обеспечение. Обычно это:

терминальная программа (например, PuTTY, Tera Term или HyperTerminal), которая позволяет установить соединение с роутером через UART, а также прошивка для роутера, которую вы собираетесь загрузить или изменить.

4. Подготовка роутера

Перед подключением роутера по UART, убедитесь, что он выключен и подключите UART-адаптер или программатор к его соответствующему порту (последовательному или USB-порту) с помощью переходника или кабеля. Убедитесь, что все соединения надежны и без повреждений.

5. Подключение устройства к ПК

Подключите другой конец UART-адаптера или программатора к вашему ПК или ноутбуку. Если вы используете последовательный порт, подключите адаптер к COM-порту с помощью переходника, если необходимо. Если вы используете USB-порт, убедитесь, что адаптер правильно распознан и установленны соответствующие драйверы.

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

Итак, UART — Universal Asynchronous Receiver-Transmitter, что в переводе звучит как Универсальный Асинхронный Приемо-Передатчик.

Содержание

  • Назначение и принцип работы,
  • Реализация в Ардуино,
  • Примеры использования,
  • Вывод,
  • FAQ.

Назначение и принцип работы

У всех интерфейсов передачи данных, как легко догадаться из названия, одна цель — передача данных. Данными с контроллером могут обмениваться датчики, исполнительные устройства, индикаторы, дисплеи, компьютеры, смартфоны и другие контроллеры. Причем под обменом данных я имею в виду не только двухстороннюю связь, но и одностороннюю, когда, например, датчик температуры передает информацию на контроллер и ничего не ждет от него в ответ.

Если говорить применительно к Ардуино, то в аппаратном виде у всех плат присутствуют три интерфейса: UART, SPI и I2C. А у некоторых особо продвинутых имеется аж встроенный адаптер CAN-шины. У каждого из перечисленных интерфейсов есть свои преимущества и недостатки, о чем будет упомянуто отдельно, а также свои “клиенты”, то есть устройства, использующие только тот или иной интерфейс для связи с внешним миром. Потому обо всех вариантах надо знать и всеми уметь пользоваться.

Обязательно к прочтению: Интерфейс передачи данных I2C

В данной статье чуть подробнее разберем первый интерфейс из нашего списка — UART. Первый он и по другим параметрам: самый простой, понятный и распространенный. С него начинается знакомство начинающего DIY-мастера на тему “межмашинного” общения, даже если бы он выбрал другую последовательность. Все потому, что подключение Ардуино к компьютеру для прошивки программы осуществляется именно через него, родимого — UART. Благодаря специальному встроенному адаптеру он превращается на выходе с платы в более понятный для ПК порт USB. Через него на компьютер посылаются информационные и диагностические сообщения, а также принимаются команды и прочая полезная информация. Таким образом интерфейс этот будет преследовать нас везде и всегда, что, впрочем, и не так уж плохо.

Итак, UART — Universal Asynchronous Receiver-Transmitter, что в переводе звучит как Универсальный Асинхронный Приемо-Передатчик. Насчет “универсальный” понятно, он широко распространен в электронном мире, его в разных видах используют и большие и малые компьютеры, контроллеры, датчики, средства коммуникации и прочие электронные устройства. Слово “асинхронный” означает то, что прием и передача отдельных битов не выравниваются так называемыми синхроимпульсами, что и хорошо, и плохо одновременно. Единица отличается от нуля исключительно по времени между перепадами уровней сигнала, которое заранее задается скоростью передачи. Для полноты картины следует сказать, что в природе существует версия UART в синхронизацией сигналов — USART, где буква S обозначает Synchronous, но здесь мы ее изучать пока не будем. Чем хороша асинхронная передача данных? Простотой протокола, минимумом проводов и занятых в процессе аппаратных средств, возможность полного дуплекса (одновременной передачи данных в обоих направлениях). В чем ее недостаток? Меньшая помехозащищенность и, как следствие, максимальная скорость и расстояние при тех же остальных условиях. Однако, для 99,5% наших задач скорости и устойчивости асинхронного варианта хватит с большим запасом.

С “хардовой” стороны UART использует два пина контроллера — RX и TX, где первые буквы обозначают, соответственно, Receiver и Transmitter. Что означают вторые Иксы, не спрашивайте, никто точно не знает, но все пишут именно так и нам советуют. Логично, что для связи двух устройств понадобятся два провода, причем соединять их следует крест-накрест RX первого в TX второго и наоборот. Куда один передает, там другой принимает.

uart1-uart2.png

Получается такой большой Икс. И тут нас должна осенить внезапная догадка, откуда в названии портов взялись Иксы! Возможно, что так оно и есть, версия действительно красивая и топологию так запомнить легче.

У разных плат Ардуино разное количество аппаратных портов UART, чаще всего один, а у огромной Меги аж четыре. Однако, простота этого интерфейса позволяет эмулировать порт программными методами, присваивая RX и TX почти любым пинам на выбор. То есть можно использовать “железные” порты на строго определенных пинах (рекомендуется) или — с некоторыми ограничениями — “программные”, а при необходимости и те, и другие одновременно.

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

soft.png

Пока информация не передается, в линии сохраняется высокий уровень (для нашего случая с Ардуино это +5В, так называемая TTL-логика). Спад сигнала — это команда принимающей стороне, что сейчас начнется что-то интересное! И спустя определенное количество времени, зависящее от заранее заданной скорости, начинается обещанное интересное, а именно передача байта в виде ряда нулей и/или единиц с соблюдением тех же, заранее оговоренных, временных отрезков. После восьмого бита следует стоп-сигнал в виде высокого уровня и ситуация повторяется до тех пор, пока не будут переданы все нужные нам байты.

Так в реальности выглядит в пине TX снятый осциллографом фрагмент сообщения “Hello, World!”:

hello-word.jpg

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

protocol.jpg

Наличие или отсутствие такого бита тоже оговаривается в протоколе заранее, наряду со скоростью и прочими параметрами. Тут нужно понимать, что протокол имеет разновидности и может отличаться у разных устройств в зависимости от условий и предпочтений программистов. Основные параметры таковы: скорость, количество битов, паритет (четность), длина стоп-сигнала. Отсюда вытекает важное условие для работы UART: оба устройства должны быть настроены одинаково, иначе они друг друга не поймут, как случайно встретившиеся в Антарктиде китаец и швед. Опять же, истины ради, стоит упомянуть о возможностях некоторых особо умных устройств понимать, на каком “языке” говорит с ним собеседник и автоматически настраиваться под него, например GPS-модули типа SIM800, но это исключительно заслуга программистов, которые предусмотрели такую функцию и облегчили жизнь своим клиентам. Мы же пока таким заниматься не станем, поэтому будем просто задавать одинаковые параметры на обоих электронных “собеседниках”.

Применительно к Ардуино чаще всего бит четности не используется, данные байта состоят из восьми битов, а длина стоп-сигнала равна длине одного бита.

Пример — полный сигнал “Hello, World!” с переводом строки. Хорошо видны информационные биты, отмеченные точкой, и служебные “старт” и “стоп” в начале и в конце каждого байта.

signal.jpg

Скорость передачи измеряется в “бодах”, то есть в битах в секунду округленно до сотни. Очень желательно выбирать из заранее кем-то сформулированных стандартных значений:

znacheniya.jpg

Чем выше скорость, тем быстрее бегают по проводам данные, но тем больше вероятность ошибок, поэтому рекомендуется не злоупотреблять и соблюдать принцип разумной достаточности. Для большинства случаев рекомендуется скорость 9600 бод, это довольно быстро и весьма надежно даже на приличных дистанциях, байт передается примерно за 1мс. Если этого недостаточно, всегда можно “поддать газу”. Предельно возможная скорость передачи данных на аппаратных UART для плат Ардуино — 250000 бод, на софтовых — 115200. Но, как говорилось выше, без нужды лучше до таких значений не разгоняться.

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


Реализация в Arduino

В среде Ардуино общение с UART происходит с помощью класса Serial. Рассмотрим некоторые функции этого класса.

Serial.begin(long);
Запускает работу порта с заданной в параметре скоростью в бодах. У Меги 4 порта, запускаются командами эc номером, например, Serial1.begin(9600); и так далее. Все остальные команды к портам Меги тоже осуществляются с уточнением номера порта.

Serial.end();
Останавливает работу порта, если он был ранее запущен. На практике используется редко, но бывают случаи, когда необходимо освободить пины 0 и 1 хотя бы на время.

= Serial.available();
Возвращает в виде числа int количество принятых в буфер порта байт. Если возвращает 0, информации не поступало. Обычно используется как триггер для приема информации.

= Serial.read();
Возвращает байт из буфера приема. Следующий вызов возвращает следующий байт и так далее. Если буфер опустел, возвращает 0xFFFF.

Serial.print(xxx);
Предоставляет большое разнообразие вариантов передачи данных в порт, от байта до строки символов и числа с плавающей точкой. Очень удобная функция для отладки программ.


Serial.println(xxx);

Отличается от вышеупомянутой автоматической отправкой двух служебных символов переноса строки после информации из входящей в параметр информации. Следующее сообщение начнется с новой строки.

Serial.write(xxx);
Передает двоичные данные в порт. Возвращает число переданных байтов.

= Serial.read();
Возвращает принятые двоичные данные.

Список функций класса Serial далеко не полный, но с их помощью можно осуществлять почти любые операции с обменом данных. Посмотрим, как это делается на нескольких практических примерах.


Примеры использования

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

Схему рисовать не будем, потому что ее нет. Достаточно просто подключить плату к USB компьютера и залить в нее такую программу:

void setup() {

  Serial.begin(9600);       // запускаем порт
}

void loop() {
  Serial.print("timer: ");  // пишем слово timer:
  Serial.print(millis());   // выводим кол-во миллисекунд с начала запуска программы
  Serial.println("ms");     // подписываем их ms, переводим строку на новую
  delay(1000);              // задержка 1 сек
}

После чего запускаем встроенный в среду Ардуино монитор порта при помощи кнопки с лупой в верхнем правом углу окна:

ugol.jpg

И смотрим какие строки там побежали:

stroki.jpg

Две строки Serial.print() последовательно выводят на экран текст, значение таймера millis(), третья строка Serial.println() выводит последний кусочек текста и переводит строку. Получается бесконечная цепочка сообщений, которые мы можем читать с экрана.

Пример второй, чуть посложнее, но тоже не требующий сборки схемы. Будем посылать данные в обратном направлении — от компьютера к контроллеру. Данные будут командами на включение или выключение встроенного светодиода на 13 пине Ардуино.

Заливаем программу:

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {         // если пришла команда
    char incom = Serial.read();         // считываем, опознаем, реагируем
    if (incom == '1') {
      digitalWrite(13, HIGH);
    } else if (incom == '0') {
      digitalWrite(13, LOW);
    }
  }
}

Теперь, если набрать в строке монитора единицу и отправить ее, нажав кнопку Enter, светодиод на плате включится, а если отправить ноль — выключится. Таким образом мы можем управлять программой непосредственно из монитора порта или отправлять в нее любые данные. Например время для часов, количество оборотов, которое нужно сделать мотору, или яркость светодиодной ленты. И это уже прямой путь к передаче данными между контроллерами напрямую, стоит лишь заменить ввод данных в мониторе на отправку их из программы второго контроллера.

Третий пример как раз про это. Для реализации нам потребуется две любых платы Ардуино, между которыми мы будем гонять данные. К каждой из них мы подключим две кнопки и два светодиода по одинаковой схеме, и соединим их RX-TX крест-накрест, как было описано выше.

primer.jpg

Важное примечание. Если платы подключены к разным источникам питания, необходимо обязательно объединить их контакты GND, иначе для сигналов не будет опоры на соседней плате.

Что мы хотим увидеть на данной сборке. Кнопки, подключенные к одной плате, будут управлять светодиодами, подключенными к другой. И наоборот. Для этого каждая плата должна передавать информацию о том, что происходит на ее кнопках другой плате, одновременно принимая от нее такие же данные и управляя согласно им своими светодиодами. Сборки симметричны, функции тоже, значит и программы на обеих платах будут одинаковые.

Заливаем в обе:

#define LED_1   4   // светодиод 1
#define LED_2   5   // светодиод 2
#define BUT_1   2   // кнопка 1
#define BUT_2   3   // кнопка 2

byte but[2];  // переменные для отслеживания кнопок

void setup() {
  // инициализируем пины, запускаем сирал порт
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(BUT_1, INPUT);
  pinMode(BUT_2, INPUT);
  Serial.begin(9600);
}

void loop() {
  if (get_but()) {            // с кнопками что-то было
    Serial.write(but[1]);   // отправляем в порт новое состояние кнопок
  }
  if (Serial.available() > 0) {         // если пришли данные от соседних кнопок
    byte incom = Serial.read();         // считываем эти данные
    digitalWrite(LED_1, !(incom / 2));  // зажигаем или гасим светодиод 1
    digitalWrite(LED_2, !(incom % 2));  // зажигаем или гасим светодиод 2
  }
}

byte get_but() {
  static unsigned long timer;
  if (timer + 50 > millis()) return 0; // опрос каждые 50мс (антидребезг)
  timer = millis();
  but[0] = but[1];
  but[1] = digitalRead(BUT_1) + digitalRead(BUT_2) * 10; // данные с обеих кнопок в одну переменную (единицы и десятки)
  if (but[0] != but[1]) return 1;      // если есть изменение, сигнализируем единицей
  return 0;                            // если нет, возвращаем 0
}

Нажимаем кнопки, видим, что все работает так, как задумано. Байты с командами бегают туда-обратно, причем в любой последовательности, в т.ч. одновременно.

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


Вывод

UART бесспорно и заслуженно самый известный и широко применяемый интерфейс передачи данных. С его помощью к Ардуино подключаются датчики, исполнительные устройства, индикаторы и дисплеи, GPS и GPRS-модули. Через него осуществляется заливка программы в Ардуино и ее отладка. С его помощью можно легко и быстро организовать обмен команд и информацией с другим контроллером. Однако, у него есть и недостатки, например ограничение по скорости, относительно невысокая помехозащищенность, требование к точности тактовой частоты у передающей и принимающей платы, что особенно критично для контроллеров, работающих от внутреннего RC-генератора. Тем не менее он остается очень важным инструментом с огромными возможностями. Знать этот интерфейс и уметь им пользоваться должен любой DIY-мастер без исключения.


FAQ

Можно ли соединить с помощью UART более двух устройств и/или контроллеров?
Можно, однако придется слегка доработать шину передачи данных, чтобы все RX видели все TX. Для этого существуют адаптеры RS-485, позволяющие на физическом уровне объединить TX и RX всех устройств, входящих в сеть, в одно целое при помощи двух проводков. Но это тема отдельной статьи, а может, и не одной.

На какое максимальное расстояние возможно передать данные с помощью UART без потерь?
Расстояние сильно зависит от ряда параметров: толщины и материала провода, наличия экранирования, скорости. Однако даже в лучшем случае это не более пары десятков метров. Интерфейс не предназначен для дальних расстояний. Но, возвращаясь к предыдущему вопросу, стоит сказать, что преобразованный с помощью RS-485 сигнал может распространяться не только на несколько устройств, но и гораздо дальше, так как использует более высокое напряжение и противофазу сигналов.

Нужно ли соблюдать строгую очередность в передаче и приеме информации?
По умолчанию UART дуплексный, то есть может принимать и передавать данные одновременно. Однако важно в процессе передачи успевать забирать данные из буфера приема, иначе он переполнится и часть данных пропадет. По умолчанию размер буфера 64 байта, что довольно много и при правильном использовании более чем достаточно, но для особых случаев можно увеличить константу, например до 128 байт, при помощи команды препроцессору:


#define SERIAL_RX_BUFFER_SIZE 128

Что такое логические уровни, как и зачем их согласовывать?
Не все устройства и контроллеры работают на питании и логике 5В, есть те, которым противопоказано напряжение выше 3.3В, они могут вывести принимающий порт из строя и, возможно, все устройство. Если для передачи в обратную сторону 5 <— 3.3 можно ничего не менять, принимающая сторона все поймет и не повредится, то в направлении 5 —> 3.3 следует обязательно понизить напряжение. Вариантов несколько, самый простой — резистивный делитель, намного лучше применить стабилитрон на 3.3 В, отсекающий лишнее напряжение, или специальную микросхему, особенно если каналов несколько.

A Universal Asynchronous Receiver-Transmitter (UART ) is a computer hardware device for asynchronous serial communication in which the data format and transmission speeds are configurable. It sends data bits one by one, from the least significant to the most significant, framed by start and stop bits so that precise timing is handled by the communication channel. The electric signaling levels are handled by a driver circuit external to the UART. Common signal levels are RS-232, RS-485, and raw TTL[1] for short debugging links. Early teletypewriters used current loops.

Block diagram for a UART

It was one of the earliest computer communication devices, used to attach teletypewriters for an operator console. It was also an early hardware system for the Internet.

A UART is usually an individual (or part of an) integrated circuit (IC) used for serial communications over a computer or peripheral device serial port. One or more UART peripherals are commonly integrated in microcontroller chips. Specialised UARTs are used for automobiles, smart cards and SIMs.

A related device, the universal synchronous and asynchronous receiver-transmitter (USART) also supports synchronous operation.

Transmitting and receiving serial data

Edit

A UART contains those following components:

  • a clock generator, usually a multiple of the bit rate to allow sampling in the middle of a bit period
  • input and output shift registers, along with the transmit/receive or FIFO buffers
  • transmit/receive control
  • read/write control logic

The universal asynchronous receiver-transmitter (UART) takes bytes of data and transmits the individual bits in a sequential fashion.[2] At the destination, a second UART re-assembles the bits into complete bytes. Each UART contains a shift register, which is the fundamental method of conversion between serial and parallel forms. Serial transmission of digital information (bits) through a single wire or other medium is less costly than parallel transmission through multiple wires.

The UART usually does not directly generate or receive the external signals used between different items of equipment. Separate interface devices are used to convert the logic level signals of the UART to and from the external signaling levels, which may be standardized voltage levels, current levels, or other signals.

Communication may be 3 modes:

  • simplex (in one direction only, with no provision for the receiving device to send information back to the transmitting device)
  • full duplex (both devices send and receive at the same time)
  • half duplex (devices take turns transmitting and receiving)

For UART to work the following settings need to be the same on both the transmitting and receiving side:

  • Voltage level
  • Baud Rate
  • Parity bit
  • Data bits size
  • Stop bits size
  • Flow Control

For the voltage level, 2 UART modules work well when they both have the same voltage level, e.g 3V-3V between the 2 UART modules. To use 2 UART modules at different voltage levels, a level switch circuit needs to be added externally.[3]

Data framing

Edit

UART frame, field length in Bits

1 5-9 0-1 1-2
Start Bit Data Frame Parity Bits Stop Bits

 

Example of a UART frame. In this diagram, one byte is sent, consisting of a start bit, followed by eight data bits (D0-7), and two stop bit, for a 11-bit UART frame. The number of data and formatting bits, the presence or absence of a parity bit, the form of parity (even or odd) and the transmission speed must be pre-agreed by the communicating parties. The «stop bit» is actually a «stop period»; the stop period of the transmitter may be arbitrarily long. It cannot be shorter than a specified amount, usually 1 to 2 bit times. The receiver requires a shorter stop period than the transmitter. At the end of each data frame, the receiver stops briefly to wait for the next start bit. It is this difference which keeps the transmitter and receiver synchronized. BCLK = Base Clock

A UART frame consists of 5 elements:

  • Idle (logic high (1))
  • Start bit (logic low (0))
  • Data bits
  • Parity bit
  • Stop (logic high (1))

In the most common settings of 8 data bits, no parity and 1 stop bit (aka 8N1), the protocol efficiency is 80%. For comparison, Ethernet’s protocol efficiency when using maximum throughput frames with payload of 1500 bytes is up to 95% and up to 99% with 9000 byte jumbo frames. However due to Ethernet’s protocol overhead and minimum payload size of 42 bytes, if small messages of one or a few bytes are to be sent, Ethernet’s protocol efficiency drops much lower than the UART’s 8N1 constant efficiency of 80%.

The idle, no data state is high-voltage, or powered. This is a historic legacy from telegraphy, in which the line is held high to show that the line and transmitter are not damaged.

Each character is framed as a logic low start bit, data bits, possibly a parity bit and one or more stop bits. In most applications the least significant data bit (the one on the left in this diagram) is transmitted first, but there are exceptions (such as the IBM 2741 printing terminal).

Start bit

Edit

The start bit signals to the receiver that a new character is coming.

Data bit

Edit

The next five to nine bits, depending on the code set employed, represent the character.

Parity bit

Edit

If a parity bit is used, it would be placed after all of the data bits.

The parity bit is a way for the receiving UART to tell if any data has changed during transmission.

Stop bit

Edit

The next one or two bits are always in the mark (logic high, i.e., ‘1’) condition and called the stop bit(s). They signal to the receiver that the character is complete. Since the start bit is logic low (0) and the stop bit is logic high (1) there are always at least two guaranteed signal changes between characters.

If the line is held in the logic low condition for longer than a character time, this is a break condition that can be detected by the UART.

Receiver

Edit

All operations of the UART hardware are controlled by an internal clock signal which runs at a multiple of the data rate, typically 8 or 16 times the bit rate. The receiver tests the state of the incoming signal on each clock pulse, looking for the beginning of the start bit. If the apparent start bit lasts at least one-half of the bit time, it is valid and signals the start of a new character. If not, it is considered a spurious pulse and is ignored. After waiting a further bit time, the state of the line is again sampled and the resulting level clocked into a shift register. After the required number of bit periods for the character length (5 to 8 bits, typically) have elapsed, the contents of the shift register are made available (in parallel fashion) to the receiving system. The UART will set a flag indicating new data is available, and may also generate a processor interrupt to request that the host processor transfers the received data.

Communicating UARTs have no shared timing system apart from the communication signal. Typically, UARTs resynchronize their internal clocks on each change of the data line that is not considered a spurious pulse. Obtaining timing information in this manner, they reliably receive when the transmitter is sending at a slightly different speed than it should. Simplistic UARTs do not do this; instead they resynchronize on the falling edge of the start bit only, and then read the center of each expected data bit, and this system works if the broadcast data rate is accurate enough to allow the stop bits to be sampled reliably.[4][5]

It is a standard feature for a UART to store the most recent character while receiving the next. This «double buffering» gives a receiving computer an entire character transmission time to fetch a received character. Many UARTs have a small first-in, first-out (FIFO) buffer memory between the receiver shift register and the host system interface. This allows the host processor even more time to handle an interrupt from the UART and prevents loss of received data at high rates.

Transmitter

Edit

Transmission operation is simpler as the timing does not have to be determined from the line state, nor is it bound to any fixed timing intervals. As soon as the sending system deposits a character in the shift register (after completion of the previous character), the UART generates a start bit, shifts the required number of data bits out to the line, generates and sends the parity bit (if used), and sends the stop bits. Since full-duplex operation requires characters to be sent and received at the same time, UARTs use two different shift registers for transmitted and received characters. High performance UARTs could contain a transmit FIFO (first in first out) buffer to allow a CPU or DMA controller to deposit multiple characters in a burst into the FIFO rather than have to deposit one character at a time into the shift register. Since transmission of a single or multiple characters may take a long time relative to CPU speeds, a UART maintains a flag showing busy status so that the host system knows if there is at least one character in the transmit buffer or shift register; «ready for next character(s)» may also be signaled with an interrupt.

Application

Edit

Transmitting and receiving UARTs must be set for the same bit speed, character length, parity, and stop bits for proper operation. The receiving UART may detect some mismatched settings and set a «framing error» flag bit for the host system; in exceptional cases, the receiving UART will produce an erratic stream of mutilated characters and transfer them to the host system.

Typical serial ports used with personal computers connected to modems use eight data bits, no parity, and one stop bit; for this configuration, the number of ASCII characters per second equals the bit rate divided by 10.

Some very low-cost home computers or embedded systems dispense with a UART and use the CPU to sample the state of an input port or directly manipulate an output port for data transmission. While very CPU-intensive (since the CPU timing is critical), the UART chip can thus be omitted, saving money and space. The technique is known as bit-banging.

History

Edit

Some early telegraph schemes used variable-length pulses (as in Morse code) and rotating clockwork mechanisms to transmit alphabetic characters. The first serial communication devices (with fixed-length pulses) were rotating mechanical switches (commutators). Various character codes using 5, 6, 7, or 8 data bits became common in teleprinters and later as computer peripherals. The teletypewriter made an excellent general-purpose I/O device for a small computer.

Gordon Bell of DEC designed the first UART, occupying an entire circuit board called a line unit, for the PDP series of computers beginning with the PDP-1.[6][7]
According to Bell, the main innovation of the UART was its use of sampling to convert the signal into the digital domain, allowing more reliable timing than previous circuits that used analog timing devices with manually adjusted potentiometers.[8] To reduce the cost of wiring, backplane and other components, these computers also pioneered flow control using XON and XOFF characters rather than hardware wires.

DEC condensed the line unit design into an early single-chip UART for their own use.[6] Western Digital developed this into the first widely available single-chip UART, the WD1402A, around 1971. This was an early example of a medium-scale integrated circuit. Another popular chip was the SCN2651 from the Signetics 2650 family.

An example of an early 1980s UART was the National Semiconductor 8250 used in the original IBM PC’s Asynchronous Communications Adapter card.[9] In the 1990s, newer UARTs were developed with on-chip buffers. This allowed higher transmission speed without data loss and without requiring such frequent attention from the computer. For example, the popular National Semiconductor 16550 has a 16-byte FIFO, and spawned many variants, including the 16C550, 16C650, 16C750, and 16C850.

Depending on the manufacturer, different terms are used to identify devices that perform the UART functions. Intel called their 8251 device a «Programmable Communication Interface». MOS Technology 6551 was known under the name «Asynchronous Communications Interface Adapter» (ACIA). The term «Serial Communications Interface» (SCI) was first used at Motorola around 1975 to refer to their start-stop asynchronous serial interface device, which others were calling a UART. Zilog manufactured a number of Serial Communication Controllers or SCCs.

Starting in the 2000s, most IBM PC compatible computers removed their external RS-232 COM ports and used USB ports that can send data faster. For users who still need RS-232 serial ports, external USB-to-UART bridges are now commonly used. They combine the hardware cables and a chip to do the USB and UART conversion. Cypress Semiconductor and FTDI are two of the significant commercial suppliers of these chips.[10] Although RS-232 ports are no longer available to users on the outside of most computers, many internal processors and microprocessors have UARTs built into their chips to give hardware designers the ability to interface with other chips or devices that use RS-232 or RS-485 for communication.

Special transceiver conditions

Edit

Overrun error

Edit

An overrun error occurs when the receiver cannot process the character that just came in before the next one arrives. Various devices have different amounts of buffer space to hold received characters. The CPU or DMA controller must service the UART in order to remove characters from the input buffer. If the CPU or DMA controller does not service the UART quickly enough and the buffer becomes full, an overrun error will occur, and incoming characters will be lost.

Underrun error

Edit

An underrun error occurs when the UART transmitter has completed sending a character and the transmit buffer is empty. In asynchronous modes this is treated as an indication that no data remains to be transmitted, rather than an error, since additional stop bits can be appended. This error indication is commonly found in USARTs, since an underrun is more serious in synchronous systems.

Framing error

Edit

A UART will detect a framing error when it does not see a «stop» bit at the expected «stop» bit time. As the «start» bit is used to identify the beginning of an incoming character, its timing is a reference for the remaining bits. If the data line is not in the expected state (high) when the «stop» bit is expected (according to the number of data and parity bits for which the UART is set), the UART will signal a framing error. A «break» condition on the line is also signaled as a framing error.

Parity error

Edit

A parity error occurs when the parity of the number of one-bits disagrees with that specified by the parity bit. Parity checking is often used for the detection of transmission errors. Use of a parity bit is optional, so this error will only occur if parity-checking has been enabled.

Break condition

Edit

A break condition occurs when the receiver input is at the «space» (logic low, i.e., ‘0’) level for longer than some duration of time, typically, for more than a character time. This is not necessarily an error, but appears to the receiver as a character of all zero-bits with a framing error.

The term «break» derives from current loop signaling, which was the traditional signaling used for teletypewriters. The «spacing» condition of a current loop line is indicated by no current flowing, and a very long period of no current flowing is often caused by a break or other fault in the line. Some equipment will deliberately transmit the «space» level for longer than a character as an attention signal. When signaling rates are mismatched, no meaningful characters can be sent, but a long «break» signal can be a useful way to get the attention of a mismatched receiver to do something (such as resetting itself). Computer systems can use the long «break» level as a request to change the signaling rate, to support dial-in access at multiple signaling rates. The DMX512 protocol uses the break condition to signal the start of a new packet.

UART models

Edit

A dual UART, or DUART, combines two UARTs into a single chip. Similarly, a quadruple UART or QUART, combines four UARTs into one package, such as the NXP 28L194. An octal UART or OCTART combines eight UARTs into one package, such as the Exar XR16L788 or the NXP SCC2698.

Model Description
WD1402A The first single-chip UART on general sale. Introduced about 1971. Compatible chips included the Fairchild TR1402A and the General Instruments AY-5-1013.[11]
Exar XR21V1410
Intersil 6402
CDP 1854 (RCA, now Intersil)
Zilog Z8440 Universal synchronous and asynchronous receiver-transmitter (USART). 2000 kbit/s. Async, Bisync, SDLC, HDLC, X.25. CRC. 4-byte RX buffer. 2-byte TX buffer. Provides signals needed by a third party DMA controller to perform DMA transfers.[12]
Z8530/Z85C30 This USART has a 3-byte receive buffer and a 1-byte transmit buffer. It has hardware to accelerate the processing of HDLC and SDLC. The CMOS version (Z85C30) provides signals to allow a third party DMA controller to perform DMA transfers. It can do asynchronous, byte level synchronous, and bit level synchronous communications.[13]
8250 Obsolete with 1-byte buffers. These UARTs’ maximum standard serial port speed is 9600 bits per second if the operating system has a 1 millisecond interrupt latency. 8250 UARTs were used in the IBM PC 5150 and IBM PC/XT, while the 16450 UART were used in IBM PC/AT-series computers. The 8251 has USART capability.
8251
Motorola 6850
6551
Rockwell 65C52
16450
82510 This UART allows asynchronous operation up to 288 kbit/s, with two independent four-byte FIFOs. It was produced by Intel at least from 1993 to 1996, and Innovastic Semiconductor has a 2011 Data Sheet for IA82510.
16550 This UART’s FIFO is broken, so it cannot safely run any faster than the 16450 UART. The 16550A and later versions fix this bug.
16550A This UART has 16-byte FIFO buffers. Its receive interrupt trigger levels can be set to 1, 4, 8, or 14 characters. Its maximum standard serial port speed if the operating system has a 1 millisecond interrupt latency is 128 kbit/s. Systems with lower interrupt latencies or with DMA controllers could handle higher baud rates. This chip can provide signals that are needed to allow a DMA controller to perform DMA transfers to and from the UART if the DMA mode this UART introduces is enabled.[14] It was introduced by National Semiconductor, which has been sold to Texas Instruments. National Semiconductor claimed that this UART could run at up to 1.5 Mbit/s.
16C552
16650 This UART was introduced by Startech Semiconductor which is now owned by Exar Corporation and is not related to Startech.com. Early versions have a broken FIFO buffer and therefore cannot safely run any faster than the 16450 UART.[15] Versions of this UART that were not broken have 32-character FIFO buffers and could function at standard serial port speeds up to 230.4 kbit/s if the operating system has a 1 millisecond interrupt latency. Current versions of this UART by Exar claim to be able to handle up to 1.5 Mbit/s. This UART introduces the Auto-RTS and Auto-CTS features in which the RTS# signal is controlled by the UART to signal the external device to stop transmitting when the UART’s buffer is full to or beyond a user-set trigger point and to stop transmitting to the device when the device drives the CTS# signal high (logic 0).
16750 64-byte buffers. This UART can handle a maximum standard serial port speed of 460.8 kbit/s if the maximum interrupt latency is 1 millisecond. This UART was introduced by Texas Instruments. TI claims that early models can run up to 1 Mbit/s, and later models in this series can run up to 3 Mbit/s.
16850 128-byte buffers. This UART can handle a maximum standard serial port speed of 921.6 kbit/s if the maximum interrupt latency is 1 millisecond. This UART was introduced by Exar Corporation. Exar claims that early versions can run up to 2 Mbit/s, and later versions can run up to 2.25 Mbit/s depending on the date of manufacture.
16C850
16950 128-byte buffers. This UART can handle a maximum standard serial port speed of 921.6 kbit/s if the maximum interrupt latency is 1 millisecond. This UART supports 9-bit characters in addition to the 5- to 8-bit characters that other UARTs support. This was introduced by Oxford Semiconductor, which is now owned by PLX Technology. Oxford/PLX claims that this UART can run up to 15 Mbit/s. PCI Express variants by Oxford/PLX are integrated with a first party bus mastering PCIe DMA controller. This DMA controller uses the UART’s DMA mode signals that were defined for the 16550. The DMA controller requires the CPU to set up each transaction and poll a status register after the transaction is started to determine if the transaction is done. Each DMA transaction can transfer between 1 and 128 bytes between a memory buffer and the UART. PCI Express variants can also allow the CPU to transfer data between itself and the UART with 8-, 16-, or 32-bit transfers when using programmed I/O.
16C950
16954 Quad-port version of the 16950/16C950. 128-byte buffers. This UART can handle a maximum standard serial port speed of 921.6 kbit/s if the maximum interrupt latency is 1 millisecond. This UART supports 9-bit characters in addition to the 5–8 bit characters that other UARTs support. This was introduced by Oxford Semiconductor, which is now owned by PLX Technology. Oxford/PLX claims that this UART can run up to 15 Mbit/s. PCI Express variants by Oxford/PLX are integrated with a first party bus mastering PCIe DMA controller. This DMA controller is controlled by the UART’s DMA mode signals that were defined for the 16550. The DMA controller requires the CPU to set up each transaction and poll a status register after the transaction is started to determine if the transaction is done. Each DMA transaction can transfer between 1 and 128 bytes between a memory buffer and the UART. PCI Express variants can also allow the CPU to transfer data between itself and the UART with 8-, 16-, or 32-bit transfers when using programmed I/O.
16C954
16C1550/16C1551 UART with 16-byte FIFO buffers. Up to 1.5 Mbit/s. The ST16C155X is not compatible with the industry standard 16550 and will not work with the standard serial port driver in Microsoft Windows.
16C2450 Dual UART with 1-byte FIFO buffers.
16C2550 Dual UART with 16-byte FIFO buffers. Pin-to-pin and functional compatible to 16C2450. Software compatible with INS8250 and NS16C550.
SCC2691 Currently produced by NXP, the 2691[5] is a single channel UART that also includes a programmable counter/timer. The 2691 has a single-byte transmitter holding register and a 4-byte receive FIFO. Maximum standard speed of the 2692 is 115.2 kbit/s.

The 28L91 is an upwardly compatible version of the 2691, featuring selectable 8- or 16-byte transmitter and receiver FIFOs, improved support for extended data rates, and faster bus timing characteristics, making the device more suitable for use with high performance microprocessors.

Both the 2691 and 28L91 may also be operated in TIA-422 and TIA-485 modes, and may also be programmed to support non-standard data rates. The devices are produced in PDIP-40, PLCC-44 and 44 pin QFP packages, and are readily adaptable to both Motorola and Intel buses. They have also been successfully adapted to the 65C02 and 65C816 buses. The 28L91 will operate on 3.3 or 5 volts.

SCC28L91
SCC2692 Currently produced by NXP, these devices are dual UARTs (DUART), consisting of two communications channels, associated control registers and one counter/timer. Each communication channel is independently programmable and supports independent transmit and receive data rates.

The 2692 has a single-byte transmitter holding register and a 4-byte receiver FIFO for each channel. Maximum standard speed of both of the 2692’s channels is 115.2 kbit/s.

The 26C92 is an upwardly compatible version of the 2692, with 8-byte transmitter and receiver FIFOs for improved performance during continuous bi-directional asynchronous transmission (CBAT) on both channels at the maximum standard speed of 230.4 kbit/s. The letter C in the 26C92 part number has nothing to do with the fabrication process; all NXP UARTs are CMOS devices.

The 28L92 is an upwardly compatible version of the 26C92, featuring selectable 8- or 16-byte transmitter and receiver FIFOs, improved support for extended data rates, and faster bus timing characteristics, making the device more suitable for use with high performance microprocessors.

The 2692, 26C92 and 28L92 may be operated in TIA-422 and TIA-485 modes, and may also be programmed to support non-standard data rates. The devices are produced in PDIP-40, PLCC-44 and 44 pin QFP packages, and are readily adaptable to both Motorola and Intel buses. They have also been successfully adapted to the 65C02 and 65C816 buses. The 28L92 will operate on 3.3 or 5 volts.

SC26C92
SC28L92
SCC28C94 Currently produced by NXP, the 28C94 quadruple UART (QUART) is functionally similar to a pair of SCC26C92 DUARTs mounted in a common package, with the addition of an arbitrated interrupt system for efficient processing during periods of intense channel activity. Some additional signals are present to support the interrupt management features and the auxiliary input/output pins are arranged differently than those of the 26C92. Otherwise, the programming model for the 28C94 is similar to that of the 26C92, requiring only minor code changes to fully utilize all features. The 28C94 supports a maximum standard speed of 230.4 kbit/s, is available in a PLCC-52 package, and is readily adaptable to both Motorola and Intel buses. It has also been successfully adapted to the 65C816 bus.
SCC2698B Currently produced by NXP, the 2698 octal UART (OCTART) is essentially four SCC2692 DUARTs in a single package. Specifications are the same as the SCC2692 (not the SCC26C92). Due to the lack of transmitter FIFOs and the small size of the receiver FIFOs, the 2698 can cause an interrupt «storm» if all channels are simultaneously engaged in continuous bi-directional communication. The device is produced in PDIP-64 and PLCC-84 packages, and is readily adaptable to both Motorola and Intel buses. The 2698 has also been successfully adapted to the 65C02 and 65C816 buses.
SCC28L198 Currently produced by NXP, the 28L198 OCTART is essentially an upscaled enhancement of the SCC28C94 QUART described above, with eight independent communications channels, as well as an arbitrated interrupt system for efficient processing during periods of intense channel activity. The 28L198 supports a maximum standard speed of 460.8 kbit/s, is available in PLCC-84 and LQFP-100 packages, and is readily adaptable to both Motorola and Intel buses. The 28L198 will operate on 3.3 or 5 volts.
Z85230 Synchronous/Asynchronous modes (USART),[16] 2 ports. Provides signals needed by a third party DMA controller needed to perform DMA transfers. 4-byte buffer to send, 8-byte buffer to receive per channel. SDLC/HDLC modes. 5 Mbit/s in synchronous mode.
Hayes ESP 1 KB buffers, 921.6 kbit/s, 8-ports.[17]
Exar XR17V352, XR17V354 and XR17V358 Dual, Quad and Octal PCI Express UARTs with 16550 compatible register Set, 256-byte TX and RX FIFOs, Programmable TX and RX Trigger Levels, TX/RX FIFO Level Counters, Fractional baud rate generator, Automatic RTS/CTS or DTR/DSR hardware flow control with programmable hysteresis, Automatic Xon/Xoff software flow control, RS-485 half duplex direction control output with programmable turn-around delay, Multi-drop with Auto Address Detection, Infrared (IrDA 1.1) data encoder/decoder. They are specified up to 25 Mbit/s. DataSheets are dated from 2012.
Exar XR17D152, XR17D154 and XR17D158 Dual, Quad and Octal PCI bus UARTs with 16C550 Compatible 5G Register Set, 64-byte Transmit and Receive FIFOs, Transmit and Receive FIFO Level Counters, Programmable TX and RX FIFO Trigger Level, Automatic RTS/CTS or DTR/DSR Flow Control, Automatic Xon/Xoff Software Flow Control, RS485 HDX Control Output with Selectable Turn-around Delay, Infrared (IrDA 1.0) Data Encoder/Decoder, Programmable Data Rate with Prescaler, Up to 6.25 Mbit/s Serial Data Rate. DataSheets are dated from 2004 and 2005.
Exar XR17C152, XR17C154 and XR17C158 Dual, Quad and Octal 5 V PCI bus UARTs with 16C550 Compatible Registers, 64-byte Transmit and Receive FIFOs, Transmit and Receive FIFO Level Counters, Automatic RTS/CTS or DTR/DSR Flow Control, Automatic Xon/Xoff Software Flow Control, RS485 Half-duplex Control with Selectable Delay, Infrared (IrDA 1.0) Data Encoder/Decoder, Programmable Data Rate with Prescaler, Up to 6.25 Mbit/s Serial Data Rate. DataSheets are dated from 2004 and 2005.
Exar XR17V252, XR17V254 and XR17V258 Dual, Quad and Octal 66 MHz PCI bus UARTs with Power Management Support, 16C550 compatible register set, 64-byte TX and RX FIFOs with level counters and programmable trigger levels, Fractional baud rate generator, Automatic RTS/CTS or DTR/DSR hardware flow control with programmable hysteresis, Automatic Xon/Xoff software flow control, RS-485 half duplex direction control output with selectable turn-around delay, Infrared (IrDA 1.0) data encoder/decoder, Programmable data rate with prescaler. DataSheets are dated from 2008 and 2010.

UART in modems

Edit

Modems for personal computers that plug into a motherboard slot must also include the UART function on the card. The original 8250 UART chip shipped with the IBM personal computer had a one character buffer for the receiver and the transmitter each, which meant that communications software performed poorly at speeds above 9600 bit/s, especially if operating under a multitasking system or if handling interrupts from disk controllers. High-speed modems used UARTs that were compatible with the original chip but which included additional FIFO buffers, giving software additional time to respond to incoming data.

A look at the performance requirements at high bit rates shows why the 16-, 32-, 64- or 128-byte FIFO is a necessity. The Microsoft specification for a DOS system requires that interrupts not be disabled for more than 1 millisecond at a time. Some hard disk drives and video controllers violate this specification. 9600 bit/s will deliver a character approximately every millisecond, so a 1-byte FIFO should be sufficient at this rate on a DOS system which meets the maximum interrupt disable timing. Rates above this may receive a new character before the old one has been fetched, and thus the old character will be lost. This is referred to as an overrun error and results in one or more lost characters.

A 16-byte FIFO allows up to 16 characters to be received before the computer has to service the interrupt. This increases the maximum bit rate the computer can process reliably from 9600 to 153,000 bit/s if it has a 1 millisecond interrupt dead time. A 32-byte FIFO increases the maximum rate to over 300,000 bit/s. A second benefit to having a FIFO is that the computer only has to service about 8 to 12% as many interrupts, allowing more CPU time for updating the screen, or doing other chores. Thus the computer’s responses will improve as well.

Emulation

Edit

Since the UART’s communication protocol is simple, it can be emulated by bit banging GPIO pins in software on modern microcontrollers (e.g. Arduino[18] or Teensy[19]), in a hardware description language on FPGAs[20] (e.g. Verilog[21]), or on programmable I/O state machines (e.g. Raspberry Pi Pico’s PIO[22][23] or NXP’s FlexIO[24]).

See also

Edit

  • Automatic baud rate detection
  • Baud
  • Bit rate
  • Comparison of synchronous and asynchronous signalling
  • Crystal oscillator frequencies
  • MIDI
  • Synchronous serial communication

References

Edit

  1. ^ «RS-232 vs. TTL Serial Communication — SparkFun Electronics». www.sparkfun.com.
  2. ^ Adam Osborne, An Introduction to Microcomputers Volume 1: Basic Concepts, Osborne-McGraw Hill Berkeley California USA, 1980 ISBN 0-931988-34-9 pp. 116–126
  3. ^ Texas Instrument (2021-03-01). «Universal asynchronous receiver/transmitter (UART)» (PDF). ti.com. p. 6, «2.3.1 Voltage Translation With UART». Retrieved 25 Aug 2023.
  4. ^ «Determining Clock Accuracy Requirements for UART Communications» (PDF). an2141. Maxim Integrated. 2003-08-07. Retrieved 1 November 2021.
  5. ^ a b «Universal asynchronous receiver/transmitter (UART)» (PDF). SCC2691. Philips NXP. 2006-08-04. p. 14. Retrieved 1 November 2021.
  6. ^ a b C. Gordon Bell, J. Craig Mudge, John E. McNamara, Computer Engineering: A DEC View of Hardware Systems Design, Digital Press, 12 May 2014, ISBN 1483221105, p. 73
  7. ^ Allison, David. «Curator, Division of Information Technology and Society, National Museum of American History, Smithsonian Institution». Smithsonian Institution Oral and Video Histories. Retrieved 14 June 2015.
  8. ^ Oral History of Gordon Bell, 2005, accessed 2015-08-19
  9. ^ Technical Reference 6025008 (PDF). Personal Computer Hardware Reference Library. IBM. August 1981. pp. 2–123.
  10. ^ «FTDI Products». www.ftdichip.com. Retrieved 22 March 2018.
  11. ^ Interfacing with a PDP-11/05: the UART, blinkenbone.com, accessed 2015-08-19
  12. ^ «Zilog Product specification Z8440/1/2/4, Z84C40/1/2/3/4. Serial input/output controller» (PDF). 090529 zilog.com
  13. ^ «Zilog Document Download» (PDF). www.zilog.com. Retrieved 22 March 2018.
  14. ^ «FAQ: The 16550A UART & TurboCom drivers 1994». Retrieved January 16, 2016.
  15. ^ T’so, Theodore Y. (January 23, 1999). «Re: Serial communication with the 16650». The Mail Archive. Retrieved June 2, 2013.
  16. ^ Zilog. «SCC/ESCC User Manual UM010901-0601» (PDF). leocom.kr. Retrieved 13 May 2023.
  17. ^ bill.herrin.us — Hayes ESP 8-port Enhanced Serial Port Manual, 2004-03-02
  18. ^ «SoftwareSerial Library | Arduino Documentation». Arduino. 2022-10-05. Archived from the original on 2023-06-01. Retrieved 2023-06-10.
  19. ^ Stoffregen, Paul. «AltSoftSerial Library, for an extra serial port». www.pjrc.com. Archived from the original on 2023-03-22. Retrieved 2023-06-10.
  20. ^ Williams, Al (2018-09-06). «How To Add UART To Your FPGA Projects». Hackaday. Archived from the original on 2023-02-01. Retrieved 2023-06-10.
  21. ^ «Open Source Documented Verilog UART». GitHub. 2015-12-12. Retrieved 2023-06-10.
  22. ^ «Raspberry Pi Pico Serial Communication Example(MicroPython)». Electrocredible. 2023-01-24. Archived from the original on 2023-06-03. Retrieved 2023-06-10.
  23. ^ McKinney, Josh (2022-11-05). «Programmable IO (PIO) for MIDI with the Rasberry Pi Pico». joshka.net. Archived from the original on 2023-04-04. Retrieved 2023-06-10.
  24. ^ Krenek, Pavel (2015). «Emulating UART by Using FlexIO» (PDF). NXP. Archived (PDF) from the original on 2022-10-05. Retrieved 2023-06-10.

Further reading

Edit

  • Serial Port Complete: COM Ports, USB Virtual COM Ports, and Ports for Embedded Systems; 2nd Edition; Jan Axelson; Lakeview Research; 380 pages; 2007; ISBN 978-1-931-44806-2.
  • Serial Port Complete: Programming and Circuits for RS-232 and RS-485 Links and Networks; 1st Edition; Jan Axelson; Lakeview Research; 306 pages; 1998; ISBN 978-0-965-08192-4.
  • Serial port and Microcontrollers: Principles, Circuits, and Source Codes; 1st Edition; Grzegorz Niemirowski; CreateSpace; 414 pages; 2013; ISBN 978-1-481-90897-9.
  • Serial Programming (Wikibook).

External links

Edit

  • FreeBSD Serial and UART Tutorial, includes standard signal definitions, history of UART ICs, and pinout for commonly used DB25 connector.
  • UART Tutorial for Robotics, contains many practical examples.

Другие наши интересноые статьи:

  • Что такое ssh доступ на роутере
  • Что такое txbf mu mimo в роутере что это
  • Что такое ssh в роутере и для чего он нужен
  • Что такое txbf mu mimo в роутере tp link
  • Что такое pin code на роутере

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии