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

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

UART — Universal Asynchronous Receiver-Transmitter, или по русски Универсальный Асинхронный Приёмопередатчик — УАПП. Используется для организации связи компьютера с различными цифровыми устройствами в электронике. Интерфейс преобразует передаваемые данные в последовательный код так, чтобы была возможна их передача по одной цифровой линии другому электронному устройству. Прямого описания протокола UART все таки есть, но его косвенное описание можно увидеть в стандартах на широко известные физический протоколы RS-232, RS-422, RS-423, RS-485

Поэтому, как такового стандарта интерфейса UART не существует, однако он является неотъемлемой частью следующих стандартов: RS-232(Recommended Standard 232), RS-485, RS/EIA/TIA-423, ISO/IEC 7816, IrPHY, MIDI, DMX-512.

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

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

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

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

Что такое UART интерфейс

Универсальный Асинхронный Приёмопередатчик — УАПП применяется с начала 60-х годов прошлого века и с тех пор претерпевал серьезные модернизации. Даже в 21 столетии последовательные протоколы UART всё ещё представляют один из основных методов обмена битами между различными цифровыми устройствами на небольшие расстояния.

UART является базой так широко используемого в прошлом интерфейса RS-232. В самом простом виде UART интерфейс представляет собой три провода: передача, приём и земля.

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

В данном случае микроконтроллер принимает, и передаёт данные. А можно сделать следующим образом:

В соответствие с этой схемой микроконтроллер всегда передаёт (TX) получателю (RX) и наоборот. Какая из двух схем все таки правильная? Оказывается обе, все зависит только от производителя микросхемы и готового цифрового устройства.

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

Если приемник и передатчик находятся на одной печатной плате, тогда уровень сигнала при приеме-передаче практически равен уровню напряжения питания микроконтроллера. Допустим, уровень логической единицы — «1» будет передаваться с потенциалом 3.3В, а ноль, с потенциалом, не более 0,5 Вольта. С передачей сигнала на большие расстояния начинают появляться проблемы в виде искажения сигнала и растет падение напряжения, появляются ошибки передачи, вплоть до полной остановки.

Для того, чтобы исключить такие проблемы в линию передачи и приема добавляют дополнительные буферы, которые усиливают сигнал. После этого их можно передавать на десятки метров без потери информации. Но в д.с для передачи уровня логической единицы применяется напряжение -3В..-15В, а для «0» — +3В до +15В.

UART интерфейс Начало и конец передачи данных

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

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

Значение скорости передачи не передаётся вместе с сообщением, то в приёмнике и передатчике должны быть заранее заданы равные скорости. Интерфейс UART допускает до 5% рассинхронизации таймеров.

Antananarivo

В этом интервале он может получать и принимать верные информационные данные.

USART универсальный протокол UART интерфейсов для современных микроконтроллеров

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

В современных микроконтроллерах, вместо UART интерфейса используют полностью с ним совместимый стандарт USART (универсальный асинхронный/синхронный приёмопередатчик).

USART это более гибкий в плане настройки UART с дополнительными функциями. В USART можно регулировать длину слова с более большим интервалом (от 5 до 9) чем в UART (от 8 до 9). В USART возможна как синхронная так асинхронная и передача данных (в UART осуществляется только асинхронная). При синхронной передачи помимо двух линий — данных и питания, применяется дополнительная шина (XCK) с синхросигналом. С такой настройкой USART уже пересекается с интерфейсом SPI и его можно применять как «ведущий» в интерфейсе SPI.

Рассмотрим классический случай, когда интерфейс асинхронный (т.е. с отсутствующей линией синхронизации).

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

Скорость (S, бод) и длительность бита (T, секунд) связаны между собой общеизвестной формулой

T=1/S

Байт данных отправляются в пакетах (первый бит идет перед байтом данных и второй бит следует после, количество бит опциональны)

Для приема и передачи данных в интерфейсе UART применяются всего две линии данных и земля:

передающая шина данных (TXD или TX);
принимающая линия данных (RXD или RX);
земля (GND).

Уровню логической единицы и нуля аналогичны типовым уровням TTL:

лог. «1» — +5 Вольт;
лог. «0» 0 Вольт.

Разновидность UART — интерфейс RS-485

Сети, построенные на основе интерфейсов RS-485 и RS-422, представляет собой приемопередатчики, подключенные с помощью витой пары. В основе RS-485 лежит принцип дифференциальной (балансной) передачи данных. Основа ее базируется на передаче одного сигнала по двум проводам. Причем по первому проводу (A) интерфейса следует оригинальный сигнал, а по второму — его инверсная копия. Простыми словами, если на А «1», то на В «0» и наоборот, т.е, между двумя проводами витой пары всегда существует разность потенциалов: при «1» уровне она положительная, при «нулевом» — отрицательная.

Подскажите начинающему по Verilog’у(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))


Отправлено dxp 08 апреля 2004 г.

Rencontres Du Film Court Antananarivo

17:14

Уперся, наконец, в то, что AHDL’я родимого перестало хватать (глобально). Из достойного (VHDL, Verilog) был выбран по ряду причин Verilog. Начал копать, и тут, как и следовало ожидать, вопросы полезли, как грибы после дождя.

Вот, к примеру, написал такой модуль сдвигового регистра.

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

module ShiftReg(clk, in, out, load);

input clk;
input [7:0] in;
input load;
output out;

reg [7:0] Reg;

always @(posedge clk)
begin
if(load)
Reg = in;
else
Reg = {0,Reg[7:1]};
end

assign out = Reg[0];

endmodule

Компилятор, во-первых, выдает:

FF/Latch

Главная » ПЛИС VHDL Verilog

Интерфейс RS232 или UART прием и передача на VHDL

Тема UART или интерфейса RS232 на  VHDL уже подымалась на нашем ресурсе. Данный пост это развитие темы UART VHDL в более продвинутой манере кодирования на VHDL. Приведенный далее код приемника и передатчика RS232 работает, можно сказать, безупречно в широком диапазоне скоростей вплоть до 115200 бод/сек. Код найден на просторах глобальной сети, немного доработан, просимулирован в Modelsim, протестирован и используется в реально действующих проектах. В конце поста имеется ссылка для загрузки полного проекта UART для Quartus11.0.

Проект содержит полный рабочий код RS232 приемника, передатчика и верхнеуровневого модуля для проверки их работоспособности на симуляторе Modelsim 6.6d. На картинке ниже представлена диаграмма работы RS232 на передачу и на прием на скоростях 115200 и 57600 бод/сек соответственно. На вход передатчика (din) поступают побайтно данные 0х55, 0хAA, 0x01 которые затем последовательно выводятся на выход (tx). На вход приемника (rx) поступают последовательные данные 0х55, 0хAA, 0x02 которые последовательно появляются на выходе (dout).

Все то же самое можно просмотреть непосредственно из проекта Uart_Quartus110. Для этого достаточно его открыть в среде Quartus11.0 и затем выполнить простейшую операцию по запуску временного симулирования в ModelSim6.6d. Все подробно описано в посте о временной симуляции в Quartus+ModelSim. Если коротко то из главного меню Quartus необходимо выполнить команду EDA Gate Level Simulation…

Все необходимые установки для данного вида симуляции уже выполнены, файл тестбенча Uart.vht подготовлен. Далее можно поварьировать скоростями в тестбенче, не забывая при этом поменять соответствующие установочные скорости UART приемника и передатчика в верхнеуровневом файле Uart.vhd в картах соединений компонентов исходя из того что исходная частота бод в верхнеуровневом модуле выставлена 115200 бод/сек. Например, для того, чтобы изменить частоту бод для RS232 приемника в сторону уменьшения можно в generic map записать BAUDRATE => BAUDRATE/3. В этом случае UART приемник будет работать на частоте 115200/3 — 38400 бод/сек.

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

Тоесть в участке кода ниже текста "— данные на вход приемника" вместо bod_period*2 необходимо записать bod_period*3. Примерно так-же можно варьировать скоростью и для RS232 передатчика. При этом может также понадобиться увеличить время симуляции в файле Uart_ms.do до 2…3ms.

Путеводитель по Антананариву

Ну, как-то так. Дерзайте.

Ps. Полезный ресурс где представлен альтернативный вариант RS232 на Verilog.

комментариев: ()

Перейти и растаять в своей любимой социалке

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

Закрыть меню