[Home] [Donate!] [Контакты]

UART и USART. COM-порт. Часть 1

UART (Universal Asynchronous Receiver/Transmitter) - универсальный асинхронный приёмопередатчик, интерфейс для связи цифровых устройств, предназначенный для передачи данных в последовательной форме.

USART (Universal Synchronous-Asynchronous Receiver/Transmitter) - универсальный синхронно-асинхронный приёмопередатчик - аналогичный UART интерфейс, но дополнительно к возможностям UART, поддерживает режим синхронной передачи данных - с использованием дополнительной линии тактового сигнала.

Оглавление
UART и USART. COM-порт. Часть 1
UART и USART: введение
Варианты подключения UART
Формат передачи данных UART
Управление потоком данных
COM-порт (интерфейс стандарта RS-232)
Гальваническая развязка для COM-порта
USART в STM32 (STM32F100xx)
Регистры USART в микроконтроллерах STM32F100xx
UART и USART. COM-порт. Часть 2

UART и USART: введение

Интерфейсы UART/USART, несмотря на их солидный возраст, до сих пор находят широкое применение, очень распространены и весьма востребованы. Имеют аппаратную реализацию во многих микроконтроллерах. Например, микроконтроллеры STM32 из семейства STM32F100xx, в зависимости от варианта исполнения, содержат 2 или 3 USART. Синхронная передача используется гораздо реже асинхронной и обычно USART используется в режиме UART.

UART может применяться как для осуществления взаимодействия компонентов внутри одного устройства, так и для подключения устройств между собой. Для внешних подключений сигналы с уровнями логики ТТЛ или КМОП подходят мало из-за низкой помехоустойчивости. Распространённым стандартом физического уровня для UART, который подходит для подключения внешних устройств является RS-232. Этому стандарту, в частности, соответствует последовательный порт (COM-порт) компьютера. Так что, микроконтроллер с помощью схемы преобразования уровней может обмениваться информацией с COM-портом компьютера, но об этом чуть позже.

Варианты подключения UART

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

Выход обозначают TD или TX (transmitted data), вход - RD или RX (received data). Для подключения двух устройств выход одного подключают ко входу другого и вход первого - к выходу второго.

Связь двух UART
Рис. %img:uc1

Возможен вариант использования UART для полудуплексной двунаправленной связи по одному проводу. В этом случае выводы TX и RX каждого устройства соединяют вместе. Всё время, пока устройства не передаёт данных, оно держит выход в отключённом состоянии (переводит в Z-состояние, состояние с высоким сопротивлением; можно использовать режим работы с открытым стоком - во время паузы в передаче на выходе UART формируется лог. 1, что равносильно переходу в Z-состояние). Устройство может иметь аппаратную поддержку полудуплексного обмена данными, тогда требуется лишь выбрать нужный режим работы. Если аппаратной поддержки нет, полудуплексный режим легко реализуется программно. Для этого нужно отключать передатчик, когда устройство не передаёт данных, чтобы освободить линию для осуществления передачи другими устройствами и отключать приёмник во время работы своего передатчика, чтобы не принимать собственную передачу (либо программно отбрасывать данные, передаваемые своим передатчиком).

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

Однопроводная сеть UART
Рис. %img:un

Как видим, объединять устройства с помощью UART очень просто. Для двунаправленного подключения требуются только три проводника (с учётом общего провода), а для однонаправленного или двунаправленного полудуплексного - всего два.

Формат передачи данных UART

В отсутствии передачи на выходе UART присутствует уровень лог. 1.

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

Формат передачи данных UART
Рис. %img:uf

Посылка начинается со стартового бита, он всегда имеет значение лог. 0. После стартового бита передаются биты данных. Количество битов данных может составлять 5-9 в зависимости от настроек UART. Обычно передаётся 8 бит данных или 9 бит (8 бит собственно данных и один бит чётности). Завершается посылка стоп-битами, их значение - всегда лог. 1, количество обычно составляет 1, 1.5 или 2. Под количеством стоп-битов понимается длительность соответствующего им единичного импульса по отношению к длительности битов данных и старт-бита. Этим объясняется возможность выражать количество битов дробным числом. Сразу же после стоп-битов может начинаться передача следующей посылки или может быть пауза произвольной длительности, во время которой на выходе также формируется уровень лог. 1.

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

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

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

Согласование скоростей передатчика и приёмника UART
Рис. %img:ug

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

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

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

Аппаратное управление потоком данных UART
Рис. %img:ufc

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

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

COM-порт (интерфейс стандарта RS-232)

COM-порт - интерфейс компьютера, соответствующий стандарту RS-232. Раньше компьютеры, как правило, имели два COM-порта. Затем COM-порт начал вытесняться USB-интерфейсом и сейчас у компьютера может быть всего один COM-порт или вообще ни одного. Если в компьютере отсутствует COM-порт, то можно использовать переходник USB-COM.

Хотя он и считается устаревшим для использования в компьютерах, тем не менее, интерфейс стандарта RS-232 ещё не утратил полностью своего значения и существует оборудование, где он используется. Интерфейс не обеспечивает высокой скорости передачи данных (максимум 115200 бод), но зато прост и дёшев в реализации, надёжен.

RS-232 является стандартом физического уровня для интерфейса UART. Он определяет набор используемых сигнальных линий и уровни для сигналов. Используемые уровни сильно отличаются от традиционных ТТЛ или КМОП-уровней. Во-первых, используются двухполярные сигналы, во-вторых - сигнал положительной полярности соответствует логическому нулю. Для согласования уровней сигналов интерфейса RS-232 и остальной части схемы на обычной логике, используются специализированные микросхемы для преобразования уровней.

Для сигналов используются следующие уровни.

Для драйвера (выход):
+5..+15 В - лог. 0 (SPACE);
-5..-15 В - лог. 1 (MARK).

Вход должен иметь сопротивление в пределах 3..7 кОм и должен быть рассчитан на сигналы:
+3..+25 В - лог. 0;
-3..-25 В - лог. 1.

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

Сигналы интерфейса RS-232
COM RS-232 DB-9P DB-25P I/O Назначение
PG AA 5 1 - Protective Ground - защитная земля, соединяется с корпусом прибора.
SG AB 5 7 - Signal Ground - общий провод для сигнальных линий.
TD BA 3 2 O Transmitted data - передача данных из порта.
RD BB 2 3 I Received Data - приём данных в порт.
RTS CA 7 4 O Request to send - запрос COM-порта на передачу данных (сигнал COM-порта о готовности принимать данные).
CTS CB 8 5 I Clear to send - вход для разрешения COM-порту передавать данные.
DSR CC 6 6 I Data set ready - вход сигнала готовности от подключённого к порту устройства.
DTR CD 4 20 O Data terminal ready - сигнал готовности COM-порта к обмену данными.
CD CF 1 8 I Carrier Detected - сигнал обнаружения несущей (от модема).
RI CE 9 22 I Ring indicator - сигнал от модема о получении звонка.

В таблице указаны обозначения для сигналов принятые для COM-порта, обозначения в соответствии с RS-232, номера выводов в разъёмах и краткое описание назначения сигналов.

Для подключения к интерфейсу используются 25-контактные или 9-контактные разъёмы (DB25, DB9). Первоначально применялись 25-контактные разъёмы, но многие сигналы не использовались устройствами. В связи с этим произошёл переход к 9-контактным разъёмам. В оконечном оборудовании используются разъёмы типа вилка (Pin): DB-9P. В аппаратуре передачи данных (модемы, например) используются разъёмы типа розетка (Socket): DB-9S.

Гальваническая развязка для COM-порта

Схема гальванической развязки для интерфейса RS-232
Рис. %img:rss

Для преобразования сигналов между уровнями ТТЛ/КМОП логики и уровнями RS-232 существуют специализированные микросхемы.

Также есть варианты очень простых схем на оптронах, которые обеспечивают не только согласование уровней, но и гальваническую развязку между подключаемыми устройствами - очень ценное свойство схемы. Выше приведён пример такой схемы. С указанными номиналами элементов обеспечивает скорость передачи до 2400 бод. Уменьшая сопротивление резистора R5, можно увеличить быстродействие (скорость 9600 бод достижима практически на любых оптронах).

Аппаратный контроль потоком данных по линиям CTS/RTS здесь не используется. Питание схемы со стороны COM-порта осуществляется от сигнальных линий самого COM-порта, но для её работы требуется программная конфигурация COM-порта: на выходе RTS должен быть установлен уровень лог. 1 (-5..-15 В), а на выходе DTR - уровень лог. 0 (+5..+15 В). Это существенный недостаток схемы, требующий учёта в программе для компьютера, обычные программы-терминалы не будут правильно работать. Недостаток устраним, но тогда схема станет менее простой.

Работает предложенная схема гальванической развязки для COM-порта следующим образом. Когда на TD выходе UART установлен уровень лог. 0 (обычные КМОП-уровни для микроконтроллеров), ток через светодиод оптрона U1 отсутствует, транзистор оптрона заперт, за счёт резистора R1 от выхода DTR(+) COM-порта на входе RD устанавливается положительный относительно общего провода потенциал, что соответствует уровню лог. 0 для RS-232. Если на выходе TD устройства UART установлена лог. 1, транзистор оптрона U1 открывается и RD вход COM-порта подключается к выходу RTS (-), за счёт чего на входе RD формируется отрицательный потенциал (лог. 1 для RS-232).

Оптрон U2 отвечает за передачу данных в обратном направлении. Когда на TD выходе COM-порта установлен уровень лог. 0 (положительный потенциал), транзистор оптрона U2 открывается, формируя лог. 0 на входе UART. Если на выходе TD COM-порта устанавливается лог. 1 (отрицательный потенциал), транзистор оптрона U2 закрывается и за счёт подтягивающего к высокому уровню резистора на входе RD устройства UART формируется логическая 1.

Если разъём P1 отключён от COM-порта, или компьютер выключен, то это будет восприниматься как "линия свободна" (отсутствие передачи данных), на вход USART микроконтроллера при этом будет подаваться лог. 1. Допускается подключение разъёма P1 к COM-порту работающего компьютера, это не приведёт к повреждению оборудования, но в некоторых случаях, в момент подключения, компьютер может получить какое-то количество случайных байтов.

D1, D2 - защищают светодиоды оптронов от обратного напряжения.
R1 - формирует смещение на входе RD COM-порта при закрытом транзисторе оптрона U1.
R2, R3 - ограничивают ток через светодиоды оптронов.
R4 - защищает вывод микроконтроллера от неправильного подключения или неправильного конфигурирования его режима работы, можно заменить перемычкой.
R5 - внешний подтягивающий резистор. Сопротивление внутреннего подтягивающего резистора микроконтроллера довольно велико и подключение внешнего улучшает скоростные характеристики канала передачи от COM-порта к UART микроконтроллера (уменьшает время переключения из состояния лог. 0 в лог. 1 на входе RD устройства UART). Может быть исключён.

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

USART в STM32 (STM32F100xx)

USART в микроконтроллерах STM32 предоставляет гибкие средства для полнодуплексного обмена данными с внешними устройствами в последовательном формате с возможностью поддержки сигналов CTS/RTS; поддерживает полудуплексный обмен по однопроводной линии; может работать в широком диапазоне скоростей передачи. В мультибуферном режиме DMA достигается высокая скорость передачи данных, максимальное значение составляет 3 Мбит/с. Также поддерживается однонаправленная передача в синхронном режиме; мультипроцессорная связь; LIN (local interconnection network) - сеть для локальной связи; smartcard протокол; инфракрасный протокол в соответствии со спецификацией IrDA (infrared data association) SIR ENDEC.

Основные возможности:

Функциональная схема USART в микроконтроллерах STM32.

Функциональная схема USART в микроконтроллерах STM32
Рис. %img:ust

SW: Single Wire - вывод для однопроводного подключения устройств.

В обычном двунаправленном полнодуплексном режиме требуется как минимум два вывода для подключения USART: RX (Receive Data In) и TX (Transmit Data Out).

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

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

SCLK: выход для тактового сигнала при синхронной передаче данных, соответствует мастер-режиму SPI. Тактовые импульсы не формируются во время старт и стоп-битов. Наличие импульса во время передачи последнего бита данных определяется программно. Параллельно может происходить синхронный приём данных на входе RX. Фаза и полярность импульсов задаются программно. В режиме смарт-карты вывод SCLK может формировать тактовый сигнал для смарт-карты.

IrDA_RDI: Receive Data Input - вход для получаемых данных в IrDA режиме.

IrDA_TDO: Transmit Data Output - выход для передаваемых данных в IrDA режиме.

nCTS: Clear To Send - высокий уровень на входе приостанавливает передачу данных после завершения текущей посылки.

nRTS: Request to send - низкий уровень на этом выходе сигнализирует о готовности USART принимать данные.

Программно приём и передача данных через интерфейс USART осуществляется путём чтения и записи регистра данных DR. Записываемые в регистр данные помещаются в регистр передаваемых данных TDR, а затем, когда завершится текущая передача, копируются в передающий сдвигающий* регистр. Если в данный момент ничего не передаётся, данные сразу помещаются в сдвигающий регистр. Сдвигающий регистр преобразует данные из параллельной формы представления в последовательную: схема управления с заданной тактовой частотой сдвигает содержимое регистра на 1 бит вправо. Сдвигаемые биты, начиная с младшего, подаются на выход USART. Кроме того, схема управления формирует стартовый бит, бит чётности (если используется) и стоп-биты.
* Сдвигающий регистр также называют регистром сдвига или сдвиговым регистром.

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

Принимаемые данные попадают в приёмный сдвигающий регистр. Когда приём фрейма завершается, данные из приёмного сдвигающего регистра помещаются в регистр принимаемых данных (RDR), откуда они могут быть прочитаны путём чтения регистра данных DR. Такое устройство регистра данных позволяет одновременно передавать и получать данные.

Далее смотрите подробное описание всех регистров устройства USART в микроконтроллерах STM32: "Регистры USART в микроконтроллерах STM32F100xx".

А также несколько примеров использования USART для передачи данных: "UART и USART. COM-порт. Часть 2".

author: hamper; date: 2016-01-19; modified: 2016-01-27
  Рейтинг@Mail.ru