3.18. Основы UART

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

3.18.1. Кадр

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

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

Один кадр UART: стартовый бит, восемь битов данных и стоповый бит, каждый шириной в один битовый период (1 / baudrate секунд).

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

3.18.2. Скорость передачи (бод)

Битовый период – и скорость канала – задаётся скоростью передачи (бод), числом битов в секунду. 9600, 19200, 38400, 57600, 115200, 230400, 460800 и 921600 – это стандартные значения; 115200 – самое распространённое значение по умолчанию. Оба конца должны согласовать скорость передачи с точностью до нескольких процентов, иначе приёмник опрашивает биты не в тех точках и данные приходят искажёнными.

Более высокие скорости передачи передают больше данных в секунду, но более чувствительны к длине кабеля, ёмкости и точности тактовых генераторов на каждом конце. Для коротких каналов между двумя платами на одном столе 115200…``921600`` работают без проблем.

3.18.3. Подключение

Канал UART использует три провода:

Две платы, обозначенные A и B, соединённые тремя проводами. Вывод TX платы A подключён к выводу RX платы B; вывод TX платы B подключён к выводу RX платы A; а выводы земли обеих плат соединены вместе.

Подключение UART: TX на одной плате идёт на RX на другой, а обе земли соединены.

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

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

3.18.4. Уровни напряжения и физические уровни

Уровни сигнала на выводах UART камеры – это 3,3 В CMOS: земля для логического нуля, 3,3 В для логической единицы. Всё, что использует UART на уровне 3,3 В CMOS – другой микроконтроллер, переходник USB-в-serial, настроенный на 3,3 В, модуль GPS на 3,3 В – можно подключать напрямую.

Примечание

Устройства UART на 5 В CMOS (более старые микроконтроллеры, некоторые модули GPS, некоторые старые платы датчиков) используют тот же формат кадров UART, но на логических уровнях 5 В. Подключать их напрямую к камере небезопасно: TX на 5 В, управляющий выводом RX камеры, превышает абсолютно максимальное входное напряжение на камерах, которые не толерантны к 5 В, а TX камеры на 3,3 В может не достичь высокого порога устройства на 5 В для чёткой логической единицы.

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

Активный драйвер линии формирует чёткие фронты в обоих направлениях на полных скоростях UART. Выберите компонент, рассчитанный на скорость передачи, на которой будет работать канал, подключите TX и RX камеры к стороне 3,3 В преобразователя, а TX и RX устройства на 5 В – к стороне 5 В преобразователя.

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

  • RS-232. Используется последовательными портами на настольных ПК и некотором промышленном оборудовании. Линия колеблется примерно от ±5 V до ±15 V, с простоем на отрицательном уровне. По сравнению с CMOS – инвертированная полярность и высокое напряжение; преобразование выполняет микросхема семейства MAX232 / MAX3232 (или аналогичная).

  • RS-422. Стандарт дифференциальной сигнализации для каналов точка-точка (один передатчик, до десяти приёмников). Передатчик передаёт по сбалансированной паре проводов; приёмник видит разницу между ними и игнорирует синфазные помехи на пути. Полнодуплексные каналы используют две пары – по одной на каждое направление. RS-422 достигает от десятков метров до километра в зависимости от скорости передачи, а микросхема приёмопередатчика RS-422 устанавливается между TX / RX камеры и сбалансированной парой.

  • RS-485. Многоточечный собрат RS-422 – та же дифференциальная сигнализация, но рассчитанная на подключение до 32 передатчиков и приёмников на одну шину. Большинство каналов полудуплексные на одной паре, где передатчик и приёмник каждого узла используют одни и те же провода, а программное обеспечение арбитрирует, кто говорит. Используется в промышленных шинах автоматизации (Modbus, DMX512, Profibus), где провода идут далеко, а помехи сильны; микросхема приёмопередатчика RS-485 устанавливается между TX / RX камеры и дифференциальной парой.

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