Uart usart отличия – Учебный курс. UART/USART. Получение первых результатов. Сопрягаем микроконтроллер с компьютером

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

За последние 50 лет было придумано множество разновидностей последовательных интерфейсов: SPI, I2C, I2S, RS-232, USB, Firewire, — мы поговорим о том, что такое UART в целом. 

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

SyamilAshri at English Wikibooks [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], from Wikimedia Commons

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

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

UART 

Universal Asynchronous Receiver/Transmitter или просто UART используется с ранних 1960-х и с тех пор претерпевал постоянные изменения. Несмотря на то, что постоянно производятся попытки уничтожить UART, последовательные протоколы этого типа всё ещё представляют важный способ общения между устройствами встраиваемых систем.

UART представляет собой периферийное устройство в процессоре, с помощью которого осуществляется общение между устройствами по последовательному протоколу на небольшие расстояния. Кстати, UART является основой стандарта RS-232 (тот самый D-образный разъем с 9-ю пинами). В языке «С» вывод printf часто может передаваться напрямую через UART. Вообще порты работающие по UART чаще всего называются просто последовательными портами. В самой простой форме UART представляет собой три провода: земля, передача, приём. 

Первая проблема UART в том, что нет возможности определить какое устройство ведущее, а какое ведомое (master/slave), так что непонятно к чему цеплять transmit? Обычно, это определяют за нас. Например, кто-то, кто проектирует печатную плату может назвать этот провод как TX и определить, что устройство должно соединяться так, тогда система будет выглядеть следующим образом:

В итоге получается вариант, когда процессор и принимает, и передаёт данные. Другой способ конфигурации выглядит вот так:

Тогда получается вариант, где процессор всегда передаёт (TX) получателю (RX) и наоборот. Какой вариант правильный? Оказывается это решение принимает за нас производитель чипа и готовой платы/устройства. Я видел множество примеров использования обоих вариантов настолько часто, что без прочтения даташита невозможно было определить как именно следует производить конфигурацию устройств. Если бы я имел контроль над наименованием, то закрепил второй вариант, когда TX соединено с RX. На практике чаще всего TX, подсоединённый к TX, приводит к сгоранию чипов (тоже верно и для RX-RX), так что это хороший пример того, что надо читать документацию перед тем как соединять чипы по UART, так как существует несколько способов соединения.

Когда отправитель и получатель располагаются на одной плате, тогда уровень напряжения сигнала при передаче соответствует уровню напряжения питания процессора. К примеру, «1» будет передаваться с напряжением 3.3В, а «0», грубо говоря, с 0В. Это неочень полезно тогда, когда требуется передать сигнал более, чем на несколько дюймов (1 дюйм = 2.54 см), так как начинают появляться искажения сигнала и увеличивается падение напряжения. В итоге, чем дальше расстояние, тем количество ошибок передачи растет и в итоге становится невозможно передать сообщение, так как оно поступает до невозможности искаженным.

Для того, чтобы избежать подобной ситуации добавляют дополнительные чипы-буферы, усиливающие сигналы. После этого сигналы могут передаваться уже на метры без существенной потери информации. Однако, напряжения при передаче битов довольно странные: для передачи 1 используются -3В..-15В, а для передачи 0 — от +3В до +15В. Это те самые напряжения, которые используются в RS-232. Кстати, буферы в RS-232 также являются ограничителями тока, так что контакты разъёма можно замыкать между собой и он не выгорит. 

Начало и конец передачи данных

 

By Rs232_oscilloscope_trace.jpg: Ktnbn derivative work: Samuel Tardieu (Rs232_oscilloscope_trace.jpg) [CC SA 1.0 (http://creativecommons.org/licenses/sa/1.0/)], via Wikimedia Common

UART — это последовательный интерфейс (он посылает и принимает биты последовательно: бит за битом), но при этом он не передаёт информацию для синхронизации. Отправитель и получатель не синхронизированы. Таким образом взаимодействие отправителя и получателя является асинхронным. Вместо информации о синхронизации в UART используется «стартовый бит» для сигнализации о том, что мы собираемся передать сообщение. После передачи стартового бита передаётся сообщение, а затем передаётся «стоп-бит», указывающий о завершении процесса передачи сообщения. Суммарно получается 10 бит: 1 старт-бит, 8 бит данных, 1 стоп-бит.

Биты передаются с заранее установленной скоростью передачи, которая измеряется в битах в секунду или, иначе, в бодах. Так что 9600 бод эквивалентно 9600 бит/сек. А так как у нас передаётся 10 бит за одно сообщение (старт-бит, данные, стоп-бит), это это значит, что мы можем передать 960 сообщений в секунду.

Так как значение скорости передачи не передаётся вместе с сообщением, то и приёмник и получатель должны заранее установить одинаковое значение скорости передачи/приёма. Конечно, скорости на обеих системах не будут совпадать со 100% точностью (опять же в силу чисто технических причин, так как таймеры на разных системах имеют погрешности), но UART допускает до 5% рассинхронизации таймеров. В этих пределах мы будем получать и принимать верные сообщения. 

USARTS

 

USART — это модификация UART. Расшифровывается как Universal Synchronous/Asynchronous Receiver/Transmitter. При этом добавляется дополнительных три провода: CLOCK, CLEAR TO SEND (CTS), READY TO SEND (RTS).

С помощью такой добавки устраняется необходимость иметь на обоих устройствах точные часы (с рассинхроном не более 5%), а также необходимость и приемнику, и передатчику устанавливать одну и ту же скорость передачи данных. В USART сигнал от CLOCK используется для синхронизации двух устройств. Передающая сторона выдаёт прямоугольные импульсы с частотой, соответствующей скорости передачи данных. А принимающая использует эти импульсы, чтобы правильно принять данные.

Clock-сигнал был довольно обычен несколько десятков лет назад, когда связь осуществлялась с помощью модемов. Этого сигнала, кстати, не было в 9-пиновом разъёме RS-232, которые появились на IBM PC в 1984г.

USART также поддерживает ещё два контрольных сигнала: CTS, RTS. Они используются для контроля передачи данных. Например, у получателя может заполниться буфер, в который поступали данные, тогда он выставляет RTS, сообщая, что надо приостановить передачу и подождать пока появится место в буфере. 

RTS и CTS соединяются крест-накрест: RTS-CTS, CTS-RTS (показано на схеме выше). Таким образом, производится как бы «обмен рукопожатиями»: когда включен RTS получателя, выключается CTS отправителя и наоборот. 

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

Кстати, для обратной совместимости USART может быть использован как простой UART с использованием только трёх проводников: RX, TX, Земля. 

Где используются UART и USART?

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

GPS модули поддерживают стандарт NMEA 0183, в котором определена поддержка модулями UART. Конечно, на подходе новый стандарт NMEA 2000, в котором будет использоваться протокол CAN, но пока ещё превалирует использование UART.

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

Это перевод. Автор оригинальной статьи — Andrei Chichak. Кстати, у них очень интересный блог. Рекомендую.

mp16.ru

USART [Robotic & Microcontroller Educational Knowledgepage

USART – это универсальный синхронный последовательный интерфейс, UART же является его облегчённым вариантом – универсальным асинхронным последовательным интерфейсом. Разница состоит в том, что USART, в отличии от UART, использует, помимо линий данных, так же линию тактового сигнала, с которыми синхронизируются данные. USART микроконтроллера AVR позволяет использовать одновременную двухстороннюю связь, от 5- до 9-битные информационные слова (в случае с 8 битами слово = байт), 1 или 2 стоп-бита, три режима чётности и широкий выбор скоростей передачи данных в бодах. В микроконтроллерах AVR обычно до двух USART интерфейсов, но у некоторых AVR USART отсутствует. Передача данных происходит по одному слову за раз, т.е. AVR переводит переданное пользователем слово в биты на уровне аппаратного обеспечения и передаёт его самостоятельно и наоборот. Пользователь руководит работой USART, записывая и считывая регистры данных, конфигурации и состояния.

Каждый параметр конфигурации имеет соответствующий регистр, который легко настроить с помощью спецификации. Немного сложнее настроить скорость передачи в бодах. Тактовый сигнал для передачи данных генерируется из рабочего такта, и пользователь может выбрать коэффициент от 1 до 4096, на который будет поделен рабочий такт. Полученный сигнал дополнительно делится на 2, 8 или 16, в зависимости от режима. Проблема состоит в том, что все тактовые частоты нельзя поделить так, чтобы получилась стандартная скорость передачи в бодах. Скорость передачи в бодах некоторых тактовых частот микроконтроллера отличается от стандартной на 10%. В спецификациях AVR приведены таблицы, в которых указаны тактовые частоты, стандартные скорости передачи данных в бодах и делитель, необходимый для их получения, а так же возможные ошибки.

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

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

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

~~PB~~

Пример

Настроить интерфейс USART0 ATmega128, работающий на тактовой частоте 8 MHz, с бодовой скоростью 9600 bps, асинхронно передавать 8-битные слова, 1 стоп-бит и ни одного бита чётности. Отправить знак „X“.

#include <avr/io.h>
 
int main()
{
	// Установление скорости передачи в бодах на 9600 bps. Формула:
	//   Делитель = тактовая частота / 16 / скорость в бодах - 1
	//   UBRR = 8000000 / 16 / 9600 - 1 = ~51
	UBRR0H = 0;
	UBRR0L = 51;
 
	// Разрешение передачи
	UCSR0B = (1 << TXEN0);
 
	// Настройка асинхронного режима, длина слова 8 бит
	// 1 стоп-бит, запретить бит чётности.
	UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
 
	// Ожидание опустошения буфера данных, 
	// т.е. предыдущее слово отправлено
        // В данном примере ожидание не требуется, 
	// так как отправляется первый знак, но 
        //следует выполнять это при передаче большего количества знаков.
	while (!(UCSR0A & (1 << UDRE))) continue;
 
	// Записывание знака в буфер, откуда он и будет отправлен
	UDR0 = 'X';
 
	// Бесконечный цикл
	while (1) continue;
}

home.roboticlab.eu

UART/USART(УАПП) в AVR. Регитсры управления.

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

Далее, как я и писал в статье № 31 (план действий), научимся передавать данные по UART. Так как цель нашего проекта это изучение прикладного программирования, то рассмотрим данный протокол, и пример его использования по передаче данных между двумя микроконтроллерами. После рассмотрения примера приступим к передаче данных на ПК используя преобразователь UART- USB, который мы рассмотрели в статье №8.

Что же такое UART? Это Universal Asynchronous Receiver Transmitter (Универсальный асинхронный приемо-передатчик) либо кратко УАПП. Основная его задача – это преобразовать передаваемые данные в последовательный код. Данный протокол является одним из старейших, и был придуман в США для передачи телеграфных сообщений. С того времени данный протокол стал прародителем протоколов семейства UART, например всем известный RS-232 либо COM порт, токовая петля, RS-485, LIN, IrDA (инфракрасный порт)и т.п.

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

Для контроля информации и уменьшения рассинхронизации в передаваемый поток вставляются синхронизирующие метки: один стартовый и один или два стоповый бит (рисунок ниже). В нерабочем (пассивном состоянии) вход/выход интерфейса = 1. Стартовый бит = 0. При перепаде из 1 в 0 отсчитывает от него временный промежуток в половину длительности бита и если по истечению времени = 0, то приемник начинает работу. Значение стоп-бита = 1. Для формирования интервала используется тактирование. Точность источника должна быть такой, чтобы сумма погрешностей (приемника и передатчика) установки временного интервала от начала стартового импульса до середины стопового импульса не превышала половину битового интервала.

Поскольку синхронизирующие биты занимают часть битового потока, то результирующая пропускная способность UART не равна скорости соединения. Например при 8-битной посылке данных, без бита четности, и с 1 стоповым битом, синхронизирующие биты занимают 20 % потока, т.е. при физической скорости 115200 бод битовая скорость данных = 92160 бит /с или 11520 байт/с.

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

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

Основные рабочие линии без аппаратного управления это RXD (прием) и TXD (передача). Микроконтроллеры AVR, также не обошли стороной данный протокол и имеют встроенный модуль UART/USART (Рисунок слева), буква S говорит о том что протокол может быть синхронным с использованием синхронизирующего вывода XCK, а также он дополнен схемой формирования и контроля четности. Модули USART в асинхронном режиме совместим с UART, за небольшим различием в работе буферного блока приемника. Также хочется отметить что в UART посылка может 8 или 9 бит, в USART от 5 до 9 бит. Данные модули обнаруживают в МК : переполнение, ошибки кадрирования и неверный старт бит. Все то что зарисовано серым на структурной схеме выше, присутствует в USART и отсутствует в UART.

Как видно из схемы модуль управляется тремя регистрами управления UCSRA, UCSRB, UCSRC в случае модуля USART. И двумя UCSRA, UCSRB в случае UART. Рассмотрим каждый из них.

Регистр UCSRA

RXCTxCUDREFEDORPEU2XMPCM
RR/WRRRRRR

Где RXC- Флаг завершения приема . Устанавливается в 1 при наличии не прочитанных данных в буфере приемника. Сбрасывается аппаратно после опустошения буфера. Если разряд RXCIE регситра UCSRB установлен то при установке флага генерируется запрос на прерывание «прием завершен».

TxC – Флаг завершения передачи. Устанавливается в 1 после передачи всех разрядов посылки из сдвигового регистра передатчика, если в UDR не было загружено новых данных. Если TXCIE (UCSRB) установлен, то при установки флага генерируется прерывание «передача завершена». Сбрасывается аппаратно и программно при записи в него 1.

UDR – Флаг опустошения регистра данных. Устанавливается в 1 при пустом буфере передатчика. Если UDRIE (UCSRB) установлен то генерируется запрос на прерывание «регистр данных пуст». Сбрасывается аппаратно при записи в регистр данных.

FE – флаг ошибки кадрирования. Устанавливается в 1 при обнаружении стоп-бита = 0. Сбрасывается при приеме стоп бита = 1.

DOR – Флаг переполнения. Для USART устанавливается в 1, если в момент обнаружения нового старт- бита в сдвиговом регистре приемника находится последнее принятое слово, а буфер приемника полон. В UART устанавливается в 1, если новый кадр будет помещен в сдвиговый регистр до того как из регистра данных будет считано предыдущее слово. Флаг сбрасывается при пересылке принятых данных из сдвигового регистра приемника в буфер.

PE – Флаг контроля четности, устанавливается в 1, если в данных находящихся в буфере приемника, выявлена ошибка контроля четности. При отключенном контроле всегда равен 0.

U2X – удвоение скорости обмена. Если этот разряд установлен в 1, коэффициент деления предделителя контроллера скорости передачи уменьшается с 16 до 8. Удваивается тем самым скорость асинхронного обмена. Используется только при асинхронном режиме.

MPCM – Режим мультипроцессорного обмена. Если в 1 то ведомый мк ожидает приема кадра, содержащего адрес. Кадры не содержащие адрес – игнорируются.

Регистр UCSRB

RXCIETXCIEUDRIERXENTXENUCSZRXB8TXB8
RR/WR/WR/WR/WR/WRR/W

Где RXCIE – Разрешение прерывания по завершению приема. Если = 1 то при установке RXC генерируется прерывание «прием завершен».

TXCIE – Прерывание по завершению передачи.

UDRIE – Прерывание при очистке регистра данных.

RXEN – Разрешение приема. При установке в 1 разрешается работа приеника и переопределяется функционирование вывода RXD. При сбросе разряда работа приемника запрещается , буфер сбрасывается. Значение флагов TxC, DOR,FE становятся недействительными.

TXEN – разрешение передачи. Если разряд сбросится во время передачи, выключение передатчика произойдет только после завершения передачи.

UCSZ2 – Формат посылок. Для задания размера слов данных. Задается разрядами UCSZ1:0.

RXB8 – 8-й разряд принимаемых данных. При использовании 9-разрядных слов данных этот разряд содержит значение старшего разряда принятого слова. Если используется USART, содержимое этого разряда должно быть считано до прочтения регистра данных UDR.

TXB8 – 8-й разряд передаваемых данных. Требуемое значение должно быть занесено в этот разряд до байта данных в UDR.

Регистр UCSRC

URSELUMSELUPM1UPM0USBSUCSZ1UCSZ0UCPOL
R/WR/WR/WR/WR/WR/WR/WR/W
00000110

URSEL – Определяет в какой из регистров производится запись. Если 1 то обрашается к UCSRC. Если 0 — UBRRH.

UMSEL – Режим работы USART. Если 0 то асинхронный режим, 1 — синхронный.

UPM1, UPM0 – режим работы схемы контроля и формирования четности.

USBS – Если 0 — передатчик посылает 1 стоп – бит, 1 – 2 стоп бита Для приемника содержимое разряда безразлично.

UCSZ1, UCSZ0 – Формат посылок. Совместно с UCSZ2 определяют количество разрядов данных в посылках.

UCPOL – полярность тактового сигнала. Определяет момент выдачи и считывнаия данных на выводах модуля. Используется только при работе в синхронном режиме. В асинхронном режиме = 0.

UCPOL
Выдача данных на вывод TXD
Считывание данных с вывода RXD
0
Спадающи фронт XCK
Нарастающий фронт XCK
1
Нарастающий фронт XCK
Спадающи фронт XCK

Теперь вернемся к схеме модуля и рассмотрим блок тактирования(рис. выше). Как видите отличие обоих модулей состоит только в синхронизаторе, который используется для синхронного режима. Для обоих режимов общим является контроллер скорости передачи, который задает скорость приема и передачи данных, также является делителем тактовой частоты, где коэффициент деления задается в 12-разрядном регистре UBRR. В некоторых моделях, а именно в ATmega8, с которым мы будем эксперементировать, данный регистр располагается по одному адресу с регистром управления (UCSRC), который мы рассмотрим ниже. По этому при чтении, при первом обращении, сначала возвращается значение регистра UBRRH, которое ожжет быть от 0 до 4095. При повторном — UCSRC. При этом прерывания при такой последовательности должны быть запрещены. На рисунке ниже пример значений регистра UBRR, которые позволяют получить стандартные передачи и велечины ошибок.

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

Скорость = Fck/16 (UBRR+1) , при асинхроннм режиме и U2X =0

Скорость = Fck/8 (UBRR+1) , при асинхроннм режиме и U2X =1

Скорость = Fck/2 (UBRR+1) , при асинхроннм режиме и U2X =0 (Режим ведущего)

Где Fck – тактовая частотота

U2X – разряд регист UCSRA, который рассмотрели выше.

Рекомендуется использовать значение регистра,при которых получаемая скорость передачи отличается от требуемого значения меньше чем на 0,5 %. В синхронном режиме в качестве ведомого скорость приема и передачи определяется частотой сигнала, поступаюбщего на вывод XCK. Частота должна удовлетворять Fxck< Fosc/4, т.к. сигнал XCK сначала синхронизтрруется с тактовой частотой МК, а затем проходит через детектор фронтов.

Формат кадра.

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

UCSZ2UCSZ1UCSZ0Размер слова данных
0005 разрядов
0016 разрядов
0107 разрядов
0118 разрядов
1119 разрядов

Формат кадра в UART определяется флагом CHR9.

И еще одна таблица управление контроллем четности:

UPM1UPM0Режим работы
00Выключен
01Зарезервировано
10Включена проверка на чтность(even parity)
11Включена проверка на нечетность () odd parity)

Значение бита четности получается путем выполнения операции «Исключающее ИЛИ» над всеми разрядами передаваемого слова данных. Если используется проверка на нечетность полученный резльтат инвертируется.

В принципе на этом все. Здесь мы познакомились с основами протокола UART и рассмотрели основные настройки встоенного модуля UART/USART. В следующей статье мы с Вами рассмотрим прием, передачу данных по данному интерфейсу между двумя МК, протестируем в протеусе и в железе, передадим информацию от одного мк к другому и выведем информацию на дисплей. На этом все. Всем пока.

Просмотрено 2464 раз.

www.ap-impulse.ru

UART-интерфейс: описание, использование

Помните, когда у принтеров, мышей и модемов были толстые кабели с этими огромными неуклюжими разъемами? Те, которые буквально должны были ввинчиваться в компьютер? Мало кто знает, что эти UART-компоненты использовались для связи с вашим компьютером. Почти полностью заменила эти старые кабели и разъемы технология USB. UART-интерфейсы, описание которых найдете в этой статье, не ушли в прошлое. Их используют во многих проектах электроники DIY для подключения GPS, Bluetooth и модулей считывания карт RFID к Pi, Arduino или другим микроконтроллерам.

UART-интерфейс: описание

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

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

Введение в коммуникацию UART

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

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

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

UART — что это и как это работает?

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

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

Технические особенности

Базовая система UART обеспечивает надежную, умеренную скорость, полнодуплексную связь с тремя сигналами: Tx (переданные последовательные данные), Rx (полученные последовательные данные) и земля. В отличие от других протоколов, таких как SPI и I2C, никакого тактового сигнала не требуется, поскольку пользователь предоставляет аппаратному обеспечению UART необходимую информацию о времени.

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

Ключевые термины

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

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

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

Пошаговая процедура

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

Описание интерфейса UART:

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

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

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

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

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

  6. Добавляет бит четности (если он был выбран) исходящих передач, проверяет четность входящих байтов (если выбрано), отбрасывает бит четности.

  7. Добавляет разделители начала и окончания исходящих, удаляет их из входящих передач.

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

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

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

  • Используется только два провода.

  • Нет сигнала синхронизации.

  • Имеет бит четности для проверки ошибок.

  • Структура пакета данных может быть изменена, если для нее настроены обе стороны.

  • Хорошо документированный и широко используемый метод.

Недостатки:

  • Размер кадра данных ограничен максимумом в 9 бит.

  • Не поддерживает нескольких подчиненных или нескольких мастер-систем.

Кроме того, скорость передачи данных каждого UART-интерфейса Arduino должна находиться в пределах 10% друг от друга.

fb.ru

AVR для начинающих. UART/USART передача данных.

UART микроконтроллеров AVR.

Одним из самых распространенных протоколов взаимодействия микроконтроллера с внешними устройствами является UART(Universal Asynchronous Receiver-Transmitter) — Универсальный асинхронный приёмопередатчик. Данный протокол аппаратно реализован в большинстве микроконтроллеров AVR, что позволяет разработчику не вдаваться в особенности реализации данного интерфейса. Для его использования достаточно настроить всего несколько регистров!

Рассмотрим кратко принцип работы UART.

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

При передаче байта передатчик изначально выставляет логический 0 на выводе TX(Transmitter). Это так называемый старт-бит, означающий начало передачи. После этого передатчик выставляет биты передаваемого байта через определенные промежутки времени, заданные частотой. Далее может быть передан бит четности, который служит для проверки качества передачи. Когда переданы все биты, выставляется стоп-бит, то есть логическая 1 на линии передачи. Число стоп-битов может быть различным:1; 1,5; 2.

Огромным плюсом данного интерфейса является возможность его использования для настройки связи с ПК. Для этого необходимо изготовить UART—RS232 или UART—USB переходники, основанные на микросхемах MAX232 и FT232RL соответственно.

Подробнее о переходниках здесь.

За работу с UART(на самом деле USART, однако, для нас это сейчас не важно) отвечают следующие регистры:

UDR — Регистр данных UART. При передаче в него записываются данные, которые необходимо отправить, а при чтении — принятые данные. Всё просто.

UCSRA — Регистр контроля и статуса UART. Рассмотрим биты данного регистра подробнее:

  • RXC (Receive Complete) — флаг окончания приема данных. Устанавливается в 1 при наличии несчитанных данных и сбрасывается в 0 по окончании приема данных.
  • TXC (Transmit Complete) — флаг окончания передачи данных. Сбрасывается в 0 по окончании передачи данных и устанавливается в 1 при наличии непереданных данных.
  • UDRE (Data Register Empty) — флаг, означающий готовность регистра UDR получать новые данные. Когда UDRE равен 1, регистр UDR пуст и готов к приему новых данных.
  • FE (Frame Error) — флаг ошибки фрейма.
  • DOR (Data OverRun) — флаг переполнения регистра данных.
  • PE (Parity Error) — флаг ошибки четности
  • U2X — бит, позволяющий увеличить скорость передачи вдвое. При записи 1 в данный бит предделитель тактовой частоты модуля UART уменьшается вдвое, что позволяет вдвое увеличить скорость передачи данных.
  • MPCM — мультипроцессорный режим коммуникации.

UCSRB Регистр контроля и статуса UART.

  • RXCIE (RX Complete Interrupt Enable) — Бит, разрешающий или запрещающий генерацию прерывания по окончании приема. При записи 1 в данный бит прерывание по окончании приема разрешено, при записи 0 — запрещено.
  • TXCIE (TX Complete Interrupt Enable) — При записи 1 в данный бит прерывание по окончании передачи данных разрешено, при записи 0 — запрещено.
  • UDRIE (Data register empty Interrupt Enable) — Бит, разрешающий или запрещающий возникновение прерывания по флагу UDRE.
  • RXEN (Reciever Enable) — Запись 1 в данный бит включает приемник UART модуля, запись 0 — выключает.
  • TXEN (Transmitter Enable) — Запись 1 в данный бит включает передатчик UART модуля, запись 0 — выключает.
  • UCSZ2 (Character Size) — В паре с битами UCSZ1 и UCSZ0 задает число передаваемых бит.То есть мы можем передавать не только побайтно, но и по 5,6,7,8,9 бит.
  • RXB8 (Receive Data Bit 8) — 9 бит принимаемых данных при передаче по 9 бит. Должен быть считан перед операциями с регистром UDR.
  • TXB8 (Transmit Data Bit 8) — 9 бит отсылаемых данных при передаче по 9 бит. Должен быть записан перед записью других бит в UDR.

UCSRС Регистр контроля и статуса UART.

  • URSEL(Register Select)— бит выбора между регистрами UCSRC и UBRRH. Слегка странный бит, однако, достаточно запомнить, что при записи в него 1, работа происходит с регистром UCSRC, а при записи 0 — с регистром UBRRH. То есть последующие биты будут записаны в соответствующий регистр.
  • UMSEL (Mode Select) — при записи 1 в данный бит происходит синхронная передача данных, а при записи 0 – асинхронная.
  • UPM0,UPM1 (Parity Mode) — Данные биты позволяют настроить контроль четности передаваемых данных.
  • USBS(Stop Bit Select) — Данный бит позволяет выбрать число стоп-битов. При записи 1 в данный бит число стоп-битов станет равно 2, а при записи 0 — 1.
  • UCSZ1,UCSZ0 (Character Size) — В совокупности с битом UCSZ2 регистра UCSRB данные биты позволяют выбрать число передаваемых бит.

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

Регистры UBRRL и UBRRH отвечают за настройку скорости работы приемопередатчика. Следует помнить, что при работе с регистром UBRRH бит URSEL должен быть равен 0.

Для получения необходимой скорости работы UART значение UBRR(Пары регистров UBRRH и UBRRL) рассчитывается по следующей формуле:

UBRR = (Fosc/(B*16))-1

Где,

Fosc — частота работы микроконтроллера (Гц).

B — необходимая скорость работы UART (Бит/сек).

Например, необходимо настроить скорость передачи 9600 бит/ сек при работе микроконтроллера на частоте 8 МГЦ(8000000 Гц).

UBRR = (8000000/(9600*16))-1 = 51.083333

Округляем до целого числа, то есть до 51.И уже данное число записываем в регистры UBRRL:UBRRH.

Урок получился достаточно объемным, поэтому практическую реализацию протокола UART на микроконтроллерах AVR рассмотрим в следующем уроке.

Спасибо за внимание!

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

mkprog.ru

4a4ik: Как работать с UART

UART — Universal Asynchronous Receiver-Transmitter,

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

Здесь стречается несколько обозначений, это интерфейс/микросхема/протокол, но в любом случае его основная задача — связать между собой 2 или более устройства, он может быть представлен в виде отдельной микросхемы, быть частью более сложного цифрового устройства (микроконтроллер), либо реализован программно.

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

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

Есть сихронный вариант : USART, в нём скорость передачи зависит от синхроимпульсов.

Скорость передачи данных по UART измеряется в бодах  (в данном случае биты в секунду) другое название битрейт. Есть общепринятый стандарт скоростей, чаще всего используют 9600 бод. Длительность 1 бита : 1/9600 = 104 мкс.

При отсутствии передачи данных, линия передачи выставляется в лог.1, это пассивное состояние (IDLE). Если начинается передача данных сперва поссылается СТАРТ бит (St), на котором лог.0. После него следует от 5 до 9 битов данных.

При желании можно добавить бит паритета (контроля чётности) [P], он может проверять на чётное или не чётное количество единичек в послании (в зависимости от реализации). К примеру если мы проверяем на НЕ чётное число единиц, то в [P] будет передана лог.1 если в нашем сообщении есть 1, 3, 5, 7 или 9 единиц.

В конце идут 1 или 2 СТОП бита (Sp1) [Sp2], (в зависимости от реализации) которые выдают на выход высокий уровень.

После них можно сразу начать передачу другого сообщения.

Рис.1 Передача данных UART


Передача данных может быть только в 1 сторону, это обозначается сленговым словом симплекс (simplex), в 2 стороны поочерёдно — полудуплекс (half duplex) и в обе стороны одновременно — дуплекс (full duplex).

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

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

RS-232

Самый популярный стандарт это RS-232  (Recommended Standard 232).
Логический 0 от +3 В до +15 В.
Логическая 1 от -3 В до -15 В.
К сожалению нет точной характеристики на определение расстояния на который можно передавать данные по данному типу кабеля при заданной скорости.

На «средних скоростях» и с «обычным куском проводов» данные можно передать на ≈ 15 м.
При скорости 115200 бод на 1,5 м.

Изначально для этого стандарта использовались коннекторы с 25 выводами типа D-sub, половину контактов не использовали и перешли на 9 выводов, которые использовали на персональных компьютерах в вместе с интерфейсом под названием COM-порт или Последовательный порт.

Затем опустились до 5 и наконец 3 выводов:
приём (RxD — Received Data),
передача (TxD — Transmitted Data),
земля.

Довольно популярны микросхемы преобразователи USB — RS232, к примеру FT232R.
Они превращают USB порт в «виртуальный» COM-порт. с COM портом проще работать чем с USB, для него легче написать программу и на большинстве цифровых устройств на борту есть UART интерфейс работающий по RS-232 стандарту.

Подробная таблица характеристик нескольких стандартов

RS-485

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

Рис.2 Витая пара

Напряжения передающиеся по проводам от -7 до +12 В. Передача осуществляется по 2 проводам, логический уровень определяется разницей напряжений на этих проводах.
Есть 2 провода A и Б.
Логический 0 — отрицательное напряжение (А-Б
Логическая 1 — Положительное напряжение (А-Б > +200 мВ)

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

Источники:

4a4ik.blogspot.com

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 »

easyelectronics.ru