Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Протокол передачи данных UART - MBS Electronics

Универсальный асинхронный приёмопередатчик

Предисловие

Современная цифровая электроника — это всегда соединения между цепями (процессорами, контроллерами и т.д.) для создания симбиотической системы. Для того, чтобы отдельные микросхемы могли бы «понимать» друг друга, они должны разделять некий общий протокол связи. За годы существования цифровой техники было разработано множество протоколов. В целом, их все можно разделить на две большие группы — параллельные и последовательные.

Параллельный или последовательный?

Параллельные интерфейсы передают одновременно (параллельно) несколько бит информации (отсюда, собственно и их название). Для передачи данных такие интерфейсы требуют наличия шин, состоящих из 8, 16 или более проводников.

Схема параллельного 8-разрядного интерфейса. Передача данных управляется тактирующим сигналом CLK. Байт данных передается по каждому импульсу CLK . Используется 10 проводов.

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

Пример последовательного интерфейса, передающего один бит в течение каждого тактового импульса CLK. Требуется всего 2 провода.

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



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

Асинхронный последовательный интерфейс

За время существования цифровой техники были созданы десятки последовательных протоколов. USB (универсальная Последовательная Шина) и Ethernet — это пример двух наиболее популярных сейчас последовательных протоколов. Другие очень популярные последовательные интерфейсы — это SPI, I2C и последовательный интерфейс, о котором пойдет речь в этой статье. Каждый их этих интерфейсов можно отнести к одной из двух подгрупп — Асинхронные и Синхронные.

Синхронный протокол всегда включает линию тактового сигнала. Это обеспечивает более простую (и зачастую более быструю) передачу данных, но требует как минимум один дополнительный провод. Пример синхронных интерфейсов — это SPI и I2C.

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

Асинхронный последовательный интерфейс, о котором здесь идет речь, широко используется во встраиваемых системах. Если вы хотите добавить в свой проект модуль GPS, Bluetooth, XBee, последовательные ЖК-дисплеи или многие другие внешние устройства, вам, вероятно, придется столкнуться с одним из последовательных интерфейсов.

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

  • Биты данных
  • Биты синхронизации
  • Биты проверки четности
  • Скорость передачи

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

Скорость передачи

Данный параметр определяет скорость передачи данных по последовательной линии. Обычно это выражается в единицах бит в секунду (бит / с или БОД). Если вы инвертируете этот параметр, выраженный в бодах, то получите время, которое требуется для передачи одного бита. Это значение определяет, как долго передатчик держит последовательную линию в высоком / низком состоянии или в какой период принимающее устройство производит выборку своей линии.

Скорость передачи может быть практически любой в пределах разумного. Единственное требование заключается в том, что оба устройства работали с одинаковой скоростью. Одна из наиболее распространенных скоростей передачи, особенно для простых применений, где скорость не критична, составляет 9600 бит / с. Другие «стандартные» скорости — 1200, 2400, 4800, 19200, 38400, 57600 и 115200.

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

Кадры данных

Каждый блок данных (обычно это байт) фактически отправляется в пакете или кадре битов. Кадры создаются путем добавления бит синхронизации и бит четности к битам данным.

Один кадр (Frame) последовательных данны. (Size = размер)

Давайте рассмотрим каждую часть кадра более подробно

Блок Данных ( Data chunk )

Самая важная часть каждого пакета — это блок данных, так как именно этот блок несет полезную информацию. Мы намеренно называем этот блок «куском» данных (chunk), поскольку его размер конкретно не указан. Количество данных в каждом пакете может быть установлено любым — от 5 до 9 бит. Разумеется, стандартный размер данных — это наш с вами основной 8-разрядный байт, но другие его размеры также в ходу. 7-битный блок данных может быть более эффективным, чем 8-битный, особенно если вы просто переносите 7-битные символы ASCII (текст).

После согласования длины символа оба устройства на последовательной шине также должны согласовать достоверность своих данных. Являются ли данные наиболее старшим битом (msb) наименьшим, или наоборот? Если не указано иное, обычно мы предполагаем, что сначала передается младший бит (lsb)

Биты синхронизации

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

Старт-бит всегда определяется линией данных по его спаду (переходу от 1 в 0), в то время как стоп биты определяются линией по фронту, то есть по переходу из 0 в 1.

Биты четности

Четность — это форма очень простой, низкоуровневой проверки ошибок. Может быть два варианта такой проверки: нечетный или четный. Чтобы создать бит четности, все 5-9 бит блока данных складываются, а четность суммы определяет, установлен бит четности или нет. Например, представим себе что у нас проверка установлена в режим четности. Байт данных в двоичном представлении равен 01011101. Видим, что в байте нечетное количество единиц (пять единиц). В этом случае бит проверки четности будет установлен в 1. Если мы настроим режим проверки на на нечетность, то соответственно, бит проверки будет установлен в 0.

Пример настройки протокола: 9600 8N1

9600 8N1 — 9600 бод, 8 бит данных, без контроля четности и 1 стоповый бит — это одна из наиболее часто используемых настроек последовательного протокола. Итак, как выглядит пакет или два из 9600 8N1 данных? Приведем пример:

Фактически для каждого байта передаваемых данных отправляются 10 бит: начальный бит, 8 бит данных и стоповый бит. Таким образом, при 9600 бит / с мы фактически отправляем 9600 бит в секунду или 960 (9600/10) байтов в секунду.

Теперь, когда вы знаете, как создавать последовательные пакеты, мы можем перейти к разделу аппаратного обеспечения.
Мы увидим, как всё это будет реализовано на уровне сигнала.



Последовательная шина состоит всего из двух проводов: один для отправки данных и другой — для приема. Таким образом, последовательные устройства должны иметь два последовательных контакта: приемник, ( RX ) и передатчик ( TX ).

Важно понимать, что обозначения RX и TX относятся к самому устройству. Поэтому RX одного устройства должен соединяться с TX другого, и наоборот. Это может показаться странным, если вы привыкли подключать сигналы VCC к VCC, GND к GND, MOSI в MOSI и т.д. Но все-таки это имеет смысл, поскольку передатчик (TX ) должен разговаривать с приемником (RX) , а не с другим передатчиком.

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

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

Итак, мы с вами рассмотрели асинхронный последовательный протокол с концептуальной стороны. Мы знаем, какие провода нам нужны. Но как осуществляется последовательная связь на уровне сигнала? На самом деле, по-разному. Существуют всевозможные стандарты. Давайте рассмотрим пару наиболее популярных аппаратных реализаций последовательного интерфейса: логического уровня (TTL) и RS-232.

Когда микроконтроллеры и другие низкоуровневые ИС взаимодействуют между собой по последовательному протоколу, они обычно делают это на уровне TTL (транзисторно- транзисторная логика). Последовательные сигналы TTL живут между диапазоном напряжения питания микроконтроллера — обычно от 0 до 3,3 В или 5 В. Сигнал на уровне VCC (3,3 В, 5 В и т. д.) указывает либо о простое, либо это — бит 1 данных, либо стоп-бит. Сигнал 0 В (GND) представляет собой либо стартовый бит, либо бит данных значения 0.

Интерфейс RS-232, который можно найти на некоторых более старых компьютерах и периферийных устройствах, похож на обычный последовательный TTL. У них просто разные уровни напряжения. Обычно сигналы RS-232 варьируются от -13 В до +13В, хотя спецификация позволяет все что угодно в диапазоне от +/- 3 В до +/- 25 В. Низкое напряжение (-5 В, -13 В и т. д.) указывает либо холостой ход, либо стоп-бит, либо бит данных значения 1. Высокий сигнал RS-232 означает либо стартовый бит, либо 0-бит данных. В полярности сигналов как раз кроется противоположность последовательному TTL.

Во встроенных схемах (внутри одного устройства) намного проще использовать последовательные сигналы формата TTL. Но в случае с длинными линиями передачи данных низкие уровни TTL намного более восприимчивы к потерям и помехам. RS-232 или более сложные стандарты, такие как RS-485, лучше подходят для последовательных передач на большие расстояния.

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

UART

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

Упрощенная схема интерфейса UART

Интерфейсы UART существуют в виде отдельных микросхем, но чаще всего они встроены в микроконтроллеры. Чтобы узнать, есть ли у вашего МК протокол UART, вам придется почитать даташит на этот контроллер. У некоторых нет ни одного, у некоторых есть, у некоторых их несколько. Например, Arduino Uno, основанный на старом добром ATmega328, имеет только один UART, в то время как Arduino Mega — построенный на ATmega2560 — имеет целых четыре UART.



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

Внутренняя блок-схема UART (любезно предоставлена Exar ST16C550)

Более продвинутые UART могут передавать полученные данные в буфер, где они будут оставаться до тех пор, пока микроконтроллер не сможет их получить и обработать. Обычно UART выдают буферизованные данные по принципу «первым вошел — первым вышел» (FIFO). Буферы могут быть как маленькими, так и большими, более тысячи байтов.

Программный UART

Если микроконтроллер не имеет встроенного аппаратного UART (или их количество недостаточно для приложения), последовательный интерфейс может быть реализован программно. Это тот подход, который используется в библиотеках Arduino, таких, как SoftwareSerial.Точность работы программно реализуемого UART меньше чем аппаратного, но в крайнем случае можно использовать и такой вариант.

Общие вопросы

Это все, что связано с последовательной связью. Я хотел бы обратить ваше внимание на распространенные ошибки, которые допускают инженеры любого уровня опыта. Это досадные ошибки вроде RX-to-TX, TX-to-RX. Удивительно, но это ошибка, которую я допускал несколько раз.

Несоответствие скорости передачи

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

Данные передавались со скоростью 9600 бит/с, но получены со скоростью 19200 бит/с. В итоге — гора мусора.

Объединение шин

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

Например, если вы подключаете GPS-модуль своего Arduino, вы можете просто подключить TX-линию этого модуля к линии RX Arduino. Но этот вывод Arduino RX уже подключен к контакту TX преобразователя USB-to-serial, который используется всякий раз, когда вы программируете Arduino или используете Serial Monitor. Это порождает возможность возникновения ситуации, когда и модуль GPS, и чип FTDI попытаются передать данные на одной и той же шине одновременно.

Два передатчика пытаются отправить данные в одну и ту же шину. Ситуация конкуренции на шине

В общем, нужно придерживаться правила — одна последовательная шина, два последовательных устройства!

Статься переведена с английского. Источник https://learn.sparkfun.com/tutorials/serial-communication



UART | Электроника для всех

Почти все микроконтроллеры имеют на борту последовательный порт — UART. Работает он по стандартному последовательному протоколу, а значит его можно без проблем подключить к компу на COM порт. Но есть тут одна проблема — дело в том, что комповый RS232 он за логические уровни принимает +/- 12 вольт, а UART работает на пятивольтовых уровнях. Как их совместить? Для этого существует несоколько вариантов схем преобразователей уровня, но самая популярная это все же на специальном преобразователе RS232-TTL. Это микросхема MAX232 и ее аналоги.
Практически каждая фирма делает свой преобразователь, так что тут сгодится и ST232, и ADM232, и HIN232. Схемка простая как три копейки — вход, выход, питание и обвязка из пяти конденсаторов. Конденсаторы обычно ставятся 1uF электролиты, но в некоторых модификациях ставится 0.1uF керамика. Я везде впаивал 0.1uF керамику и обычно этого хватало. 🙂 Работает как часы. Если же на высоких скоростях будет глючить, то надо будет повышать емкость.
 


 

Кстати, существует еще и MAX3232 это то же самое, но на выходе у него не 5вольт TTL, а 3.3 вольта TTL. Её используют для низковольтных контроллеров.
 

Я себе сделал один такой универсальный шнурочек, чтобы к контроллерам цепляться было удобно по UART. Для общей компактности всю схему запихал прям в разъем, благо у меня были ST232 в soic корпусе. Получилась платка не больше рублевой монеты. Так как под рукой не было мелких SMD конденсаторов, то пришлось напаять кондеры сверху, кто во что горазд. Главное работает, хоть и не очень красиво вышло.
 


 

Если сомневаешься, что у тебя получится столь мелкий монтаж, то я тебе развел плату на стандартный PDIP корпус. Размером она будет со спичечный коробок, зато мельчить не надо.
 


 

После сборки проверяется просто:
Втыкается в разъем COM порта. Подается 5 вольт питания на схему, а затем замыкаешь Rx на Tx (у меня это зеленый и желтый провода).
 
Дальше открваешь любую терминалку, хоть Hyper Terminal, цепляешься к порту и начинаешь посылать байты, они должны тотчас возвращаться обратно. Если этого не произошло — проверяй схему, где то косяк.
 

Если работает, то дальше все просто. Тот провод который идет от ножки 9 микросхемы MAX232 это передающий вывод, его заводи на ногу RxD контроллера. А тот который с ножки 10 — принимающий, его смело сажай на вывод TxD контроллера.
 


 

Плата сделана была методом ЛУТ, в одном месте по моему недосмотру толщина просвета оказалась 0.05мм, протравилась, но со спайками, пришлось процарапывать. А в целом с первого раза ать и никаких проблем. Аж сразу захотелось сделать что нибудь маленькое маленькое, нафаршированное нафаршированное 🙂
 


 

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

Печатная плата в формате Sprint Layout. Два варианта маленький и большой
 

Та же бодяга, но для работы через USB
 

Read More »

Протокол передачи данных для UART

Страница 2 из 3

 

Универсальный асинхронный приёмопередатчикUART, та же известный как УАПП, является одним из самых распространенных интерфейсов в современной электронике. Протокол RS-232 является одним самым известных из семейства UART. Родиной данного протокола, как ни странно, является США. Изначально данный протокол предназначался для отправки теле графических сообщений. Механическое устройство являлось передатчиком. И для передачи данных использовалось всего пять бит. Но в современной электронике встречаются такие реализации UART, которые позволяют отправлять пять, шесть, семь, восемь, девять бит информации.

Все процедуры обмена данными по последовательному интерфейсу осуществляются посредством специальных микросхем, которые получили название универсальных асинхронных приемопередатчиков (от англ. UART — Universal Asynchronous Receiver/Transmitter). Все устройства, которые выполняют последовательный обмен данными, имеют тот или иной тип микросхемы UART. Тем не менее, аппаратная часть большинства таких приемопередатчиков базируется на топологии кристалла 8250 и его более продвинутой версии 8250А. Устройства серии 8250 включают такие популярные микросхемы асинхронных приемопередатчиков, как 16450, 16550, 16650 и т. д. Практически любую из этих микросхем можно обнаружить в персональных компьютерах и других коммуникационных устройствах [1].

Рассмотрим кратко основные порты UART. Основными линями передачи и приема данных являются RXD и TXD. Порт RXD (Received Data) является приемником сообщений, а TXD (Transmitted Data) является передатчиком. Также присутствуют другие порты, такие как DTS, RTS и пр. Но это уже зависит от версии UART. Приемник и передатчик работают независимо друг от друга, это означает, что UART является полнодуплексным интерфейсом.

Передача данных в UART осуществляется кадрами. Кадр - это последовательность бит фиксированной длины. Биты передаются в равные промежутки времени. Скорость UART и определяет данный интервал времени. Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод. Рассмотрим кадр поподробнее, он состоит из стартового бита, информационных битов, бита проверки четности, одного или двух стоп-битов. В случае если количество информационных бит превышает максимальное количество возможных передаваемых битов, излишек битов будет передан следующей посылкой. Ключевым моментом в посылке является бит проверки четности. Ведь благодаря ему можно проверить целостность отправленной посылки.



Передача данных протокол UART: varyag_nord — LiveJournal

Передача данных в UART осуществляется по одному биту в равные промежутки времени. Этот временной промежуток определяется заданной скоростью UART и для конкретного соединения указывается в бодах (что в данном случае соответствует битам в секунду). Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод. Скорость ( S {\displaystyle S} S, бод) и длительность бита ( T {\displaystyle T} T, секунд) связаны соотношением T = 1 / S {\displaystyle T=1/S} T=1/S. Скорость в бодах иногда называют сленговым словом битрейт.

Помимо собственно информационного потока, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Обычно стартовый и стоповый биты обрамляют один байт информации (8 бит), однако встречаются реализации UART, которые позволяют передавать по 5, 6, 7, 8 или 9 бит. Обрамленные стартом и стопом биты являются минимальной посылкой. Некоторые реализации UART позволяют вставлять два стоповых бита при передаче для уменьшения вероятности рассинхронизации приёмника и передатчика при плотном трафике. Приёмник игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.

Принято соглашение, что пассивным (в отсутствие потока данных) состоянием входа и выхода UART является логическая 1. Стартовый бит всегда логический 0, поэтому приёмник UART ждёт перепада из 1 в 0 и отсчитывает от него временной промежуток в половину длительности бита (середина передачи стартового бита). Если в этот момент на входе всё ещё 0, то запускается процесс приёма минимальной посылки. Для этого приёмник отсчитывает 9 битовых длительностей подряд (для 8-битных данных) и в каждый момент фиксирует состояние входа. Первые 8 значений являются принятыми данными, последнее значение проверочное (стоп-бит). Значение стоп-бита всегда 1, если реально принятое значение иное, UART фиксирует ошибку.

Для формирования временных интервалов передающий и приёмный UART имеют источник точного времени (тактирования). Точность этого источника должна быть такой, чтобы сумма погрешностей (приёмника и передатчика) установки временного интервала от начала стартового импульса до середины стопового импульса не превышала половины (а лучше хотя бы четверти) битового интервала. Для 8-битной посылки 0,5/9,5 = 5% (в реальности не более 3 %). Поскольку эта сумма ошибок приёмника и передатчика плюс возможные искажения сигнала в линии, то рекомендуемый допуск на точность тактирования UART — не более 1,5 %.

Поскольку синхронизирующие биты занимают часть битового потока, то результирующая пропускная способность UART не равна скорости соединения. Например, для 8-битных посылок формата 8-N-1 синхронизирующие биты занимают 20 % потока, что для физической скорости 115 200 бод даёт битовую скорость данных 92 160 бит/с или 11 520 байт/с.

USART, UART, RS232, USB, SPI, I2C, TTL и т. Д. Что все это и как они связаны друг с другом?

Серийный - это общее слово для всего, что называется «мультиплексирование с временным разделением», чтобы использовать дорогой термин. Это означает, что данные отправляются с течением времени, чаще всего один бит за другим. Все протоколы, которые вы называете, являются последовательными протоколами.

УАППдля универсального асинхронного приемника-передатчика является одним из наиболее часто используемых последовательных протоколов. Это почти так же старо, как и я, и очень просто. Большинство контроллеров имеют аппаратный UART на борту. Он использует одну линию данных для передачи и одну для приема данных. Чаще всего 8-битные данные передаются следующим образом: 1 стартовый бит (низкий уровень), 8 бит данных и 1 стоповый бит (высокий уровень). Стартовый бит низкого уровня и стоп-бит высокого уровня означают, что всегда есть переход с высокого уровня на низкий, чтобы начать связь. Вот что описывает UART. Нет уровня напряжения, так что вы можете иметь его на уровне 3,3 В или 5 В, в зависимости от того, какой микроконтроллер использует. Обратите внимание, что микроконтроллеры, которые хотят обмениваться данными через UART, должны согласовать скорость передачи, скорость передачи в битах, поскольку у них есть только начальные биты, которые имеют край синхронизации для синхронизации. Это называется асинхронной связью.

Для связи на большие расстояния (это не должно быть сотни метров) 5 В UART не очень надежен, поэтому он преобразуется в более высокое напряжение, обычно +12 В для «0» и -12 В для «» 1" . Формат данных остается прежним. Тогда у вас есть RS-232 (который вы на самом деле должны называть EIA-232, но никто не делает.)

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

SPI (Serial Peripheral Interface) - еще один очень простой последовательный протокол. Ведущий посылает тактовый сигнал, и при каждом тактовом импульсе он сдвигает один бит на подчиненный и один бит на вход от подчиненного. Поэтому имена сигналов 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 (двухпроводный интерфейс), которое точно такое же, как I2C, поэтому любое устройство AVR не будет иметь I2C, но будет иметь TWI. Если мастер хочет получить данные, он генерирует только тактовые импульсы. Подчиненное устройство должно позаботиться о том, чтобы следующий бит был готов после подачи тактового импульса. Этот протокол запатентован NXP (ранее Phillips), чтобы сэкономить на стоимости лицензирования, Atmel использует слово TWI (двухпроводный интерфейс), которое точно такое же, как I2C, поэтому любое устройство AVR не будет иметь I2C, но будет иметь TWI. Если мастер хочет получить данные, он генерирует только тактовые импульсы. Подчиненное устройство должно позаботиться о том, чтобы следующий бит был готов после подачи тактового импульса. Этот протокол запатентован NXP (ранее Phillips), чтобы сэкономить на стоимости лицензирования, Atmel использует слово TWI (двухпроводный интерфейс), которое точно такое же, как I2C, поэтому любое устройство AVR не будет иметь I2C, но будет иметь TWI.

Два или более сигналов на одном и том же проводе могут вызвать конфликты, и у вас возникнет проблема, если одно устройство отправит «1», а другое - «0». Поэтому шина подключена ИЛИ: два резистора поднимают шину на высокий уровень, а устройства посылают только низкие уровни. Если они хотят послать высокий уровень, они просто выпускают автобус.

TTL (Transistor Transistor Logic) не является протоколом. Это более старая технология для цифровой логики, но название часто используется для обозначения напряжения питания 5 В, часто неправильно ссылаясь на то, что следует называть UART.

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

9-битный протокол на UART во встроенном Linux



Я пытаюсь навязать 9-битный протокол на UART во встроенном Linux. В настоящее время я тестирую это на плате am335x_evm. Я планирую сделать это с помощью паритета палочек. В идеале я надеялся, что мне не нужно будет на самом деле изменять какой-либо код для драйвера omap-serial.c.

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

Я планировал запустить процесс в пользовательском пространстве, который будет взаимодействовать с UART через стандартные системные вызовы (open, write, read, ioctl, tcsetattr и т. д.). Я бы настроил UART, чтобы включить четность и установить четность палочки. Затем я устанавливал четность на четность и вызывал write(), чтобы отправить свои адресные данные. Затем я устанавливал четность на 0 и отправлял данные. Меня беспокоит, если я изменю четность с 1 на 0, когда это повлияет? Если UART не завершит отправку всех адресных данных, будет ли изменение четности применяться к любым неотправленным данным?

linux-kernel driver uart parity
Поделиться Источник tpotter01     12 ноября 2014 в 12:50

2 ответа


  • Множественный звуковой поток ALSA во встроенном Linux?

    В настоящее время в моем встроенном linux я не могу открыть несколько звуковых потоков ALSA. Что мне нужно, так это иметь разные звуки, играющие одновременно. Как будто одно приложение воспроизводит видео, а другое - какой-то wav-файл одновременно. Спасибо, Солнечный.

  • free() не освобождает память во встроенном linux.

    Я выделил память, используя malloc() во встроенном Linux (около 10 MB). И проверил свободную память, она была 67080 КБ, но даже после освобождения ее с помощью free() она остается прежней. Только после завершения работы приложения память снова становится доступной. Не делает ли free()...



2

В итоге я написал свой собственный 9-битный драйвер uart. Это было самое простое и эффективное решение.

Поделиться tpotter01     17 декабря 2014 в 18:29



1

Правильный способ-установить cs9 на вашем последовательном Порту (и, возможно, без четности), при условии, что аппаратное обеспечение и драйвер поддерживают это.

Я поищу для вас ссылку...

Поделиться Dima Tisnek     12 ноября 2014 в 13:00


Похожие вопросы:


управление экраном boot на встроенном приложении Linux

В встроенном программировании часто требуется заменить стандартный вывод Linux boot какой-нибудь пользовательской анимацией 'loading' или заставкой от включения питания до up-and-running. Каков путь...


функция getrusage на встроенном linux

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


Linux модификация драйвера Uart

Я хочу изменить свой драйвер linux kernel (2.6.32) UART. Я использую стандартный драйвер uart для ttyS2, я не знаю точных файлов. Проблема проста: установка и поддержание высокого пин-кода gpio во...


Множественный звуковой поток ALSA во встроенном Linux?

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


free() не освобождает память во встроенном linux.

Я выделил память, используя malloc() во встроенном Linux (около 10 MB). И проверил свободную память, она была 67080 КБ, но даже после освобождения ее с помощью free() она остается прежней. Только...


Контроллер UART или контроллер RS232? Является ли UART общим словом?

У меня есть вопрос относительно контроллера UART. Является ли контроллер UART общим именем? я имею в виду, что если мы используем протокол RS-232, мы должны назвать этот контроллер UART, контроллер...


Есть ли у нас что-то, чтобы проверить, доступны ли данные в UART порту во встроенном linux..?

Можно ли проверить из пользовательского пространства приложения, доступны ли данные для чтения в порту UART. Код написан на C поверх встроенной платформы Linux. например :...


используйте драйвер uart от linux kernel

Существует внешнее устройство (сенсорная клавиатура), подключенное к процессору через порт uart (tx rx) и линию прерывания gpio. Нужно написать драйвер для этой клавиатуры (не стандартный...


Можно ли разработать протокол ASN.1 во встроенном c для 32-битного microcontroller (без OS)?

Можно ли разработать протокол ASN.1 во встроенном c для 32-битного microcontroller (без OS)? Я использую компилятор ARM micro(32-битный) и cubesuite.


Android вещей 5.1 - 9 бит UART

Я пытаюсь поддерживать 9-битный UART, используя Android вещи, Когда я пытаюсь установить размер данных равным 9, я получаю исключение IO. Единственные конфигурации, которые работают, - это 7 и 8...

Протокол UART

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

В этой очередной статье будем разбирать последовательное соединение двух контроллеров. Для начала немного теории для понимания как это все работает.

UART (УАПП, Universal Asynchronous Receiver-Transmitter) – это узел вычислительных устройств, который предназначен для организации между другими цифровыми устройствами. Данные преобразовываются в последовательный вид таким образом, чтобы было возможно передать их по одной физической цифровой линии аналогичному устройству.

На всех контроллерах семейства Arduino встроен специальный контроллер, который способен преобразовать интерфейс UART в USB, это ATmega16U2.

Передача осуществляется передачей каждого бита в равный отведенный промежуток времени – тайм-слот. Стандартный размер данных в пересылке является 8 бит, также каждый пакет несет кроме самой информации, содержит и служебную, а именно:

- Стартовый бит (обязательный бит, задает начало передачи информации), определяется линией данных по спаду, то есть переход от 1 в 0. Всегда равен единице, обозначающая, что последующие биты представляют передающую информацию;

- Стоповый бит (обязательный бит, задает конец передачи информации), определяется линией по фронту, то есть по переходу от 0 в 1. Всегда равен нулю, воспринимается компьютером как конец передачи данных;

- Биты четности, данные биты являются битами низкоуровневой проверки ошибок. Существует два вида проверки низкоуровневых ошибок: нечетный и четный.

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

Для подключения двух контроллеров Arduino нам потребуется всего 4 провода типа штекер-штекер. Далее подключение будет следующим:

- Два провода будет использоваться для перекрёстного подключения цифровой ПИН 1 будет подключен в ПИН 0, а ПИН 0 в ПИН 1. Данные ПИНы подписаны на контроллере как RX и TX, так вот надо подключить так RX – TX;

- Последние два провода будут подключены 5V – Vin и GND – GND.

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

Напишем две программки:

- Первая программа будет генерировать два числа 0 и 1. Пример кода представлен ниже:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  delay(2500);
  Serial.print("1");
  delay(2500);
  Serial.print("0");
}

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

#define PIN_LED 13

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

void loop()
{
  if(Serial.available() != 0)
  {
    char in_coming_byte = Serial.read();
    String value(in_coming_byte);

    if(value.toInt() == 1) digitalWrite(PIN_LED, HIGH);
    if(value.toInt() == 0) digitalWrite(PIN_LED, LOW);
  }
}

Загрузим программы на контроллеры и подключим следующим образом:

Для питания контроллера Slave, можно использовать служебный ПИН 5V от Master.

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

Эта была ознакомительная статья, чтобы иметь представление, как это работает и как правильно подключить два контроллера.

Протокол связи

UART - как это работает?

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

В этом руководстве вы изучите основы связи UART и работу UART.

Что такое UART?

«UART» - универсальный асинхронный приемник-передатчик. Это периферийное оборудование, которое находится внутри микроконтроллера. Функция UART заключается в преобразовании входящих и исходящих данных в последовательный двоичный поток. 8-битные последовательные данные, полученные от периферийного устройства, преобразуются в параллельную форму с помощью последовательного преобразования в параллельный, а параллельные данные, полученные от ЦП, преобразуются с помощью преобразования из последовательного в параллельный.Эти данные представлены в модулируемой форме и передаются с определенной скоростью передачи.

Почему используется UART?

Протоколы

, такие как SPI (последовательный периферийный интерфейс) и USB (универсальная последовательная шина), используются для быстрой связи. Когда высокоскоростная передача данных не требуется, используется UART. Это дешевое устройство связи с одним передатчиком / приемником. Требуется один провод для передачи данных и другой провод для приема.

Интерфейс UART

Его можно подключить к ПК (персональному компьютеру) с помощью преобразователя RS232-TTL или преобразователя USB-TTL.Общее между RS232 и UART состоит в том, что им обоим не нужны часы для передачи и приема данных. Кадр Uart состоит из 1 стартового бита, 1 или 2 стоповых битов и бита четности для последовательной передачи данных.

Блок-схема

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

Блок-схема

UART

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

В дополнение к этому, предусмотрена логика управления чтением или записью, указывающая, когда читать / писать.Генератор скорости передачи данных генерирует скорости в диапазоне от 110 бит / с (бит в секунду) до 230400. В большинстве случаев микроконтроллеры предлагают более высокие скорости передачи, такие как 115200 и 57600, для более быстрой передачи данных. Такие устройства, как GPS и GSM, используют более низкую скорость передачи данных в 4800 и 9600.

Как работает UART?

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

Работа D - Триггер

Триггер Basic D

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

Примечание: Здесь

« D » представляет собой входные данные.

« CLK » указывает тактовые импульсы.

« Q » обозначает выходные данные. Теперь давайте спроектируем преобразователь из параллельного в последовательный и из последовательного в параллельный.

Преобразование параллельно в последовательный

Параллельно-последовательное преобразование

Каскадное соединение - параллельно последовательному

Шаг № 1:

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

Шаг № 2:

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

Последовательное преобразование в параллельное

Последовательное преобразование в параллельное

Каскадное соединение - последовательное преобразование в параллельное

Шаг № 1:

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

Шаг № 2:

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

Шаг № 3:

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

Формат протокола

UART начинает обмен данными со стартовым битом «0». Стартовый бит инициирует передачу последовательных данных, а стоповый бит завершает транзакцию данных.

Формат протокола

Он также имеет бит четности (четный или нечетный). Бит четности представлен как «0» (четное количество единиц), а бит нечетной четности представлен как «1» (нечетное количество единиц).

Трансмиссия

Передача данных осуществляется по одной линии передачи (TxD).Здесь «0» рассматривается как пробел, а «1» - как состояние отметки.

Кадр передачи

Передатчик отправляет по одному биту за раз. После отправки одного бита отправляется следующий бит. Таким образом, все биты данных отправляются на приемник с заранее определенной скоростью передачи. Передача каждого бита будет иметь определенную задержку. Например, чтобы отправить один байт данных со скоростью 9600 бод, каждый бит отправляется с задержкой 108 мкс. Данные добавляются с битом четности. Итак, для отправки 7 бит данных требуется 10 бит данных.

Примечание : При передаче всегда сначала передается младший бит (младший значащий бит).

Приемная

Во время приема для приема данных используется линия RxD (Receiver).

Кадр приема

Пример интерфейса UART

Этот пример демонстрирует взаимодействие ESP8266 UART с MAX232. Но, прежде чем я перейду к деталям интерфейса, позвольте мне рассказать о контактах драйвера Max232.

Распиновка MAX232

MAX232 IC питается от источника питания 5 В, который включает в себя емкостной генератор напряжения для управления напряжением 232 уровня.Он поставляется с двумя передатчиками, также называемыми драйвером (TIN, TOUT) и приемниками (RIN и ROUT).

Здесь я использовал ESP8266 (32-битный микроконтроллер) со встроенным UART. Связь может осуществляться с ESP8266 с использованием AT-команд через преобразователь уровня RS232 в TTL (MAX232). На рисунке ниже показано подключение ESP8266 к ПК (персональному компьютеру).

Интерфейс ESP8266 с UART

Запрашивая действительные AT-команды через ПК, микросхема Wi-Fi ответит подтверждением.Я не хочу углубляться в ESP8266, и это будет объяснено в следующих руководствах.

Вот шаги для реализации последовательной связи с ПК.

  1. Подключите передатчик (TX) ESP8266 к приемнику (TX) преобразователя уровня RS232 в TTL (MAX232) и приемника ПК.
  2. Подключите приемник (RX) ESP8266 к TX ПК и RX преобразователя TTL.

ESP8266 Команды

AT-команда (отправлена ​​с ПК) ESP8266 Ответ (получен ПК)
AT OK
AT + CIPMUX = 1 OK
AT + CIPSERVER = 1,23 OK

На снимке экрана ниже показан ответ модуля ESP8266.

Команды ESP8266 - программа Docklight

UART против USART

USART - это базовая форма UART. Технически это не одно и то же. Но определение для них обоих одно и то же. Это периферийные устройства микроконтроллера, которые преобразуют параллельные данные в последовательные биты и наоборот.

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

UART USART
Часы генерируются внутри микроконтроллера. Отправляющее устройство сгенерирует часы.
Скорость передачи данных низкая. Скорость передачи данных выше из-за внешних часов.
Автономный протокол Поддерживает несколько протоколов, таких как LIN, RS-485, IrDA, смарт-карта и т. Д.
Перед передачей необходимо знать скорость передачи. Нет необходимости заранее знать скорость передачи.
Подходит для низкоскоростной связи Подходит для высокоскоростной связи.
Сниженное энергопотребление. Обеспечивает последовательную связь при высоком энергопотреблении

RS232 и UART

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

Логика RS232:

Уровни напряжения RS232

Уровень логики Диапазон напряжения
Логический высокий или ВЫКЛ. Выход от -5В до -15В
Выход низкого логического уровня или ВКЛ от + 5В до + 15В
Вход высокого логического уровня или ВЫКЛ. от -3В до -15В
Низкий логический уровень или вход ВКЛ. от + 3В до +15В

В большинстве случаев уровни RS232 находятся в диапазоне от -12 В до +12 В.Например, значение ASCII для символа « A » в RS232 составляет 65 и 41 в шестнадцатеричном формате. Таким образом, в 8-битном двоичном формате это 0100 0001. Здесь показано представление логических уровней RS232 для ASCII « A ».

Сигнал RS232 для ASCII Letter A

Логика TTL / CMOS:

UART работает по логике TTL.

Сигнал TTL CMOS для ASCI Letter A

  • Первоначально последовательная линия находится в состоянии ожидания, обычно называемом Mark stat e (Логика 1).Теперь передача данных начинается со стартового бита (логический 0).
  • Далее, по последовательной линии один за другим отправляются восемь битов данных, причем сначала младший бит (младший значащий бит).
  • После завершения всей передачи встречается стоповый бит (логическая 1).

Преимущества

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

Недостатки

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

Приложения


  1. Последовательный порт отладки использует драйвер UART для печати данных, поступающих из внешнего мира.
  2. Мы можем использовать его для отправки и получения команд на встроенные устройства и от них.
  3. Связь в GPS, модеме GSM / GPRS, микросхемах Wi-Fi и т. Д. Работает с UART.
  4. Используется в доступе к мэйнфрейму для подключения разных компьютеров.

Основы связи UART

UART или универсальный асинхронный приемный передатчик - это специализированное оборудование, связанное с последовательной связью. Аппаратное обеспечение для UART может быть схемой, встроенной в микроконтроллер, или специальной ИС. Это контрастирует с SPI или I2C, которые являются просто протоколами связи.

UART - один из самых простых и наиболее часто используемых методов последовательной связи. Сегодня UART используется во многих приложениях, таких как GPS-приемники, модули Bluetooth, GSM и GPRS-модемы, системы беспроводной связи, приложения на основе RFID и т. Д.

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

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

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

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

Краткое примечание о параллельной и последовательной связи

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

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

Методы параллельной передачи данных более быстрые и дорогие, поскольку для них требуется больше оборудования и много проводов.Принтеры прошлого - лучший пример внешней параллельной связи. Другими примерами являются RAM, PCI и т. Д.

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

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

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


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

Введение в связь UART

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

Как упоминалось во введении, UART - это аппаратное обеспечение, которое действует как мост между процессором и протоколом или портом последовательной связи.На следующем изображении кратко показан этот интерфейс. Последовательная связь может быть любой, например USB, RS-232 и т. Д.


Буква «A» в UART означает асинхронный, т.е. отсутствует тактовый сигнал для синхронизации или проверки данных, передаваемых от передатчика и принимаемых приемником (асинхронный Последовательная связь).

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

Если между передатчиком и приемником нет часов (или любого другого сигнала синхронизации), то как приемник узнает, когда читать данные?

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

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

Эти последовательные данные передаются в UART на приемном устройстве, т. Е. Принимающем UART. Принимающий UART, получив последовательные данные, преобразует их обратно в параллельные данные и передает их ЦП.

Вывод на передающем UART, который передает последовательные данные, называется TX, а вывод на принимающем UART, который принимает последовательные данные, называется RX.

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

Как работает UART?

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

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

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

К этим данным UART добавляет биты Start, Parity и Stop, чтобы преобразовать их в пакет данных. Пакет данных затем преобразуется из параллельного в последовательный с помощью регистра сдвига и передается побитно с вывода TX.

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

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

Структура пакета данных или кадра

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

Давайте посмотрим на каждую деталь рамы.

Стартовый бит: Стартовый бит - это бит синхронизации, который добавляется перед фактическими данными.Стартовый бит отмечает начало пакета данных. Обычно незанятая линия данных, т.е. когда линия передачи данных не передает никаких данных, удерживается на высоком уровне напряжения (1).

Чтобы начать передачу данных, передающий UART переводит линию данных с высокого уровня напряжения на низкий уровень (от 1 до 0). Принимающий UART обнаруживает это изменение с высокого на низкий на линии данных и начинает считывать фактические данные. Обычно есть только один стартовый бит.

Стоповый бит: Стоповый бит, как следует из названия, отмечает конец пакета данных.Обычно это два бита, но часто используется только один бит. Чтобы завершить передачу, UART поддерживает линию данных под высоким напряжением (1).

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

Биты данных: Биты данных - это фактические данные, передаваемые от отправителя к получателю.Длина кадра данных может быть от 5 до 9 (9 бит, если четность не используется, и только 8 бит, если используется четность). Обычно LSB является первым передаваемым битом данных (если не указано иное).

Правила UART

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

  • битов синхронизации (стартовые и стоповые биты)
  • бит четности
  • битов данных и
  • скорость передачи данных

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

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

Скорость передачи измеряется в битах в секунду. Некоторые из стандартных скоростей передачи - 4800 бит / с, 9600 бит / с, 19200 бит / с, 115200 бит / с и т. Д. Из этих 9600 бит / с скорость передачи является наиболее часто используемой.

Давайте посмотрим на пример кадра данных, где два блока данных i.е. 00101101 и 11010011 должны быть переданы. Формат кадра - 9600 8N1, то есть 9600 бит / с с 8 битами данных, без контроля четности и 1 стоповым битом. В этом примере мы не использовали бит четности.


Преимущества UART
  • Требуется только два провода для полнодуплексной передачи данных (кроме линий питания).
  • Нет необходимости в часах или других сигналах синхронизации.
  • Бит четности обеспечивает интеграцию базовой проверки ошибок в кадр пакета данных.

Недостатки UART

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

UART - это протокол или железо?

UART / USART действительно аппаратный. Фактически, прежде чем мы даже начнем обсуждение терминологии, вот популярный пример из 80-х: UART 8250, то есть

.

«... интегральная схема, предназначенная для реализации интерфейса для последовательной связи».

Если вы посмотрите терминологию, вы увидите ссылки на аппаратные элементы. Например, в презентации Microchip «Использование USART. в асинхронном режиме 'вы заметите такие вещи, как часы, контакты, дуплекс и интерфейс:

USART - это универсальный синхронный асинхронный приемный передатчик. это иногда называется последовательным коммуникационным интерфейсом , интерфейсом или SCI. Синхронная работа использует часы и линию данных , в то время как нет отдельных часов сопровождающие данные для асинхронной передачи.Поскольку в асинхронной работе нет тактового сигнала , один вывод может использоваться для передача, а другой контакт может использоваться для приема. И трансмиссия, и прием может происходить одновременно - это называется полнодуплексным режимом . Передачу и прием можно включить независимо. Однако когда серийный номер порт включен, USART будет управлять обоими контактами, и один не может использоваться для ввод / вывод общего назначения, когда другой используется для передачи или приема.

Давайте теперь посмотрим на документ TI «Интерфейсные схемы для TIA / EIA-232-F»:

Если взглянуть на интерфейс DB9, сделав шаг назад в цифровую систему, то в в большинстве случаев универсальный асинхронный приемник / передатчик (UART) или элемент асинхронной связи (ACE). ACE предоставляет параллельное преобразование в последовательный и необходимые стартовых / стоповых битов, бит четности генерация и проверка безошибочной передачи данных .

Процитировать прототипирование FPGA с помощью Verilog Примеры: Xilinx Spartan-3 Версия:

Универсальный асинхронный приемник и передатчик (UART) представляет собой схему , которая передает параллельные данные по последовательной линии .UART часто используются в сочетании со стандартом EIA (Electronic Industries Alliance) RS-232, который определяет электрические, механические, функциональные и процедурные характеристики двух устройств передачи данных.

И еще немного:

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

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


Где задействован программный аспект? Это обрабатывается самим асинхронным последовательным протоколом. Книга «Программирование 16-битных микроконтроллеров PIC на языке C: обучение полетам на PIC 24» содержит очень хорошее введение в главе 8: в авиации у вас есть точный протокол того, как и что следует говорить, кто говорит первым и вторым и т. Д. То же самое и для последовательной связи. Программное обеспечение будет управлять оборудованием, поставляемым UART, для передачи - посылать стартовый бит, данные, затем стоповый бит - и когда следует слушать.

Важно отметить, что UART не обязательно должен быть привязан к разъему DB-9 - UART - это не DB-9. В настоящее время у вас есть Raspberry Pi, Arduino и множество других встроенных систем, которые используют всего 4 линии проводов. Иногда встречаются конвертеры USB в RS-232. Например, я работал с платой PICDEM PIC18, которая может использовать DB-9 или USB для последовательной связи. Последовательные данные также могут быть отправлены по линиям Ethernet.

Протоколы последовательной связи

- Часть вторая: UART

Марк Харрис

| & nbsp Создано: 14 апреля 2021 г.

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

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

UART - это универсальный асинхронный приемный передатчик. Эта система связи требует двух контактов, кроме земли.Один имеет маркировку TX, передатчик, а другой - RX, приемник. Наличие слова asynchronous в названии означает, что он не требует тактового сигнала. Поскольку у него нет часов, передающее и принимающее устройства должны использовать одинаковую скорость передачи данных.

Скорость передачи (Бод) - это единица измерения скорости передачи. Этот параметр определяет скорость передачи данных по каналу данных передатчика и приемника. Для упрощения скорость передачи может быть представлена ​​в битах в секунду.Таким образом, скорость 1000 Бод означает, что скорость передачи данных составляет 1000 бит в секунду, или длительность одного бита составляет 1/1000 секунды или 1 миллисекунду. Скорости передачи имеют стандартные метрические префиксы, такие как kBd (килобод), MBd (мегабод) или GBd (гигабод). Скорость передачи включает в себя части сообщения, не связанные с данными, такие как стартовые и стоповые биты, что означает, что скорость передачи полезной информации, отправляемой от передатчика к приемнику, будет немного меньше.

Некоторые из наиболее популярных предустановленных скоростей передачи UART включают:

  • 110 бод
  • 300 бод
  • 1200 бод
  • 4800 бод
  • 9600 бод
  • 19200 бод
  • 38400 бод
  • 115200 бод

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

Итак, чтобы подключить два устройства с помощью UART, вывод TX передатчика должен быть подключен к контакту RX приемника:

Базовая проводка UART с TX, RX и землей

У вас будут контакты RX и TX на обоих устройствах в некоторых конфигурациях, что позволит вам отправлять команды с микроконтроллера на выделенную IC и получать заказы или информацию обратно в другом направлении. Это называется дуплексным подключением. Также есть приложения, когда обратная связь от второго устройства не требуется.Следовательно, коммуникации необходимы только в одном направлении; следовательно, требуется только одна линия передачи от TX к RX. Это называется симплексным подключением.

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

Устройство UART отправляет стартовый бит (начало связи)

Биты данных затем отправляются в виде восьмибитового потока, представляющего реальные данные, где старший бит (MSB) помечен как D7, а наименее важный бит (LSB) обозначен как D0.

Первое устройство в соединении UART отправляет биты данных после первого стартового бита.

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

Первое устройство в соединении UART отправляет стоповый бит после битов данных.

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

Пример пакета последовательной связи UART

Старший бит D7 также может использоваться как бит четности.Этот бит обеспечивает элементарный механизм проверки ошибок, который появляется в самых маленьких блоках связи. Бит четности может использоваться для обеспечения того, чтобы общее количество старших битов или единиц было четным или нечетным, в зависимости от кодирования. Для проверки четности, если биты данных от D0 до D6 установлены, они состоят из четного числа старших битов, тогда бит четности устанавливается в 0 (низкий). И наоборот, если этот набор битов имеет нечетное количество старших битов, то бит четности устанавливается в 1 (высокий). Это гарантирует, что общее количество старших битов в сообщении будет четным.В случае нечетной проверки четности, если биты данных от D0 до D6 установлены так, что они состоят из четного числа старших битов, бит четности устанавливается в 1 (высокий). И наоборот, если этот набор битов имеет нечетное количество старших битов, то бит четности устанавливается в 0 (младший). Это гарантирует, что общее количество старших битов в сообщении будет нечетным.

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

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

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

Существует также вариант UART, который называется USART. Это универсальный синхронный асинхронный приемный передатчик.Он может действовать как асинхронный канал (как и UART), и как синхронный канал, когда данные синхронизируются. Часы можно восстановить из самих данных или отправить как отдельный внешний сигнал.

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

Пример связи USART

UART

USART

UART требует только сигнал данных

Для синхронного режима USART требуются и данные, и часы.

В UART данные не должны передаваться с фиксированной скоростью.

В синхронном режиме USART данные передаются с фиксированной скоростью.

В UART данные обычно передаются по одному байту.

В USART синхронные данные обычно передаются в виде блоков данных.

В UART скорость передачи данных устанавливается вокруг определенных значений, таких как 4800, 9600, 38400 бит / с и т. Д.

В USART синхронный режим допускает более высокую DTR (скорость передачи данных), чем для асинхронного режима, если все другие факторы остаются постоянными.

Скорость

UART ограничена примерно 115200 бит / с.

USART может достигать скорости выше 115 кбит / с.

Полнодуплексная связь: данные могут отправляться в обоих направлениях одновременно.

Полудуплексная связь: данные могут отправляться только в одном направлении за раз.

Основной целью UART и USART является преобразование параллельных данных на линиях шины ПК в последовательные данные, которые могут передаваться с помощью драйверов линии по шине, которая соответствует стандарту протокола последовательной связи, например RS-232 или RS. -485.Для взаимодействия между UART / USART и внешней шиной потребуется преобразователь. Затем это позволяет считывать эти данные аналогичным устройством без необходимости использования двух одинаковых форматов последовательных данных. Пока передача между ними осуществляется по общему поддерживаемому стандартному протоколу, реализация последовательной связи в каждом устройстве может быть специфичной для этого устройства.

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

Сводка

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

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

Протокол связи

UART | mbedded.ninja

Обзор

UART (универсальный асинхронный приемник / передатчик ) - это низковольтный, дружественный к микроконтроллерам эквивалент протокола цифровой передачи данных RS-232, появившийся еще в 1960-х годах. Он был разработан как протокол связи для обмена данными между DTE (оконечное оборудование данных) и DCE (оборудование передачи данных).Он универсален в том смысле, что можно настроить синхронизацию, напряжение, управление потоком и проверку ошибок.

Тип привода Односторонний
Кол. Провода (без заземления) 2 (TX / RX) или 4 (TX / RX и RTS / CTS)
Дуплексность Полный
Топология подключения Точка-точка
Уровни OSI Уровни 1 (физический) и 2 (канал передачи данных)

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

Терминология

Сортировка в алфавитном порядке.

Условие Описание
CTS CTS - это инициализм для Clear To Send . См. Раздел «Управление потоком» для получения дополнительной информации.
DCD DCD - это инициализм для Data Carrier Detect . См. Раздел «Управление потоком» для получения дополнительной информации.
DCE DTE - это инициализм для оборудования передачи данных . Этот термин был создан, когда UART был впервые разработан для описания электронных устройств, которые передавали / принимали данные и подключались к терминалам (которые назывались DTE). См. Раздел «Управление потоком» для получения дополнительной информации.
DTE DTE - это инициализм для Data Terminal Equipment .Этот термин был создан, когда UART был впервые разработан для описания электронных устройств, отображающих данные и подключенных к модемам (которые были названы DCE). См. Раздел «Управление потоком» для получения дополнительной информации.
DTR DTR - это инициализм для Data Terminal Ready . См. Раздел «Управление потоком» для получения дополнительной информации.
RI RI - это инициализм для индикатора звонка . См. Раздел «Управление потоком» для получения дополнительной информации.
RTS RTS - это инициализм для Request To Send . См. Раздел «Управление потоком» для получения дополнительной информации.
RxD RxD - это сокращение от Получение данных . См. Раздел «Управление потоком» для получения дополнительной информации.
TxD TxD - это аббревиатура от Transmit Data . См. Раздел «Управление потоком» для получения дополнительной информации.
UART UART - это инициализация универсального асинхронного приемника / передатчика .
USART USART - это инициализация универсального асинхронного / синхронного приемника / передатчика . ATMEL использует этот термин для описания периферийных устройств в своем диапазоне микроконтроллеров ATmega, которые поддерживают стандартный асинхронный протокол, а также синхронный (тактовый) протокол.
Голосование Голосование описывает процесс проверки ошибок, в котором один и тот же бит данных UART выбирается несколько раз, а затем проводится голосование для определения его состояния.

Протокол

Долгая история последовательной связи RS-232 означает, что UART является синонимом / совместимым со многими вариациями физического и протокольного уровня, такими как:

  • CMOS UART
  • RS-232
  • RS-423 (дифференциал)
  • RS-485 (дифференциал)
  • DMX512 (обычно используется для управления освещением сцены и эффектами)
  • MIDI
  • Шина LIN
  • IrDa

Разъемы

UART - это протокол, который не имеет единственного распознаваемого разъем.Поскольку он обычно используется в сочетании с протоколами RS-232 или RS-485, сверхминиатюрные разъемы D обычно связаны с протоколом UART. Однако, поскольку UART является очень распространенным периферийным устройством микроконтроллера и может использоваться для коротких, постоянных коммуникаций на печатной плате между микроконтроллером и сторонним устройством, он также обычно реализуется без какого-либо разъема (вывод на печатную плату) или направляется от микроконтроллера напрямую к 0,1-дюймовым выводам заголовка для таких вещей, как отладка (отладочный UART очень распространен на встроенных устройствах).

Скорости передачи

UART по сегодняшним стандартам является протоколом медленной передачи. Тем не менее, он по-прежнему достаточно быстр для множества приложений. Обычно поддерживаемые скорости передачи:

  • 600, 1200, 3400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200, 128000, 256000, 460800, 921600

У меня практически не было проблемы с использованием скорости до 460800 бод во встроенных системах (при разговоре с другой встроенной системой или с компьютером через виртуальный COM-порт).Однако в некоторых ситуациях скорость 921600 бод у меня не работала.

Некоторые устройства также поддерживают настраиваемые скорости передачи данных.

Управление потоком

Управление потоком - это способ определения, когда приемник или передатчик готов принять или отправить новые данные. Протокол UART предоставляет несколько (все необязательные) методов управления потоком:

  • Аппаратные линии RTS / CTS
  • Программное управление потоком XON / XOFF

RTS / CTS

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

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

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

Сигнал Тип порта Описание Вывод DB-25 Вывод DE-9
DTR (готовность терминала данных) Выход DTE управляет этим, чтобы указать на DTE что он присутствует. 5 4
DCD (обнаружение носителя данных) Вход DCE управляет этим, когда он подключен к телефонной линии. 8 1
RI (индикатор звонка) Вход DCE управляет этим, когда обнаруживает телефонный звонок. Обратите внимание, что в обратном направлении нет совпадающего сигнала. 22 9
RTS (Запрос на отправку) Выход DTE управляет этим, чтобы сообщить DCE о готовности к приему данных. 4 7
CTS (Clear To Send) Вход Управляется DCE, когда он готов принять данные. 5 8
TxD (передача данных) Выход DTE отправляет данные в DCE по этой линии. 2 3
RxD (прием данных) Вход DCE отправляет данные в DTE по этой линии. 3 2
Общая земля (GND) нет данных Общая земля для всех сигналов. 7 5
Защитное заземление (PG) нет данных Защитное заземление. Обычно он просто подключается к общей земле на печатной плате. 1 нет данных

Предупреждение

Путаница в том, как соединить два устройства UART вместе, возникает, когда это не оконечное оборудование (DTE), подключенное к модемному оборудованию (DCE). Во встроенном мире микроконтроллеры и другие устройства, поддерживающие UART, могут действовать как DTE или DCE. Будьте особенно осторожны при соединении портов UART на встроенных устройствах!

Практическое правило: большинство последовательных интерфейсов RS-232 с 9- или 25-контактным штыревым разъемом - это DTE, большинство с 9- или 25-контактным гнездовым разъемом - DCE.

Чаще всего производители маркируют контакты UART как DTE. В этом случае вы должны поменять местами все соединения с соответствующей линией. Таким образом, TxD устройства 1 подключается к RxD устройства 2, RxD устройства 1 подключается к TxD устройства 2, RTS устройства 1 подключается к CTS устройства 2, т.е.tc.

Проверка ошибок / помехоустойчивость

Единственная проверка ошибок UART по спецификации - это проверка четности (могут существовать дополнительные функции ошибок).

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

  • Уменьшите скорость передачи до минимально приемлемой скорости.При 9600 бод ошибок возникает гораздо меньше, чем, скажем, 57600 бод.
  • Включить проверку четности (не решает проблему полностью!)
  • Включите алгоритмы голосования, если передатчик или приемник ее поддерживают.
  • Аналогичным образом включите передискретизацию, если передатчик или приемник ее поддерживают (очень похоже на голосование).
  • Сделайте линии передачи UART как можно короче и с минимальной емкостью.
  • Экранируйте кабель UART (не так важно)
  • Реализуйте алгоритм контрольной суммы в приемнике и передатчике, например CRC.Протокол UART не поддерживает это изначально, вам придется использовать стороннюю библиотеку / написать код, чтобы сделать это самостоятельно. Даже при использовании простого алгоритма контрольной суммы, такого как исключающее или (XOR), это, вероятно, один из самых надежных методов проверки ошибок.

Сигнал прерывания

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

Передатчик посылает сигнал прерывания посредством , устанавливая низкий уровень на линии TX на период, превышающий один кадр .Есть два типа перерывов: короткие и длинные. Короткий перерыв - это когда на линии TX устанавливается низкий уровень в течение периода от 1 до 2 длин кадров, а длительный перерыв - это когда на линии передачи устанавливается низкий уровень в течение периода, превышающего 2 длины кадра.

Протоколы более высокого уровня

Вам нужен протокол связи более высокого уровня, который работает через соединение UART? Увидеть Библиотека SerialFiller на GitHub (написана на C ++). SerialFiller использует механизм публикации / подписки и хорошо работает с последовательными соединениями точка-точка, такими как UART.

Терминальные программы

RealTerm (3.5 / 5)

Веб-сайт: http://realterm.sourceforge.net/

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

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

Он может просматривать и отправлять двоичные, шестнадцатеричные, ASCII, ANSI, целые числа (как со знаком, так и без знака, 8- или 16-битные), числа с плавающей запятой и многое другое. Поддержка полудуплексной связи, а также I2C! Совершенно не лагает / не зависает (в том числе при отключении COM-порта, пока он еще работает). Вы можете запускать несколько приложений RealTerm одновременно, чтобы получать данные с нескольких портов UART одновременно. Он может добавлять метки времени к полученным сообщениям UART, что полезно для регистрации данных.

Скриншот RealTerm в действии.

Я заметил несколько ошибок с RealTerm, особенно когда дело доходит до изменения количества строк и столбцов и прокрутки полученных данных назад (переменная прокрутки также не работает).

ОБНОВЛЕНИЕ 2021-05-17 : Похоже, разработка сайта SourceForge давно остановлена. Существует Realterm «Версия для разработки», которую можно найти по адресу https://realterm.i2cchip.com/, она обновлена ​​до 2018 года.

Терминал от Br @ y (3.5 / 5)

Веб-сайт: https: // сайты.google.com/site/terminalbpp/

Простая и аккуратная терминальная программа для Windows. Лично он не пользуется таким же уважением, как RealTerm, из-за его простоты и немного ошибочного характера. При декодировании в шестнадцатеричный формат программа может зависнуть, если вы получаете большие объемы данных. Он также может зависнуть, если вы отключите COM-порт, пока он все еще подключен.

Скриншот «Терминала от Br @ y» в действии.

PuTTy (4/5)

Веб-сайт: http://www.chiark.greenend.org.uk / ~ sgtatham / putty /

PuTTY - это бесплатная реализация Telnet и SSH для платформ Windows и Unix, а также эмулятор терминала xterm.

Если у вас запущены окна, PuTTY - очень удобное приложение, если вы хотите имитировать интерфейс командной строки UNIX-подобной системы. Хотя функции отладки и захвата не так хороши, как, скажем, RealTerm, он предлагает посимвольный ввод и правильную реакцию на нажатие `` специальных '' клавиш, таких как ввод (что RealTerm не позволяет, вместо этого вам нужно ввести строку а затем нажмите отправить).Это может показаться незначительной разницей, но эта функция действительно пригодится! Мне это очень удобно при использовании FreeRTOS и расширения CLI (интерфейса командной строки), которое позволяет вам связываться с ПК со встроенной системой, используя интерфейс в стиле командной строки (как на картинке справа).

Снимок экрана приложения PuTTy в действии вместе с окном настроек.

Я обнаружил одну ошибку в PuTTY & mldr; если он получает сразу большое количество символов (что является обычным при печати отладочных сообщений из встроенной системы, и по какой-то причине строка не заканчивается нулем и начинает печать gobble-de-gooch из случайных участков памяти), PuTTY может зависнуть, и его необходимо перезапустить.В этой ситуации он также может многократно распечатать сообщение «PuTTyPuTTyPuTTy» через COM-порт, который вы отлаживаете. Странный.

PuTTY может зависнуть при печати большого количества случайных символов через COM-порт.

9-битная адресация

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

Радиационная стойкость

Некоторые протоколы UART имеют радиационно-стойкие устройства, такие как DRS4485, приемопередатчик с двойным интерфейсом RS-485 производства Aeroflex.

RS-232

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

Для получения дополнительной информации см. Страница RS-232.

RS-485

RS-482 - еще один очень распространенный протокол, в который и из которого преобразуется UART.Обычно его выбирают вместо RS-232, когда требуются большие расстояния и / или большая помехозащищенность. Для получения дополнительной информации см. Страница RS-485.

Кабели

Вы можете приобрести кабели эмулятора последовательного порта USB-USB с нулевым концом. Они отлично подходят для передачи данных между двумя компьютерами (или любыми хост-устройствами с 2 USB) без использования настоящего кабеля USB-USB A (что требует использования более сложного протокола).

FTDI производит один такой кабель, называемый Кабель USB-USB.

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

Трансиверы Powerline

SIG60 - это пример трансивера Powerline.

Создание моста последовательного порта

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

Тестирование физического моста последовательного порта путем соединения двух кабелей FTDI вместе.

Вы можете создать элементарный последовательный мост для соединения частей программного обеспечения вместе, соединив два преобразователя USB-to-UART (или USB-to-RS232) вместе, пересекая линии RX и TX. Хотя это не очень постоянное решение, это хорошо для простых тестов. На следующем изображении показан аппаратный мост последовательного порта с терминалами на каждом конце.

Разъяснение основ UART - протокол связи и его приложения

Если мы вспомним старые части компьютера, такие как принтер, мышь, клавиатура связана с помощью разъемов.Процесс связи между компьютером и этими частями может осуществляться с помощью UART. Универсальная последовательная шина (USB) изменила все виды принципов связи на компьютерах. Но UART по-прежнему используется в заявленных выше приложениях. Приблизительно все типы архитектур микроконтроллеров имеют встроенное оборудование UART из-за последовательной связи и используют только два кабеля для связи. В этой статье обсуждается, что такое UART, Как работает UART, разница между последовательной и параллельной связью, Блок-схема UART , связь UART, интерфейс UART, приложения, преимущества и недостатки.

Что такое UART?

Полная форма UART - это «Универсальный асинхронный приемник / передатчик», и это встроенная ИС внутри микроконтроллера, но не похожая на протокол связи (I2C и SPI). Основная функция UART - последовательная передача данных. В UART связь между двумя устройствами может осуществляться двумя способами, а именно последовательной передачей данных и параллельной передачей данных.


UART

Последовательная и параллельная связь

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

При параллельной передаче данных данные могут передаваться по нескольким кабелям одновременно. Параллельная передача данных является дорогой и очень быстрой, поскольку требует дополнительного оборудования и кабелей. Лучшими примерами такого взаимодействия являются старые принтеры, PCI, RAM и т. Д.

Параллельная связь

Блок-схема UART

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

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

Генератор скорости передачи между передатчиком и приемником генерирует скорость в диапазоне от 110 до 230400 бит / с. Обычно скорость передачи микроконтроллеров составляет от 9600 до 115200 бод.

Блок-схема UART

Связь UART

В этой связи доступны два типа UART, а именно передающий UART и принимающий UART, и связь между ними может осуществляться напрямую друг с другом. Для этого достаточно двух кабелей для связи между двумя UART. Поток данных будет поступать как от передающего (Tx), так и принимающего (Rx) выводов UART. В UART передача данных от Tx UART к Rx UART может выполняться асинхронно (нет сигнала CLK для синхронизации битов o / p).

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

Связь UART

Стартовый бит

Стартовый бит также известен как бит синхронизации, который помещается перед фактическими данными. Обычно неактивная линия передачи данных управляется на высоком уровне напряжения. Чтобы начать передачу данных, передача UART перетаскивает линию данных с высокого уровня напряжения (1) на низкий уровень напряжения (0). Получение UART замечает это преобразование с высокого уровня на низкий по линии данных, а также начинает понимать реальные данные.Как правило, есть только один стартовый бит.

Стоп-бит

Стоп-бит помещается в конец пакета данных. Обычно этот бит имеет длину 2 бита, но часто используется только бит. Чтобы остановить трансляцию, UART поддерживает высокое напряжение в линии передачи данных.

Бит четности

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

Биты данных или кадр данных

Биты данных включают в себя реальные данные, передаваемые от отправителя к получателю. Длина кадра данных может составлять от 5 до 8. Если бит четности не используется, длина кадра данных может составлять 9 бит. Как правило, сначала нужно передать младший бит данных, а затем он очень полезен для передачи.

Интерфейс UART

На следующем рисунке показан интерфейс UART с микроконтроллером.Связь UART может осуществляться с использованием трех сигналов, таких как TXD, RXD и GND.

Используя это, мы можем отображать текст на персональном компьютере с платы микроконтроллера 8051, а также модуля UART. На плате 8051 есть два последовательных интерфейса, таких как UART0 и UART1. Здесь используется интерфейс UART0. Вывод Tx передает информацию на ПК, а вывод Rx получает информацию от ПК. Скорость передачи может использоваться для обозначения скорости как микроконтроллера, так и ПК. Передача и прием данных могут выполняться правильно, если скорости передачи микроконтроллера и ПК одинаковы.

Интерфейс UART

Приложения UART

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

Стандарты связи, такие как RS422 и TIA, используются в UART, за исключением RS232. Обычно UART - это отдельная ИС, используемая в последовательной связи UART.

Преимущества и недостатки UART

Плюсы и минусы UART включают следующие:

  • Для передачи данных требуется только два провода.
  • Сигнал CLK не требуется.
  • Он включает бит четности, позволяющий проверять ошибки
  • Расположение пакетов данных может быть изменено, поскольку для него предусмотрены обе поверхности
  • Размер кадра данных составляет не более 9 бит
  • Он не содержит несколько ведомых устройств (или) ведущие системы
  • Скорость передачи каждого UART должна составлять 10% друг от друга

Таким образом, это все о обзоре универсального асинхронного приемника Передатчик (UART) является одним из основных интерфейсов, который дает простая, экономичная и последовательная связь между микроконтроллером и ПК.Вот вам вопрос, что такое пины UART ?

glip: протокол UART

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

Внутриполосная сигнализация

UART - это один байт на передачу, и мы, очевидно, хотим использовать полный байт в случае по умолчанию. Следовательно, одно слово определяется как особое слово.Когда это слово нужно передать, его нужно передать дважды. Если второе слово не то же самое, это контрольное сообщение. Мы используем 0xfe , поскольку 0x00 и 0xff вместе с более низкими числами безопасно предполагается, что они находятся в потоке с более высокой скоростью.

Пример потока пользовательских данных:

 0xaf 0xfe 0x00 0xff
 

поток данных UART:

 0xaf 0xfe 0xfe 0x00 0xff
 

Кредитное управление потоком

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

Кто-то может подумать, что безопасно не реализовывать управление потоком в другом направлении (логика-> хост), но для обеспечения устойчивости также необходимо реализовать там управление потоком на основе кредита.В glip мы не делаем никаких предположений о том, когда данные читаются и как соотносятся входные и выходные данные. Следовательно, обратное давление со стороны ввода может блокировать сообщения о кредите, и может возникнуть тупик в пользовательском коде.

Подводя итог, нам необходимо управление потоком на основе кредита в обоих направлениях.

Датаграммы протокола

От логики к хосту у нас есть следующие дейтаграммы протоколов:

слово 0 слово 1 Описание
{кредит [14: 8], 1} кредит [7: 0] Обновление кредита

От хоста к логике у нас есть следующие дейтаграммы протокола:

100000r1
слово 0 слово 1 Описание
{0, кредит [13: 8], 1} кредит [7: 0] Обновление кредита
- Установите первый вывод логики на r
100001r1 - Установите первый контакт на r

Обменяются кредитные датаграммы следующим образом:

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

Для выходного пути (логика к хосту) хост передает весь начальный кредит в нескольких траншах ПЛИС.Затем он также наблюдает за входящими данными и отправляет новый кредит максимального количества, которое может быть передано в одной дейтаграмме ( 0x3fff ), когда оставшийся кредит падает ниже порогового значения HOST_BUFFER_SIZE - 0x3fff .

Вывод logic_rst устанавливается по запросу пользовательского приложения. Контакт сброса связи используется контроллером связи для возврата в определенное состояние.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *