UART и с чем его едят / Хабр
После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.
Роутер превращается в компьютер, если к нему по 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 вольт. Они были введены специально для работы СОМ-порта.
Приём сигнала по RS-232 (взято из книги М.Гук «Аппаратные интерфейсы ПК»)
Такая большая амплитуда рабочих напряжений, целых 24 вольта, нужна в первую очередь для помехоустойчивости линий связи. По стандарту, длина кабеля, по которому у нас бегают данные, может быть 15 м. Хотя на практике люди умудрялись заставлять его работать даже на 25 м. Электрические параметры RS-232 – это главная характеристика, которая отличает его от других протоколов семейства UART.
Следующие характеристики – формат посылки и скорость передачи данных – полностью применимы ко всем видам UART и обеспечивают их совместимость через несложные схемы сопряжения.
Стандартная посылка занимает 10 бит. Но правило это распространяется только на стандартные настройки СОМ-порта. В принципе, его можно перенастроить так, чтобы он даже интерфейс One-Wire понимал. В режиме простоя, когда по линии ничего не передается, она находится в состоянии логической единицы, или -12 вольт. Начало передачи обозначают передачей стартового бита, который всегда равен нулю. Затем идет передача восьми бит данных. Завершает посылку бит четности и стоповый бит. Бит четности осуществляет проверку переданных данных. Стоповый бит говорит нам, что пересылка данных завершена. Надо отметить, что STOP-бит может занимать 1, 1.5, и 2 бита. Не стоит думать, что это дробные биты, это число говорит только о его длительности. Стоповый бит, как и стартовый, равен нулю.
Сигнал 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 есть практически везде.
Устройства, которые имеют на своём борту 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. Какой из них что, легко устанавливается методом научного тыка (спалить интерфейс очень проблематично).
Собираем преобразователь
Чтобы подключить роутер к компу, необходимо сопрячь интерфейсы RS-232 с UARTом роутера. В принципе, можно подключить к USB, используя указанную выше микросхему FT232RL, – что я и сделал при первой проверке роутера. Но эта микросхема – в достаточно сложном для пайки корпусе, посему мы поговорим о более простых решениях. А именно – микросхеме MAX232. Если ты собираешься питаться от роутера, то там, скорее всего, будет 3,3 вольта, поэтому лучше использовать MAX3232, которая обычно стоит в КПК (схему распайки нетрудно найти в инете). Но в моем роутере присутствовало питание +5 вольт на входе, а указанных микросхем у меня великое множество, и я не стал заморачиваться. Для сборки нам потребуются конденсаторы 0,1 мкФ (4 штуки) и сама микросхема. Запаиваем все по традиционной схеме, и начинаем эксперименты.
Исходники для сборки
На выход я сразу повесил 9-пиновый разъем типа «папа», чтобы можно было легко подключить нуль-модемный кабель.
Если ты помнишь, во времена DOSа такими кабелями делали сетку из двух компов и резались в «Дюкнюкем». Провод для наших целей собрать несложно. Правда, получится не полный нуль-модем и через него особо не поиграешь, но рулить точкой доступа будет самое то! Тебе понадобятся два 9-пиновых разъема типа «мама», корпуса к ним и провод, например, от старой мышки или клавы (главное, чтобы в нем было три провода). Сначала соединяем земли ¬- это пятый контакт разъемов; просто берем любой провод и с обоих сторон припаиваем к 5-му контакту. А вот с RX и TX надо поступить хитрее. С одного конца провода запаиваем на 3-й контакт, а с другого – на 2-й. Аналогично с третьим проводом, только с одного конца запаиваем на 2-й контакт, с другого – на 3-й. Суть в том, что TX должен передавать в RX. Прячем запаянные разъемы в корпус — и готов нуль-модемный кабель!
Распаянные иголки на плате роутера.
Для удобства монтажа в материнку роутера я впаял штырьковый разъем, а в монтажку с MAX232 – обратный разъем и вставил платку, как в слот.
Собраная плата
Теперь надо запитать микросхему преобразователя. Общий провод у нас присутствует уже прямо в разъеме на мамке роутера. А вот + 5 вольт находится прямо у входа питания роутера, в месте, где подключается адаптер. Точку нахождения 5 вольт определяем вольтметром, измеряя разные узлы относительно земли роутера.
Подключаем питание. Включаем и начинаем наши злостные эксперименты.
Прожигаем отверстие для вывода проводов
Распаянный СОМ-порт
Всё в сборе. Обратите внимание, что красный провод питания идёт к разъёму адаптера роутера. Узелок внутри сделан, для того чтобы рывком на оторвать припаянные провода.
Настройка терминала
Нам нужно настроить терминальную программу. В Винде все достаточно просто: запускаем 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 на роутере, периодически выдергивая из него питание. Если все сделано правильно, то при подаче питания ты увидишь лог загрузки роутера. Принимай поздравления, теперь у тебя полный аппаратный рут, так, будто ты сидишь за монитором с клавой роутера.
Лог загрузки роутера в программе minicom
Автономное плаванье
Согласись, делать через терминальную программу то же самое, что удобнее сделать через SSH – не айс. Мне хотелось превратить роутер в автономный Linux-компьютер, со своей хитрой архитектурой. Для этого нужно, чтобы данные с клавиатуры передавались по UART, и по нему же выводились на монитор. Паять и разрабатывать устройство было лениво. Тогда-то и пришла идея заюзать для этих целей пылящийся без дела КПК. По сути, наладонник будет исполнять роль контроллера клавиатуры и дисплея, ну и служить сопряжением интерфейсов.
Сначала я попробовал древнейший Palm m100. Но, видимо, у него очень маленькая буферная память, и от количества данных, которые идут с роутера, ему становилось плохо. Я взял другой — промышленный КПК, с нормальным СОМ-портом и терминалкой. Подключил, вставил в док и, в результате, получил небольшой линукс-компьютер. В принципе, вместо дорогущего промышленного КПК подойдет большинство наладонников, работающих под операционкой WinCE, главное – найти подходящий терминальный софт.
Линукс компьютер 🙂
Итоги
Итак, я показал небольшой пример использования UART. Если ты вкуришь в этот протокол, то поверь, станешь просто повелителем различных железок. Есть он практически везде, и через него можно сопрягать, казалось бы, совершенно разные вещи. К примеру, к тому же роутеру при небольших настройках подключается мобильный телефон по юарту, – и раздает с него интернет. В общем, применений куча. Не бойся экспериментировать, самообразовываться и реализовать свои идеи.
Этот пост является отредактированной для хабра версией моей статьи в Хакере № 05/09 «Главный инструмент фрикера».
Литература:
1. Михаил Гук «Аппаратные интерфейсы ПК» — просто студенческая библия по персоналке.
3. easyelectronics.ru/tag/rs232
Основные сведения о протоколе UART
Основные сведения о протоколе UART | Rohde & SchwarzLogin or register to gain full access to the Knowledge+ platform!
I want to create an account
Register
or
I already have an account
Login
R&S®Essentials | Digital oscilloscope and probe fundamentals
What is UART?
UART stands for universal asynchronous receiver / transmitter and defines a protocol, or set of rules, for exchanging serial data between two devices. UART is very simple and only uses two wires between transmitter and receiver to transmit and receive in both directions. Both ends also have a ground connection. Communication in UART can be simplex (data is sent in one direction only), half-duplex (each side speaks but only one at a time), or full-duplex (both sides can transmit simultaneously). Data in UART is transmitted in the form of frames. The format and content of these frames is briefly described and explained.
Данные в UART передаются в виде кадров
Где используется протокол UART?
UART был одним из первых последовательных протоколов. Когда-то повсеместно распространенные последовательные порты почти всегда работали по протоколу UART, и устройства, использующие интерфейсы RS-232, внешние модемы и т. д., являются типичными примерами использования UART.
В последние годы популярность UART снизилась: такие протоколы, как SPI и I2C, заменяют UART на уровне микросхем и компонентов. Вместо обмена данными через последовательный порт в большинстве современных компьютеров и периферийных устройств теперь используются такие технологии, как Ethernet и USB. Однако UART по-прежнему используется для приложений с более низкой скоростью и пропускной способностью, поскольку он очень прост, дешев и легок в реализации.
Тактирование и синхронизация протоколов UART
Одним из больших преимуществ UART является его асинхронность — передатчик и приемник не используют общий тактовый сигнал. Хотя это значительно упрощает протокол, данное свойство предъявляет определенные требования к передатчику и приемнику. Поскольку у них нет общего тактового сигнала, оба конца должны передавать с одинаковой заранее заданной скоростью, чтобы иметь одинаковую синхронизацию битов. Наиболее распространенные скорости передачи данных UART, используемые сегодня: 4800, 9600, 19,2 кбит/с, 57,6 кбит/с и 115,2 кбит/с. Помимо одинаковой скорости передачи данных, обе стороны UART-соединения также должны использовать одинаковую структуру и параметры кадра. Лучший способ получить представление о протоколе — посмотреть на кадр UART.
Кадры протокола UART содержат стартовые и стоповые биты, биты данных и необязательный бит четности, который будет описан ниже.
Как и в большинстве цифровых систем, «высокий» уровень напряжения используется для обозначения логической «1», а «низкий» уровень напряжения используется для обозначения логического «0». Поскольку в протоколе UART не определены конкретные напряжения или диапазоны напряжений для этих уровней, иногда высокий уровень также называют «Mark» (отметка), а низкий — «Space» (пробел). Обратите внимание, что в состоянии ожидания (когда данные не передаются) в линии поддерживается высокий уровень. Это позволяет легко обнаружить поврежденную линию или передатчик.
Стартовые и стоповые биты
Поскольку UART является асинхронным протоколом, передатчик должен сигнализировать о поступлении битов данных. Это делается с помощью стартового бита. Стартовый бит — это переход из состояния ожидания высокого уровня в состояние низкого уровня, за которым сразу же следуют пользовательские биты данных.
После того, как биты данных закончились, стоповый бит указывает на окончание пользовательских данных. Стоповый бит — это либо переход обратно в состояние высокого уровня или состояние ожидания, либо сохранение этого состояния в течение дополнительного битового интервала. Второй (необязательный) стоповый бит может быть настроен, как правило, на то, чтобы дать приемнику время подготовиться к следующему кадру, но на практике это используется редко.
Биты данных
Биты данных являются пользовательскими данными или «полезными» битами и идут сразу после стартового бита. Может быть от 5 до 9 битов пользовательских данных, хотя чаще всего используется 7 или 8 битов. Эти биты данных обычно передаются в формате с первым младшим значащим битом.
Пример:
Если мы хотим передать заглавную букву «S» в 7-битном коде ASCII, битовая последовательность будет выглядеть как 1 0 1 0 0 1 1. Сначала мы меняем порядок битов, чтобы организовать перед передачей формат с первым младшим значащим битом, то есть 1 1 0 0 1 0 1. После передачи последнего бита данных для завершения кадра используется стоповый бит, и линия возвращается в состояние ожидания.
- 7-битный код ASCII ‘S’ (0x52) = 1 0 1 0 0 1 1
- Порядок LSB = 1 1 0 0 1 0 1
Стартовые и стоповые биты
Биты данных
Бит четности
Кадр UART может также содержать дополнительный бит четности, который можно использовать для обнаружения ошибок. Этот бит вставляется между последним битом данных и стоповым битом. Значение бита четности зависит от типа используемого контроля четности (на четность или нечетность):
- При контроле на четность этот бит устанавливается таким образом, чтобы общее количество единиц в кадре было четным.
- При контроле на нечетность этот бит устанавливается таким образом, чтобы общее количество единиц в кадре было нечетным.
Пример:
Заглавная «S» (1 0 1 0 0 1 1) содержит три нуля и 4 единицы. При использовании контроля четности бит четности равен нулю, потому что кадр уже содержит четное количество единиц. При использовании контроля нечетности бит четности должен быть равен единице, чтобы кадр имел нечетное количество единиц.
Бит четности способен обнаруживать только один измененный (инвертированный) бит. Если инвертируется более одного бита, невозможно надежно обнаружить их с помощью единственного бита четности.
Пример бита четности
Посмотрите наше видео «Основные сведения о протоколе UART», чтобы узнать больше
В этом видеоролике приводится техническое описание последовательного протокола UART (универсальный асинхронный приёмопередатчик), включая описание структуры кадра и значения каждого бита кадра.
Смотреть видео
Заключение
- UART означает универсальный асинхронный приёмопередатчик и представляет собой простой двухпроводной протокол для обмена последовательными данными.
- Асинхронность означает отсутствие общего тактового сигнала, поэтому для работы UART необходимо настроить одинаковую скорость передачи данных или битовую скорость на обеих сторонах соединения.
- Стартовые и стоповые биты используются, чтобы указать, где начинаются и заканчиваются пользовательские данные, или для «кадрирования» данных.
- Необязательный бит четности может использоваться для обнаружения однобитовых ошибок.
- UART по-прежнему является широко используемым протоколом последовательной передачи данных, но в последние годы был заменен в некоторых областях применения такими технологиями, как SPI, I2C, USB и Ethernet.
У вас есть вопросы об UART или других последовательных протоколах? Наши специалисты вам помогут.
Свяжитесь с нами
Understanding basic oscilloscope operation
Learn more
Understanding passive probes
Learn more
Understanding probe compensation
Learn more
Understanding serial protocols
Learn more
Understanding EMI debugging with oscilloscopes
Learn more
Understanding bode plots
Learn more
- {{{login}}}
{{{flyout}}}
{{! ]]> }}Что такое UART?
Перейти к содержимому UART (RS-232, последовательный порт, COM-порт)Этот тип функциональности упоминается под разными названиями: последовательный порт, интерфейс RS-232, COM-порт, но на самом деле правильное название — UART (универсальный асинхронный приемник-передатчик) . UART — это один из самых простых способов связи с вашей ПЛИС. Его можно использовать для отправки команд с компьютера на ПЛИС и наоборот.
UART — это интерфейс, который обычно отправляет байт за раз по одному проводу. Он не пересылает данные по часам, поэтому он называется 9.0007 асинхронный в отличие от синхронного. UART могут работать либо в полудуплексном режиме (два передатчика совместно используют линию), либо в дуплексном режиме (два передатчика, каждый на своей линии). У UART есть несколько параметров, которые могут быть установлены пользователем. Это:
Скорость передачи (9600, 19200, 115200, другие) Количество битов данных (7, 8) Бит четности (вкл., выкл.) Стоповые биты (0, 1, 2) Управление потоком (нет, включено, аппаратно)
Эти настройки должны быть одинаковыми на обеих сторонах интерфейса (приемник и передатчик) для правильной работы связи. При неправильных настройках на экране могут появляться странные и необычные символы. Рассмотрим каждую из этих настроек по отдельности.
Скорость передачи — это скорость, с которой передаются последовательные данные. 9600 бод означает 9600 бит в секунду. Число битов данных почти всегда равно восьми. Бит четности может быть добавлен после отправки данных. Четность всегда вычисляется путем выполнения операции XOR для всех битов данных. А Стоповый бит всегда установлен на 1, и может быть 0, 1 или 2 стоповых бита. Flow Control обычно не используется в современных приложениях и, скорее всего, будет иметь значение None.
Как упоминалось ранее, часы не отправляются вместе с данными. В любом интерфейсе, который не имеет часов, данные должны быть сэмплированы, чтобы восстановить их правильно. Его необходимо выбирать как минимум в восемь раз быстрее, чем скорость битов данных. Это означает, что для UART со скоростью 115200 бод данные должны быть запрошены не менее 9 раз. 21,6 кГц (115200 бод * 8). Можно использовать более быстрые часы дискретизации.
Нажмите здесь, чтобы увидеть готовый UART в VHDL и Verilog!
Уловка для отладки UART
Часто при отладке UART трудно понять, не работает ли последовательный порт вашего компьютера или это ваш код FPGA. Вот хитрость: соедините 9-контактный кабель и перемычки 2 и 3 вместе. Вы можете использовать скрепку или что-то, что у вас есть под рукой. Контакты 2 и 3 — это TX и RX. Если вы соедините их вместе, любая команда, которую вы отправляете с компьютера, будет получена компьютером. Вы создали последовательную петлю!
Откройте программу терминала, попробуйте подключиться к последовательному кабелю. Нажмите любую клавишу на клавиатуре. Скорость передачи и прочее не имеют значения, потому что это петля. Если вы видите, что отправленный вами символ получен на терминале, ваш последовательный кабель работает! Если нет, у вас проблема с кабелем или последовательной программой. Мне повезло с Tera Term в прошлом, и я рекомендую это. Если у вас возникли проблемы с последовательным кабелем, попробуйте этот кабель USB-RS-232 на Amazon. Я использовал его, и он отлично работает с Windows.
ПЛИС-101
Рассел2022-06-30T19:42:09+00:00Перейти к началу
последовательный порт – контроллер UART или контроллер RS232? Является ли UART общим словом?
Список литературы:
- Последовательная связь RS-232 и TTL — SparkFun Electronics
- связь – USART, UART, RS232, USB, SPI, I2C, TTL и т.д. что это все такое и как они связаны друг с другом? – Обмен стеками электротехники http://goo.gl/0q6sIV
- Последовательное программирование/Типичная аппаратная конфигурация RS232 — Викиучебники, открытые книги для открытого мира http://goo.gl/uTknU6
Серийный номер — это собирательное слово для всего, что является «мультиплексированием с временным разделением», если использовать дорогой термин. Это означает, что данные отправляются с разбросом во времени, чаще всего один бит за другим. Все протоколы, которые вы называете, являются последовательными протоколами.
UART , для универсального асинхронного приемника-передатчика, является одним из наиболее часто используемых последовательных протоколов. Он почти такой же старый, как и я, и очень простой. Большинство контроллеров имеют на борту аппаратный UART. Он использует одну линию данных для передачи и одну для приема данных. Чаще всего передаются 8-битные данные, следующим образом: 1 стартовый бит, низкий уровень, 8 бит данных, 1 стоповый бит, высокий уровень. Стартовый бит низкого уровня и стоповый бит высокого уровня означают, что для начала связи всегда существует переход от высокого к низкому. Вот что описывает UART. Нет уровня напряжения, поэтому вы можете получить его на уровне 3,3 В или 5 В, в зависимости от того, что использует ваш микроконтроллер. Обратите внимание, что микроконтроллеры, которые хотят обмениваться данными через UART, должны согласовать скорость передачи, битрейт, поскольку для синхронизации у них есть только задний фронт стартового бита. Это называется асинхронной связью.
Для связи на большие расстояния (не обязательно сотни метров) UART 5 В не очень надежен, поэтому он преобразуется в более высокое напряжение, обычно +12 В для «0» и -12 В для «0». “1”. Формат данных остается прежним. Тогда у вас есть RS-232 (которую вы на самом деле должны называть EIA-232, но никто так не делает.)
Важно : RS-232 против последовательной связи TTL — SparkFun Electronics http://goo.gl/0IFYTl
Зависимость от времени является одним из больших недостатков UART, и решение USART , для универсального синхронного/асинхронного приемника-передатчика. Это может сделать UART, а также синхронный протокол. В синхронном режиме передаются не только данные, но и часы. С каждым битом тактовый импульс сообщает приемнику, что он должен зафиксировать этот бит. Синхронные протоколы нуждаются либо в более высокой пропускной способности, как в случае манчестерского кодирования, либо в дополнительном проводе для часов, как SPI и I2C.
Последовательное программирование/Типичная аппаратная конфигурация RS232 — Викиучебники, открытые книги для открытого мира http://goo.gl/uTknU6
RS232 +-----------+ +------------+ +-----------+ +------- ----+ Интерфейс | Линия | | | | Интерфейс | | | -----------+ Драйвер / +---+ UART +---+ Логика +---+ ЦП | | Приемник | | | | | | | +-----------+ +-----+-----+ +-----+-----+ +---------- -+ | | | | +-----+-----+ | | Скорость передачи данных | | | Генератор +---------+ | | +-----------+
UART (универсальный асинхронный приемник-передатчик) является сердцем последовательного оборудования. Это микросхема или часть микросхемы, предназначенная для преобразования параллельных данных в последовательные. УАПП RS-232 также обычно добавляют необходимые стартовые/стоповые биты и биты четности при передаче и декодируют эту информацию при приеме.
UART обычно полностью работает от компьютерного логического напряжения. Напряжение ввода/вывода последовательных данных является логическим напряжением компьютера, а не напряжением последовательной линии. Они оставляют фактический линейный интерфейс конкретному драйверу/приемнику линии. Этот драйвер/приемник линии не обязательно должен быть драйвером/приемником линии RS-232, но может, например. также быть дифференциальным драйвером/приемником RS-422. Это, а также тот факт, что скорость передачи, четность, количество стоповых битов, количество битов данных программируются, являются причиной того, что UART называют универсальными. Различие между UART и линейным драйвером/приемником стирается, если они оба помещены в один и тот же чип. Такие микросхемы обычно также продаются под маркой «UART».
UARTназываются асинхронными, потому что они не используют специальный тактовый сигнал для синхронизации с удаленной стороной. Вместо этого они используют стартовые/стоповые биты для идентификации битов данных в последовательном потоке.
Благодаря UART остальное оборудование, а также программное приложение могут обрабатывать обычные байты для хранения данных связи. Задача UART состоит в том, чтобы разделить байт на серию последовательных битов при отправке и собрать серию битов в байт при приеме. UART обычно содержат восьмибитные буферы приемника и передачи. Из которых не все биты могут использоваться, если, например. используется 7-битная передача. Принятые последовательные данные предоставляются параллельно в буфер приемника, данные для отправки записываются параллельно в буфер передачи. В зависимости от UART буферы могут иметь глубину всего один байт или несколько байтов (в диапазоне 15 или 16 байтов). Чем меньше глубина буферов, тем более точной должна быть связь с ЦП. Например. если буфер приемника имеет глубину всего один байт, а данные извлекаются недостаточно быстро, следующие полученные данные могут перезаписать ранее полученные данные в буфере, и ранее полученные данные будут потеряны.
Из-за того, что синхронизация последовательного интерфейса важна, UART обычно подключаются к генератору скорости передачи, либо внутреннему в микросхеме UART, либо внешнему.
SPI (последовательный периферийный интерфейс) — еще один очень простой последовательный протокол. Ведущий посылает тактовый сигнал, и при каждом тактовом импульсе он сдвигает один бит к ведомому и один бит к исходному, поступающему от ведомого. Таким образом, имена сигналов: SCK для часов, MOSI для Master Out Slave In и MISO для Master In Slave Out. Используя сигналы SS (Slave Select), ведущий может управлять более чем одним ведомым устройством на шине. Существует два способа подключения нескольких ведомых устройств к одному ведущему, один из которых упомянут выше, т. е. с использованием выбора ведомого устройства, а другой — последовательное подключение, при котором используется меньше аппаратных контактов (линий выбора), но программное обеспечение усложняется.
I2C (Inter-Integrated Circuit, произносится как «I в квадрате C») также является синхронным протоколом, и это первый, который мы видим, в котором есть «интеллектуальность»; другие тупо переставляли биты туда-сюда, вот и все. I2C использует только 2 провода, один для часов (SCL) и один для данных (SDA). Это означает, что ведущее и ведомое устройства отправляют данные по одному и тому же проводу, опять же под управлением ведущего устройства, создающего тактовый сигнал. I2C не использует отдельные ведомые устройства для выбора конкретного устройства, но имеет адресацию. Первый байт, отправленный мастером, содержит 7-битный адрес (так что вы можете использовать 127 устройств на шине) и бит чтения/записи, указывающий, будут ли следующие байты также поступать от мастера или должны поступать от раб. После каждого байта получатель должен отправить «0», чтобы подтвердить прием байта, который мастер фиксирует с помощью 9.й тактовый импульс. Если мастер хочет записать байт, тот же процесс повторяется: мастер помещает бит за битом на шину и каждый раз подает тактовый импульс, сигнализирующий, что данные готовы к чтению. Если мастер хочет получить данные, он генерирует только тактовые импульсы. Ведомый должен позаботиться о том, чтобы следующий бит был готов, когда дан тактовый импульс. Этот протокол запатентован NXP (ранее Phillips) для снижения стоимости лицензирования, Atmel использует слово TWI (2-проводной интерфейс), которое точно такое же, как I2C, поэтому любое устройство AVR не будет иметь I2C, но будет иметь TWI.
Два или более сигнала на одном и том же проводе могут вызвать конфликты, и у вас возникнут проблемы, если одно устройство отправит «1», а другое — «0». Поэтому шина соединена по схеме ИЛИ: два резистора подтягивают шину к высокому уровню, а устройства посылают только низкие уровни. Если они хотят отправить высокий уровень, они просто освобождают шину.
TTL (транзисторно-транзисторная логика) не является протоколом. Это более старая технология для цифровой логики, но это название часто используется для обозначения напряжения питания 5 В, часто неправильно ссылаясь на то, что следует называть UART.