Интерфейс RS-232
RS-232 — последовательный интерфейс «точка — точка» с биполярными уровнями: передатчик выдаёт ±5…±15 В, приёмник различает сигнал уже при ±3 В, а логическая «1» передаётся минусом. Ниже — параметры стандарта, распиновка DE-9 и DB-25, нуль-модемные кабели, преобразователи MAX232 и MAX3232 и подключение к микроконтроллеру с примером кода.
Обновлено Редакция GAW
Содержание
- Стандарт RS-232: TIA-232-F, V.24 и V.28
- Уровни сигналов RS-232
- Электрические параметры по TIA-232-F и ITU-T V.28
- Скорость и длина линии RS-232
- Разъёмы и распиновка DE-9 (DB9) и DB-25
- DTE и DCE: прямой и нуль-модемный кабель
- Управление потоком: RTS/CTS, DTR/DSR и XON/XOFF
- Кадр UART на линии RS-232
- Скорость передачи и точность тактирования
- Преобразователи уровней: MAX232, MAX3232 и аналоги
- USB–UART: FT232R, CP2102, CH340 и уровни TTL
- Подключение RS-232 к микроконтроллеру
- Типичные ошибки и отладка
RS-232 — стандарт физического уровня для последовательной передачи данных между двумя устройствами: оконечным оборудованием данных (DTE — терминал, компьютер) и аппаратурой окончания канала данных (DCE — например, модем). Действующая редакция называется TIA-232-F; её электрические характеристики согласованы с рекомендацией ITU-T V.28, а назначение цепей — с V.24. Каждый сигнал идёт по своему проводу относительно общей земли, и логическая «1» передаётся отрицательным напряжением, а «0» — положительным.
Интерфейс создавали для подключения модемов, но с распространением персональных компьютеров он стал стандартным недорогим последовательным портом: к нему подключали мыши, принтеры, плоттеры, сканеры и измерительные приборы (TI, SLLA037A). По стандарту скорость не выше 20 кбит/с, современные драйверы держат 120–250 кбит/с на коротком кабеле.
Коротко
- Уровни: передатчик — от 5 до 15 В любой полярности на нагрузке 3–7 кОм, приёмник — порог ±3 В; между −3 и +3 В состояние не определено.
- Инверсная логика: «1» (MARK) и покой линии — минус, «0» (SPACE) — плюс; сигналы управления включены при плюсе.
- Скорость и длина: по стандарту до 20 кбит/с и до 2500 пФ ёмкости линии — около 15–20 м; быстрые драйверы — до 250 кбит/с на кабеле около 3 м.
- Разъём DE-9 («DB9») у компьютера: 2 — RxD, 3 — TxD, 5 — общий провод; для связи хватает этих трёх.
- Точка — точка: на каждой линии один передатчик и один приёмник, дуплекс по TxD и RxD, общий провод обязателен.
- Преобразователи: MAX232 — 5 В и четыре конденсатора по 1 мкФ, MAX3232 — от 3 до 5,5 В и по 0,1 мкФ.
Стандарт RS-232: TIA-232-F, V.24 и V.28
Ассоциация EIA выпустила стандарт в 1962 году, чтобы унифицировать подключение терминала к модему. Главные редакции:
| Редакция | Год | Что важно |
|---|---|---|
| EIA RS-232 | 1962 | первая редакция |
| RS-232-C | 1969 | кабель короче 15 м рекомендован, более длинный допустим при соблюдении нормы ёмкости |
| EIA-232-D | 1986 | вместо длины кабеля — ёмкость нагрузки до 2500 пФ; цепи шлейфовых проверок на контактах 18, 21 и 25 |
| EIA/TIA-232-E | 1991 | цепь «готов к приёму» и аппаратное управление потоком через RTS/CTS; компактный 26-контактный разъём Alt A |
| TIA-232-F | 1997 | действующая; без изменений, нарушающих совместимость, согласована с V.24, V.28 и ISO/IEC 2110 |
| EIA/TIA-574 | 1990 | отдельный стандарт на 9-контактный разъём для асинхронного обмена |
Стандарт описывает интерфейс с трёх сторон: электрические характеристики сигналов (ITU-T V.28), функции цепей обмена (ITU-T V.24) и механику — 25-контактный разъём D-типа с назначением контактов (ISO/IEC 2110). Функции назначены 22 контактам из 25, но полный набор почти не встречается. RS-232 годится и для синхронной передачи: тактовые сигналы идут по контактам 15, 17 и 24 разъёма DB-25. Девятиконтактный вариант по EIA/TIA-574 рассчитан только на асинхронный обмен, цепей синхронизации в нём нет.
Формат кадра — старт-бит, данные, чётность, стоп-биты — RS-232 не задаёт: его определяют UART и протокол обмена.
RS-232 и UART — не одно и то же
UART (universal asynchronous receiver/transmitter) — узел микросхемы, который превращает байт в последовательность бит: добавляет старт- и стоп-биты, при необходимости бит чётности, и выполняет обратное преобразование на приёме. На выводах UART микроконтроллера — логические уровни: «1» — высокий уровень, 3,3 или 5 В, «0» — около нуля, в покое линия в «1». Такой вариант в обиходе называют «UART с уровнями TTL» или просто TTL.
RS-232 передаёт тот же кадр иначе: уровнями ±5…±15 В и в инверсии — «1» превращается в минус, «0» в плюс. Преобразователь вроде MAX3232 одновременно сдвигает уровень и инвертирует сигнал (Maxim, AN2141). UART — это то, что передаётся, а RS-232 — один из способов передать это по кабелю. Есть и другие: RS-485 для длинных линий, оптопары, логические уровни внутри одного прибора.
Уровни сигналов RS-232
Передатчик, нагруженный на 3–7 кОм, должен выдавать от 5 до 15 В по модулю. Приёмник обязан распознать «1», если напряжение ниже −3 В, и «0», если выше +3 В. Полоса от −3 до +3 В — переходная зона: состояние в ней не определено, и сигнал проходит её только на фронте (V.28, разделы 4–6). Разница между 5 В на выходе и 3 В на входе — запас помехоустойчивости не меньше 2 В (TI, SLLA037A).
Логика инверсная, и правила для цепей данных и управления разные (V.28, таблица 1):
| Напряжение на линии | Цепи данных: TxD, RxD | Цепи управления: RTS, CTS, DTR, DSR, DCD, RI |
|---|---|---|
| ниже −3 В | «1», MARK | OFF, выключено |
| от −3 до +3 В | не определено | не определено |
| выше +3 В | «0», SPACE | ON, включено |
Когда передавать нечего, линия данных стоит в MARK, под минусом; старт-бит переводит её в SPACE, на плюс. С сигналами управления наоборот: «DTR включён» означает плюс на контакте 4.
Реальные приёмники точнее стандарта. У MAX232 порог при нарастании напряжения — 1,7 В типично (не больше 2,4 В), при спаде — 1,2 В (не меньше 0,8 В), гистерезис около 0,5 В (TI). Поэтому сигнал 0/5 В от логики часто проходит через приёмник RS-232 — правда, инвертированным и без гарантий стандарта. Вход приёмника внутри стянут к земле резистором около 5 кОм, и при оборванном кабеле приёмник выдаёт «1», как в покое (таблица функций MAX232). V.28 описывает именно такую реакцию на обрыв: цепи данных считаются в «1», цепи управления — в OFF.
Электрические параметры по TIA-232-F и ITU-T V.28
| Параметр | Значение | Примечание |
|---|---|---|
| Напряжение передатчика без нагрузки | не больше 25 В по модулю | V.28 — не больше 15 В и предупреждает, что у старого оборудования бывает до 25 В |
| Напряжение передатчика на нагрузке 3–7 кОм | от 5 до 15 В по модулю | любой полярности |
| Сопротивление нагрузки — входа приёмника | 3–7 кОм | по постоянному току, при входном напряжении 3–15 В по модулю |
| Напряжение холостого хода входа приёмника | не больше 2 В | |
| Ёмкость нагрузки | не больше 2500 пФ | вместе с кабелем и входом приёмника |
| Пороги приёмника | −3 и +3 В | между ними — переходная зона |
| Время прохождения переходной зоны | не больше 4 % длительности бита и не больше 1 мс | V.28 — 3 %; для сигналов управления — до 1 мс |
| Скорость нарастания | не больше 30 В/мкс | ограничивает перекрёстные помехи между жилами |
| Ток короткого замыкания | не больше 0,5 А | между любыми двумя цепями, по V.28 |
| Сопротивление выключенного передатчика | не меньше 300 Ом | при напряжении до 2 В |
| Скорость передачи | до 20 кбит/с | приложение A к V.28 — до 64 кбит/с для существующего оборудования |
Сопротивление 3–7 кОм — это вход самого приёмника, а не отдельный резистор: у MAX232 и MAX3232 входное сопротивление 3–7 кОм, типично 5 кОм. Передатчик обязан выдерживать обрыв и замыкание на любую другую цепь без повреждения (V.28, раздел 4), и реальные микросхемы ограничивают ток намного жёстче, чем требует норма: MAX232 — ±10 мА типично, MAX3232 — ±35 мА типично и не больше ±60 мА.
Норма для выключенного передатчика — не меньше 300 Ом при напряжении до 2 В — стоит в разделе V.28 об обнаружении неисправностей: выключенного питания, обрыва или замыкания кабеля, отсутствия передатчика на другом конце.
Скорость и длина линии RS-232
Предел стандарта — 20 кбит/с. Его задают две нормы: скорость нарастания не больше 30 В/мкс, чтобы фронты не наводили помехи на соседние жилы, и время прохождения переходной зоны не больше 4 % длительности бита. Зону шириной 6 В сигнал со скоростью 30 В/мкс проходит минимум за 0,2 мкс; бит должен быть в 25 раз длиннее — 5 мкс, отсюда теоретический потолок 200 кбит/с. На практике TI оценивает его в 120 кбит/с (SLLA037A). Приложение A к V.28 разрешает существующему оборудованию работать до 64 кбит/с, если ограничить ёмкость линии или принять постоянное время перехода 1,5 мкс.
Длину кабеля RS-232-C рекомендовала держать до 15 м (50 футов), но разрешала и длиннее при соблюдении нормы ёмкости. С редакции D ограничение сформулировано только через ёмкость: не больше 2500 пФ на цепь вместе со входом приёмника. TI оценивает это в 15–20 м в зависимости от ёмкости кабеля. Для конкретного кабеля:
где — входная ёмкость приёмника (TI закладывает до 20 пФ), — ёмкость жилы относительно остальных жил и экрана на метр длины, из документации на кабель. Например, при 130 пФ/м получается около 19 м. Экран увеличивает погонную ёмкость, поэтому экранированный кабель допускает меньшую длину, чем такой же без экрана.
На скоростях выше 20 кбит/с длину ограничивает ток передатчика: чтобы перезарядить ёмкость линии за 4 % бита, нужны десятки миллиампер. Поэтому для высоких скоростей TI на практике ограничивает кабель примерно 3 м.
| Скорость | Длина кабеля | Основание |
|---|---|---|
| до 20 кбит/с | пока ёмкость линии не больше 2500 пФ — около 15–20 м | TIA-232-F, V.28; оценка TI |
| до 20 кбит/с | до 15 м | рекомендация RS-232-C |
| 115,2–250 кбит/с (MAX232, MAX3232) | около 3 м | оценка TI для скоростей выше 20 кбит/с |
Драйверы работают быстрее стандарта, но при оговорённой нагрузке: MAX232 — 120 кбит/с, MAX3232 — 250 кбит/с типично и не меньше 150 кбит/с на нагрузке 3 кОм и 1000 пФ (TI). Если нужно дальше или быстрее, RS-232 меняют на RS-485: дифференциальная пара работает на сотнях метров.
Разъёмы и распиновка DE-9 (DB9) и DB-25
TIA-232 описывает 25-контактный разъём D-типа; в редакции E к нему добавлен компактный 26-контактный Alt A. Девятиконтактную распиновку используют компьютеры IBM PC/AT и совместимые, и её закрепили отдельным стандартом EIA/TIA-574 (Black Box). По стандарту у DTE — вилка со штырями, у DCE — розетка с гнёздами, а кабель относится к DTE (Datapro, RS-232-C и 232-E). COM-порт компьютера — это DTE с вилкой DE-9.
Почему «DB9» — неправильное, но привычное название
Разъёмы D-sub обозначают буквой размера корпуса и числом контактов. В каталоге ITT Cannon корпус A — для 15 контактов, B — 25, C — 37, D — 50, E — 9. Девятиконтактный разъём — DE-9, а «DB-9» означал бы 9 контактов в корпусе 25-контактного. Название DB9 прижилось по аналогии с DB-25 и встречается даже в документах производителей микросхем, так что в магазине и в поиске это один и тот же разъём.
| DE-9 | DB-25 | Цепь V.24 | Сигнал | У DTE | Назначение |
|---|---|---|---|---|---|
| 1 | 8 | 109 | DCD | вход | DCE принимает сигнал линии, например несущую удалённого модема |
| 2 | 3 | 104 | RxD | вход | принимаемые данные |
| 3 | 2 | 103 | TxD | выход | передаваемые данные |
| 4 | 20 | 108/2 | DTR | выход | DTE готов к работе |
| 5 | 7 | 102 | GND | — | сигнальная земля, общий провод |
| 6 | 6 | 107 | DSR | вход | DCE готов к работе |
| 7 | 4 | 105 | RTS | выход | запрос передачи; при управлении потоком — «готов к приёму» |
| 8 | 5 | 106 | CTS | вход | DCE готов принимать данные для передачи |
| 9 | 22 | 125 | RI | вход | входящий вызов |
| — | 1 | — | экран | — | соединение с корпусом; в RS-232-C — защитная земля |
Компьютерный порт DE-9 — это три выхода (TxD, RTS, DTR) и пять входов (RxD, CTS, DSR, DCD, RI). Под такой набор выпускают микросхемы на три передатчика и пять приёмников, например SN75C185 (TI). Для простой связи достаточно контактов 2, 3 и 5. Остальные контакты DB-25 — вторичный канал, синхронизация, шлейфовые проверки — в асинхронных устройствах почти не используются.
DTE и DCE: прямой и нуль-модемный кабель
Названия цепей в RS-232 даны с точки зрения DTE: TxD (цепь 103) — данные от DTE к DCE, RxD (цепь 104) — от DCE к DTE (V.24). У DCE те же контакты работают наоборот: модем принимает по контакту 3 разъёма DE-9 и передаёт по контакту 2. Поэтому кабели бывают двух видов:
- прямой — для пары DTE и DCE: контакты соединены один в один, 2–2, 3–3, 5–5 и так далее;
- нуль-модемный (null modem, кросс-кабель) — для двух DTE, например двух компьютеров или компьютера и прибора с вилкой: передатчик одной стороны должен попасть на приёмник другой.
Если соединить два DTE прямым кабелем, выход TxD окажется на выходе TxD, а входы — на входах. Ничего не сгорит — передатчик по стандарту выдерживает замыкание на любую цепь, — но и связи не будет.
Как определить, DTE перед вами или DCE
Нужен мультиметр. Включите устройство, ничего к нему не подключая, и измерьте напряжение на контактах 2 и 3 относительно контакта 5. Передатчик в покое держит MARK — от −5 до −15 В. Вход приёмника нагружен на землю сопротивлением 3–7 кОм, и на нём около нуля: V.28 допускает не больше 2 В. Минус на контакте 3 — это DTE, минус на контакте 2 — DCE. Так же проверяют самодельные кабели и переходники.
Нуль-модем: три варианта распайки
- Минимальный, три провода: TxD и RxD накрест, GND к GND. Годится, если ни одна сторона не проверяет сигналы квитирования: без управления потоком или с программным XON/XOFF.
- С петлями квитирования: в каждом разъёме RTS замкнут на CTS (7–8), а DTR — на DSR и DCD (4–6–1). Порт сам себе выдаёт разрешения, поэтому программа, которая ждёт CTS или DSR, работает по трём проводам. Перемычку на DCD не пропускайте: некоторые устройства и драйверы без этого сигнала не открывают порт (Chipkin). Управления потоком при такой распайке фактически нет.
- Полный: TxD и RxD накрест, RTS одной стороны на CTS другой, DTR одной стороны на DSR и DCD другой (Perle). Сохраняет аппаратное управление потоком. Цепь RI не подключают.
Управление потоком: RTS/CTS, DTR/DSR и XON/XOFF
Управление потоком останавливает передатчик, когда приёмник не успевает: заполнился буфер или занят процессор.
RTS/CTS — аппаратное. Изначально эта пара обслуживала полудуплексный модем: DTE включает RTS — «хочу передавать», модем переключается на передачу и отвечает CTS — «можно» (V.24, цепи 105 и 106). В редакции EIA/TIA-232-E появилась цепь «готов к приёму» (CJ, цепь 133 по V.24), и при аппаратном управлении потоком её функцию берёт на себя контакт RTS (Datapro, 232-E). В таком режиме каждая сторона держит RTS включённым, пока может принимать, и передаёт, только пока включён её вход CTS. В нуль-модеме RTS одной стороны приходит на CTS другой.
DTR/DSR. Это сигналы готовности оборудования: DTR — DTE включён и готов, DSR — DCE готов (V.24). Их тоже применяют для управления потоком: например, мост CP2102 поддерживает квитирование RTS/CTS, DSR/DTR и XON/XOFF.
XON/XOFF — программное. Приёмник посылает по своей линии TxD символ XOFF — «стоп», а когда освободится, XON — «продолжай». Это управляющие символы DC3 (0x13) и DC1 (0x11) (ECMA-48). Дополнительные провода не нужны, хватает трёхпроводного кабеля. Но для двоичных данных способ не годится: байты 0x11 и 0x13 встречаются в них сами по себе и будут приняты за команды.
Остановка не мгновенная: символ, который уже передаётся, будет допередан, а задержка программы может добавить ещё несколько. Поэтому сигнал «стоп» подают, пока в буфере приёмника остаётся запас.
Кадр UART на линии RS-232
Асинхронный кадр начинается со старт-бита, за ним идут 5–9 бит данных младшим битом вперёд, необязательный бит чётности и один или два стоп-бита; между кадрами линия в покое — в «1» (ATmega328P, раздел 20.4). Приёмник ждёт перепада из «1» в «0» в начале старт-бита, через полбита проверяет, что уровень всё ещё «0», — так отсекается короткая помеха, — и дальше читает каждый бит в его середине (ST16C550; Maxim, AN2141).
Формат записывают тремя символами: число бит данных, чётность (N — без бита чётности, E — even, дополнение до чётного числа единиц, O — odd, до нечётного) и число стоп-битов. Типичный кадр — 8N1: 1 + 8 + 1 = 10 бит на байт, полезных из них 80 %. При 9600 бит/с это 960 байт в секунду, при 115 200 бит/с — 11 520.
0x41 в двоичном виде — 0100 0001. Младший бит идёт первым, поэтому после старт-бита на линии 1, 0, 0, 0, 0, 0, 1, 0, затем стоп-бит. На выводе микроконтроллера «1» — высокий уровень, на линии RS-232 — минус.
Бит чётности — исключающее ИЛИ всех бит данных; при нечётной чётности результат инвертируется (ATmega328P, раздел 20.4.1). Если на месте стоп-бита приёмник видит «0», он фиксирует ошибку кадра (framing error). Состояние break — линия в «0» дольше целого кадра — UART распознаёт отдельно: у UART 16550 для этого есть свой флаг (ST16C550).
Скорость передачи и точность тактирования
Стандартные скорости
Привычный ряд 300, 1200, 2400, 4800, 9600, 19 200, 38 400, 57 600, 115 200 бит/с удобен для UART. В UART 16550 частота кварца делится на 16 и на программируемый делитель; с кварцем 1,8432 МГц делитель 1 даёт ровно 115 200 бит/с, а все скорости ряда получаются при целых делителях: 9600 бит/с — делитель 12, 300 бит/с — 384 (ST16C550). Мосты USB–UART поддерживают этот ряд и многие нестандартные скорости.
Насколько могут расходиться частоты
Приёмник заново синхронизируется по каждому старт-биту, поэтому ошибка частоты накапливается только в пределах кадра. Важна не точность каждой стороны, а разность частот передатчика и приёмника (Maxim, AN2141). Хуже всего последнему биту: середина стоп-бита кадра 8N1 отстоит от начала старт-бита на 9,5 бита, при 16 выборках на бит — на 152 такта приёмника. Допустимое расхождение:
где — число выборок на бит, — длина кадра в битах (10 для 8N1), — доля бита, в которой сигнал уже установился, а «−1» учитывает неопределённость момента старта в один такт. Maxim принимает = 75 % для короткой «чистой» линии и получает ±3,3 %, а для длинного ёмкостного кабеля RS-232 — = 50 % и ±2 %. Этот запас стороны делят между собой в любой пропорции.
Для USART AVR Microchip даёт точные границы. При 8 битах данных без чётности приёмник принимает поток со скоростью от 95,36 до 104,58 % своей, то есть от −4,64 до +4,58 %; с U2X = 1 — от 96,00 до 103,90 %. Рекомендованная ошибка одной стороны — ±2,0 и ±1,5 % соответственно: вторую половину запаса Microchip оставляет передатчику (ATmega328P, таблицы 20-2 и 20-3). В таблице 20-2 для этого случая напечатано −4,54 %, но из её же значения 95,36 % следует −4,64 %.
Кварц с точностью 100 ppm (0,01 %) расходует из этого бюджета ничтожную долю. Керамический резонатор ±0,5 % плюс ещё ±0,5 % дрейфа от температуры и старения на обеих сторонах укладывается даже в жёсткие 2 % (AN2141). А вот внутренний RC-генератор ATmega328P после заводской калибровки точен лишь до ±10 %, после подстройки пользователем — до ±1 % (ATmega328P, таблица 29-9): без калибровки для UART он не годится.
Ошибка скорости у AVR: UBRR и U2X
Генератор скорости USART делит тактовую частоту на 16 (на 8 при U2X = 1) и ещё на UBRR + 1 (ATmega328P, таблица 20-1):
UBRR — целое число от 0 до 4095: его округляют до ближайшего целого, и скорость получается не точно заданной. Ошибку считают как . Таблица ниже рассчитана по этим формулам для частоты 16 МГц и совпадает с таблицей 20-7 даташита:
| Скорость, бит/с | UBRR, U2X = 0 | Ошибка | UBRR, U2X = 1 | Ошибка |
|---|---|---|---|---|
| 2 400 | 416 | −0,1 % | 832 | 0,0 % |
| 4 800 | 207 | +0,2 % | 416 | −0,1 % |
| 9 600 | 103 | +0,2 % | 207 | +0,2 % |
| 14 400 | 68 | +0,6 % | 138 | −0,1 % |
| 19 200 | 51 | +0,2 % | 103 | +0,2 % |
| 28 800 | 34 | −0,8 % | 68 | +0,6 % |
| 38 400 | 25 | +0,2 % | 51 | +0,2 % |
| 57 600 | 16 | +2,1 % — больше рекомендованного | 34 | −0,8 % |
| 76 800 | 12 | +0,2 % | 25 | +0,2 % |
| 115 200 | 8 | −3,5 % — больше рекомендованного | 16 | +2,1 % — больше рекомендованного |
| 230 400 | 3 | +8,5 % — больше рекомендованного | 8 | −3,5 % — больше рекомендованного |
| 250 000 | 3 | 0,0 % | 7 | 0,0 % |
| 500 000 | 1 | 0,0 % | 3 | 0,0 % |
| 1 000 000 | 0 | 0,0 % | 1 | 0,0 % |
Тактовая частота 16 МГц. * — ошибка больше рекомендованной Microchip для кадра 8N1: ±2,0 % при U2X = 0 и ±1,5 % при U2X = 1.
Что видно из таблицы:
- до 38 400 бит/с включительно ошибка не больше 0,8 % по модулю — запас большой;
- 57 600 бит/с при U2X = 0 даёт +2,1 % — больше рекомендованного; с U2X = 1 ошибка −0,8 %;
- 115 200 бит/с не укладывается в рекомендацию ни в одном режиме: −3,5 % без удвоения и +2,1 % с ним. Два AVR на 16 МГц с одинаковыми настройками договорятся — их скорости ошибаются одинаково, — а с ПК или модулем, у которого скорость точная, связь идёт у самого края допуска;
- 250 000, 500 000 и 1 000 000 бит/с получаются из 16 МГц без остатка — ошибка 0 %.
Если нужен весь стандартный ряд без ошибки, ставят кварц, кратный 1,8432 МГц: 7,3728, 11,0592, 14,7456 или 18,432 МГц — с ними все скорости до 230 400 бит/с получаются точно (ATmega328P, таблицы 20-5–20-7). В avr-libc этот расчёт делает заголовок <util/setbaud.h>: по заданным F_CPU и BAUD он вычисляет UBRR_VALUE и признак USE_2X, если без удвоения ошибка превышает BAUD_TOL — по умолчанию 2 %.
Преобразователи уровней: MAX232, MAX3232 и аналоги
Микросхеме нужно получить ±5…±10 В от одного источника 5 или 3,3 В. Для этого внутри стоят два зарядовых насоса на внешних конденсаторах: удвоитель делает из VCC положительное напряжение V+, инвертор из V+ — отрицательное V−. У MAX232 от 5 В получается около +10 и −10 В без нагрузки (Maxim), в типовой схеме TI — около ±8,5 В. Передатчики питаются от V+ и V−, приёмники выдают логические уровни от VCC.
| Микросхема | Питание | Конденсаторы насоса | Скорость | Выход на нагрузке 3 кОм |
|---|---|---|---|---|
| MAX232 (TI) | 4,5–5,5 В | 4 × 1 мкФ | 120 кбит/с | от ±5 В, типично ±7 В |
| MAX232A (Maxim) | 5 В ± 10 % | 4 × 0,1 мкФ | 200 кбит/с | от ±5 В, типично ±8 В |
| MAX3232 (TI) | 3,0–5,5 В | 4 × 0,1 мкФ при 3,3 В | 250 кбит/с | от ±5 В, типично ±5,4 В |
| MAX3232E (TI) | 3,0–5,5 В | 4 × 0,1 мкФ при 3,3 В | 250 кбит/с | от ±5 В, типично ±5,4 В |
| ADM3251E (Analog Devices) | 5 В | 4 × 0,1 мкФ | 460 кбит/с | — |
Чем ещё они отличаются: MAX232 потребляет 8 мА, MAX3232 — 0,3 мА и при питании 3,3 В принимает на входах 5-вольтовую логику. MAX3232E по основным параметрам совпадает с MAX3232 и дополнительно испытан на стойкость к разрядам по IEC 61000-4-2 (о ней — ниже). ADM3251E — один передатчик и один приёмник с гальванической развязкой 2,5 кВ и встроенным изолированным преобразователем питания isoPower.
MAX232 и MAX3232 совпадают по цоколёвке, но не по конденсаторам: MAX232 нужно 1 мкФ, MAX3232 при 3,3 В — 0,1 мкФ. При питании MAX3232 от 5 В TI рекомендует C1 = 0,047 мкФ и C2–C4 = 0,33 мкФ, а для всего диапазона 3–5,5 В — 0,1 и 0,47 мкФ. Микросхемы с одним названием у разных производителей тоже отличаются: у MAX232 от Maxim типовой размах ±7,3 В и потребление 5 мА, у TI — ±7 В и 8 мА. Сверяйтесь с даташитом того производителя, чья микросхема стоит на плате. Для скоростей до 1 Мбит/с TI предлагает совместимые по выводам с MAX3232 микросхемы SN65C3232 и SN75C3232.
Защита от статики и гальваническая развязка
Разъём RS-232 выходит наружу корпуса, и разряд статики с пальцев или кабеля попадает прямо на выводы трансивера. Для MAX232 TI указывает только 2 кВ по модели человеческого тела (HBM) — это стойкость при производстве и монтаже, а не при работе с открытым разъёмом. Варианты с буквой E испытаны по IEC 61000-4-2: MAX3232E выдерживает ±8 кВ контактным и ±15 кВ воздушным разрядом.
Если у соединяемых устройств разные земли — разные здания, силовые щиты, — по общему проводу RS-232 потечёт уравнивающий ток; V.24 отдельно предупреждает о контурах заземления с большими токами. В таких случаях ставят изолированный трансивер: ADM3251E объединяет развязку 2,5 кВ, изолированный источник питания и один канал RS-232.
USB–UART: FT232R, CP2102, CH340 и уровни TTL
Мосты USB–UART создают в компьютере виртуальный COM-порт, но наружу выдают логические уровни UART, а не RS-232. FT232R и CP2102 выводят и все сигналы модема: RTS, CTS, DTR, DSR, DCD, RI; у CH340 полный набор есть в 16- и 20-выводных корпусах. Чтобы получить настоящий RS-232, после моста ставят преобразователь вроде MAX3232: WCH прямо пишет, что интерфейсы RS-232, RS-485 и RS-422 CH340 обеспечивает через внешние микросхемы.
| Мост | Скорость | Логические уровни | Особенности |
|---|---|---|---|
| FT232R (FTDI) | от 300 бод до 3 Мбод | 1,8–5,25 В, задаются выводом VCCIO | встроенные тактовый генератор и EEPROM; любую из линий UART можно инвертировать настройкой |
| CP2102 (Silicon Labs) | от 300 бит/с до 1 Мбит/с | 3,3 В, VDD от 3,0 до 3,6 В | для новых разработок производитель рекомендует CP2102N |
| CH340 (WCH) | от 50 бит/с до 2 Мбит/с | 5 или 3,3 В — по напряжению питания | CH340G и CH340T нужен кварц 12 МГц, CH340C, N, K, E, X, B обходятся без него |
Модуль TTL или кабель RS-232: как отличить
Внешне похожие адаптеры «USB — COM» бывают двух типов: модули и кабели с выводами UART на уровнях 3,3 или 5 В и адаптеры с разъёмом DE-9 и уровнями RS-232. Проверка — вольтметр между TX и GND у подключённого к USB, но молчащего адаптера:
- около +3,3 или +5 В — логические уровни: в покое UART держит «1», высокий уровень;
- от −5 до −15 В — RS-232: в покое передатчик держит MARK.
Настоящие уровни RS-232 требуют преобразователя с зарядовым насосом или отдельного двуполярного питания. Если на плате только мост USB–UART, уровни у неё логические.
Почему RS-232 нельзя подключать к выводу МК напрямую
- Напряжение. На линии до ±15 В, у старого оборудования — до ±25 В, а предельное напряжение на выводе ATmega328P — от −0,5 В до VCC + 0,5 В (раздел 29.1 даташита). При −10 В на входе RXD открывается защитный диод вывода, и через него течёт ток короткого замыкания передатчика — у MAX232 около 10 мА, у MAX3232 до 60 мА — при предельных для вывода 40 мА.
- Инверсия. Даже если вход выживет, например благодаря токоограничивающему резистору, данные придут перевёрнутыми: покой RS-232 — минус, а UART в покое ждёт «1».
- Обратное направление. Выход 0/3,3 В на входе приёмника RS-232: ноль попадает в переходную зону ±3 В, где состояние не определено. Многие приёмники с порогом 1,2–1,7 В его всё же различат — но тоже инвертированным.
Подключение RS-232 к микроконтроллеру
Типовая схема — микроконтроллер, MAX3232 и разъём DE-9. Питание 3,3 В, четыре конденсатора насоса по 0,1 мкФ и ещё 0,1 мкФ по питанию — по типовой схеме TI. C1 включают между выводами 1 и 3, C2 — между 4 и 5, C3 — от V+ (вывод 2) к земле (TI допускает и к VCC), C4 — от V− (вывод 6) к земле. Подойдут керамические конденсаторы; электролитические и танталовые ставят с учётом полярности, и у C4 плюс — на земле, потому что V− отрицательное.
Устройство на схеме разведено как DCE: передатчик МК через DOUT1 выходит на контакт 2 разъёма, приёмник слушает контакт 3. Тогда к COM-порту компьютера, а это DTE, подходит прямой кабель. Если поставить вилку и поменять контакты 2 и 3 местами, устройство станет DTE, и для связи с ПК понадобится нуль-модем. Второй канал MAX3232 передаёт RTS/CTS. Если управление потоком не нужно, вход DIN2 подключите к земле или питанию — TI требует, чтобы на всех входах DIN был допустимый логический уровень, — а выход ROUT2 оставьте свободным.
Если МК 3,3-вольтовый, а преобразователь — 5-вольтовый MAX232, его выход ROUT поднимается почти до 5 В (по даташиту TI — не ниже 3,5 В при токе 1 мА). Для входа МК без допуска 5 В это перегрузка: на линию ROUT → RXD нужен делитель напряжения или другой преобразователь уровня, а проще взять MAX3232 с питанием 3,3 В. В обратную сторону проблемы нет: вход передатчика MAX232 считает «1» уже от 2 В.
Инициализация UART на AVR
Пример для ATmega328P на 16 МГц: 9600 бит/с, формат 8N1, опрос флагов без прерываний. Значение UBRR и фактическая скорость:
Ошибка +0,2 %, как в таблице выше.
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#define BAUD 9600UL
/* UBRR = F_CPU / (16 * BAUD) - 1, rounded to the nearest integer: 103 at 16 MHz */
#define UBRR_VALUE ((F_CPU + 8UL * BAUD) / (16UL * BAUD) - 1UL)
void uart_init(void)
{
UBRR0H = (uint8_t)(UBRR_VALUE >> 8);
UBRR0L = (uint8_t)UBRR_VALUE;
UCSR0A = 0; /* U2X0 = 0: 16 samples per bit */
UCSR0B = _BV(RXEN0) | _BV(TXEN0); /* enable receiver and transmitter */
UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); /* 8 data bits, no parity, 1 stop bit */
}
void uart_putc(uint8_t c)
{
while (!(UCSR0A & _BV(UDRE0))) {} /* wait for an empty transmit buffer */
UDR0 = c;
}
uint8_t uart_getc(void)
{
while (!(UCSR0A & _BV(RXC0))) {} /* wait for a received byte */
return UDR0;
}
Проверить порт можно без второго устройства: замкните контакты 2 и 3 разъёма DE-9 — каждый байт, отправленный uart_putc(), должен вернуться из uart_getc(). Подробнее о контроллерах AVR — в разделе AVR.
Типичные ошибки и отладка
- Перепутаны TxD и RxD или DTE и DCE. Связи нет совсем. Проверьте напряжения на контактах 2 и 3 и тип кабеля — прямой или нуль-модем.
- Нет общего провода. Без контакта 5 приёмнику не от чего отсчитывать уровни: связь пропадает или идёт с ошибками.
- TTL вместо RS-232. Модуль с логическими уровнями подключён к COM-порту или наоборот: в лучшем случае мусор из-за инверсии, в худшем — сгоревший вывод МК.
- Не та скорость или формат кадра. Вместо текста — мусор и ошибки кадра. Скорость, число бит данных, чётность и число стоп-битов должны совпадать на обеих сторонах.
- Включено аппаратное управление потоком, а RTS и CTS не подключены. Терминал молчит: вход CTS выключен, и передача заблокирована. Отключите управление потоком или сделайте петли квитирования.
- Ошибка частоты. 115 200 бит/с на AVR с кварцем 16 МГц, внутренний RC-генератор без калибровки — сбои, которые зависят от температуры и конкретного экземпляра.
- Не работает насос преобразователя. Не те конденсаторы, плохая пайка, перепутана полярность: выходы не дотягивают до ±5 В. Проверьте напряжения на выводах V+ (2) и V− (6) — в типовой схеме TI для MAX232 это около +8,5 и −8,5 В.
Порядок проверки:
- Петля на разъёме. Замкните контакты 2 и 3, а при аппаратном управлении потоком ещё 7 с 8 и 4 с 6 и 1, и откройте порт в терминале: каждый набранный символ должен вернуться. Вернулся — порт и преобразователь исправны, ищите проблему в кабеле или у собеседника.
- Мультиметр. На выходе TxD в покое — от −5 до −15 В, на неподключённом входе RxD — около нуля. Постоянный плюс на TxD означает, что на входе передатчика логический ноль, — линия в состоянии break.
- Осциллограф. Видны уровни, фронты и длительность бита: 104 мкс при 9600 бит/с, 8,7 мкс при 115 200 бит/с. По самому короткому импульсу скорость определяют даже без документации.
- Логический анализатор — на стороне логики, между МК и преобразователем: там 0/3,3 В и неинвертированный сигнал, который понимает декодер UART.
- Терминал. Проверьте все параметры порта: скорость, 8N1, управление потоком «нет» — и что порт не занят другой программой.
Для длинных линий и сетей из многих устройств вместо RS-232 берут RS-485, для связи микросхем на одной плате — I²C.
Частые вопросы
Какая максимальная длина кабеля RS-232?
Стандарт ограничивает не длину, а ёмкость линии: не больше 2500 пФ вместе со входом приёмника. Texas Instruments оценивает это в 15–20 м в зависимости от кабеля, старая редакция RS-232-C рекомендовала кабель до 15 м. На скоростях выше 20 кбит/с практический предел — около 3 м. Для сотен метров нужен RS-485.
Какая распиновка разъёма DB9 (DE-9) у RS-232?
У компьютера и другого DTE: 1 — DCD, 2 — RxD (приём), 3 — TxD (передача), 4 — DTR, 5 — GND, 6 — DSR, 7 — RTS, 8 — CTS, 9 — RI. Для простой связи хватает контактов 2, 3 и 5. У DCE, например модема, те же контакты работают в обратную сторону: передаёт он по контакту 2.
Чем RS-232 отличается от UART с уровнями TTL?
UART формирует кадр: старт-бит, данные, бит чётности, стоп-биты. На его выводах логические уровни 0 и 3,3 или 5 В, в покое — высокий уровень. RS-232 передаёт тот же кадр напряжением ±5…±15 В и в инверсии: логическая «1» и покой — минус. Между ними ставят преобразователь уровней, например MAX3232.
Когда нужен нуль-модемный кабель?
Когда соединяются два DTE — например, два компьютера или компьютер и прибор с разъёмом-вилкой. Линии TxD и RxD нужно перекрестить, иначе передатчик попадёт на передатчик. Минимальный нуль-модем — три провода: 2–3, 3–2 и 5–5. Если устройства используют аппаратное управление потоком, накрест соединяют и RTS/CTS, и DTR с DSR.
Можно ли подключить RS-232 напрямую к Arduino или другому микроконтроллеру?
Нет. На линии RS-232 бывает до ±15 В, а вывод ATmega328P допускает напряжение от −0,5 В до напряжения питания плюс 0,5 В. К тому же сигнал RS-232 инвертирован. Нужен преобразователь уровней: MAX3232 при питании от 3 до 5,5 В или MAX232 при 5 В.
MAX232 или MAX3232 — что выбрать?
Для новых схем — MAX3232: питание от 3 до 5,5 В, конденсаторы по 0,1 мкФ, до 250 кбит/с и защита от разрядов ±15 кВ. MAX232 работает только от 5 В и требует конденсаторов по 1 мкФ. Цоколёвка у них одинаковая, но при замене одной микросхемы на другую конденсаторы нужно поменять.
Источники
- TIA-232-F. Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Binary Data Interchange — стандарт TIA, октябрь 1997; первая редакция EIA RS-232 — 1962
- ITU-T V.24. List of definitions for interchange circuits between data terminal equipment (DTE) and data circuit-terminating equipment (DCE) — рекомендация ITU-T, редакция 02/2000
- ITU-T V.28. Electrical characteristics for unbalanced double-current interchange circuits — рекомендация ITU-T, редакция 03/1993
- EIA/TIA-574. 9-Position Non-Synchronous Interface Between Data Terminal Equipment and Data Circuit-Terminating Equipment Employing Serial Binary Data Interchange — стандарт, сентябрь 1990
- Texas Instruments. Interface Circuits for TIA/EIA-232-F (SLLA037A) — design notes, 2002
- Datapro. Electronic Industries Association (EIA) RS-232-C Interface Standard, report 2740 — обзор стандарта, 1991
- Datapro. ANSI EIA/TIA-232-E Interface Standard, report 2741 — обзор стандарта, 1995
- Black Box. Technical Reference: Pinouts for Serial Interfaces — справочник распиновок, 1997
- Perle Systems. IOLAN DS1/SDS1 DB9/DB25 Cable Pin-Outs
- Chipkin Automation Systems. RS-232 Serial Wiring & Handshaking Bypass for Modbus
- ITT Cannon. D Subminiature Connectors — каталог
- Maxim Integrated. Application Note 2141: Determining Clock Accuracy Requirements for UART Communications — 2003
- Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — даташит, 2020; USART — глава 20
- AVR-LibC. <util/setbaud.h>: Helper macros for baud rate calculations
- Exar. ST16C550 UART with 16-byte FIFO's — даташит, ред. 5.01, 2005
- Ecma International. ECMA-48: Control Functions for Coded Character Sets — 5-е издание, 1991
- Texas Instruments. MAX232, MAX232I Dual EIA-232 Drivers/Receivers (SLLS047M) — даташит, 2014
- Maxim Integrated. MAX220–MAX249 +5V-Powered, Multichannel RS-232 Drivers/Receivers — даташит 19-4323, Rev 16
- Texas Instruments. MAX3232 3-V to 5.5-V Multichannel RS-232 Line Driver/Receiver (SLLS410N) — даташит, 2017
- Texas Instruments. MAX3232E Multichannel RS-232 Line Driver and Receiver With ±15-kV IEC ESD Protection (SLLS664C) — даташит, 2015
- Analog Devices. ADM3251E Isolated, Single-Channel RS-232 Line Driver/Receiver — даташит
- FTDI. FT232R USB UART IC Datasheet
- Silicon Labs. CP2102/9 Single-Chip USB to UART Bridge — даташит, Rev. 1.7
- WCH. CH340 USB to Serial Chip Datasheet (CH340DS1)