3.18. Основы UART¶
UART (Universal Asynchronous Receiver-Transmitter, универсальный асинхронный приёмопередатчик) – это самый старый и самый простой способ передавать байты между двумя микроконтроллерами или между микроконтроллером и хост-ПК. Данные передаются по двум проводам – по одному на каждое направление – а общая земля возвращает сигнал. Ни одна из сторон не использует общий тактовый сигнал; они заранее договариваются о скорости передачи (бод) и восстанавливают тайминг битов по самой линии данных.
3.18.1. Кадр¶
Каждый символ в линии заключён в кадр: стартовый бит, биты данных, необязательный бит чётности и один или два стоповых бита.
Один кадр UART: стартовый бит, восемь битов данных и стоповый бит, каждый шириной в один битовый период (1 / baudrate секунд).¶
Линия простаивает на высоком уровне. Приёмник следит за спадающим фронтом, который отмечает начало нового кадра. Затем он опрашивает линию данных раз за битовый период – обычно в середине каждого бита – и собирает биты обратно в символ. Стоповый бит возвращает линию в состояние простоя, чтобы можно было обнаружить следующий стартовый бит.
3.18.2. Скорость передачи (бод)¶
Битовый период – и скорость канала – задаётся скоростью передачи (бод), числом битов в секунду. 9600, 19200, 38400, 57600, 115200, 230400, 460800 и 921600 – это стандартные значения; 115200 – самое распространённое значение по умолчанию. Оба конца должны согласовать скорость передачи с точностью до нескольких процентов, иначе приёмник опрашивает биты не в тех точках и данные приходят искажёнными.
Более высокие скорости передачи передают больше данных в секунду, но более чувствительны к длине кабеля, ёмкости и точности тактовых генераторов на каждом конце. Для коротких каналов между двумя платами на одном столе 115200…``921600`` работают без проблем.
3.18.3. Подключение¶
Канал UART использует три провода:
Подключение 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 камеры (скорость передачи, биты, чётность, стоповые биты) одинакова независимо от того, какой физический уровень несёт сигнал по другую сторону приёмопередатчика.