Последовательный порт на современном ноутбуке почти всегда эмулируется USB-переходником, и это создаёт три класса проблем: электрические (несовместимые уровни), логические (перепутанные линии и режим DTE/DCE) и временные (задержки USB, которых нет у настоящего UART). Разобраться, какой из них ваш случай, можно за десять минут, если понимать разницу между интерфейсами.
Электрический уровень: почему нельзя соединить напрямую
| Параметр | RS-232 | RS-485 |
|---|---|---|
| Линия | несимметричная, относительно земли | дифференциальная пара (A/B) |
| Уровни | примерно ±3…±15 В | разность потенциалов ~1,5–5 В |
| Топология | точка-точка | многоточечная шина, до 32 устройств на сегмент |
| Режим | полный дуплекс (RX/TX отдельно) | обычно полудуплекс, 2 провода |
| Типовая длина | до 15 м на 9600 бод | до 1200 м на низкой скорости |
| Помехоустойчивость | низкая | высокая за счёт дифференциального сигнала |
Прямое соединение TTL-выхода микроконтроллера (0/3,3 В) с RS-232 «сгорит» или не заработает: нужен трансивер, например MAX3232 для 3,3 В логики. Для RS-485 применяют трансиверы класса MAX485 и аналоги.
Ключевой практический вывод: RS-232 и RS-485 — не один интерфейс с разными разъёмами, а два разных электрических стандарта. Переходник «USB → RS-485» не заработает с устройством, у которого RS-232, и наоборот.
Распиновка и null-modem
Классический разъём — DB9. Минимально нужны три линии: TXD, RXD и GND. Остальные (RTS, CTS, DTR, DSR, DCD, RI) используются для аппаратного управления потоком и сигналов модема.
Ошибка номер один при соединении двух устройств — прямой кабель вместо null-modem. В RS-232 устройство делится на DTE (терминал, компьютер) и DCE (модем, прибор). Если соединить два DTE, TX попадёт на TX. Null-modem-кабель перекрёстно меняет TX/RX (и обычно RTS/CTS), и обмен начинает работать.
Второй источник путаницы — маркировка A/B на RS-485. У разных производителей полярность обозначается противоположно (A/B, D+/D−, иногда с инверсией). Не ориентируйтесь на цвет провода в чужом кабеле: смотрите документацию прибора. Если обмен идёт с ошибками при короткой линии, попробуйте поменять A и B местами — это безопасная и быстрая проверка.
Предел длины: как считать
Длина линии определяется не «кабелем вообще», а скоростью и качеством пары:
- RS-232: на 9600 бод 15 метров — практический предел, указанный в стандарте; на 115200 бод надёжная дистанция сокращается до нескольких метров.
- RS-485: 1200 метров на 9600 бод — типовое значение для витой пары; выше 115200 бод дистанция снижается до сотен метров.
- Терминаторы 120 Ом ставятся на обоих физических концах шины; для длинных линий дополнительно нужно смещение (bias), чтобы в пассивном состоянии линия не «плавала».
- Экран заземляется с одной стороны, иначе получите антенну и уравнительные токи.
Если линия не работает на длине, которая «должна работать», проверьте: скорость, число устройств в сегменте, наличие терминаторов, целостность витой пары (не «шнур от телефона»), общий провод при большой разности потенциалов.
Настоящий UART против USB-переходника
USB-COM работает через виртуальный COM-порт: драйвер эмулирует последовательный интерфейс, но передача идёт пакетами. Отсюда — задержки в единицы миллисекунд, которые незаметны при опросе датчиков, но критичны для:
- стробирования внешних устройств по времени;
- линий с жёстким таймаутом ответа;
- задач, где важна пауза между символами (некоторые протоколы и «медленные» контроллеры).
У FTDI задержку регулирует параметр Latency Timer: по умолчанию 16 мс, для отзывчивых линий его уменьшают до 1–2 мс. У CH340 такой настройки нет, и вести себя он может менее предсказуемо.
Если устройство требует именно «настоящий» порт, варианты такие: встроенный RS-232 на промышленном ноутбуке, ExpressCard/PCIe-карта с UART (на старых машинах), или внешний контроллер с UART-мостом на FT2232H. Последний вариант даёт два независимых канала и предсказуемые тайминги, но требует драйвера D2XX.
Проверка без устройства: loopback
Самый быстрый способ отделить «проблему кабеля» от «проблемы устройства»:
- Замкните TX и RX на разъёме переходника (для RS-232 — пины 2 и 3 DB9; для RS-485 — соедините A и B).
- Откройте терминал на нужной скорости и отправьте строку.
- Если символы вернулись — переходник и драйвер работают, проблема дальше по линии.
- Если нет — проверьте драйвер, номер порта и права доступа (в Linux — членство в группе
dialout).
Для RS-485 такой тест проверяет только передатчик и приёмник одного адаптера: полудуплексная шина при замыкании A/B вернёт вам ваш же сигнал, если управление направлением корректно.
Безопасность
- Не подключайте интерфейсные линии к цепям под напряжением, не проверенным по схеме: RS-485 часто соседствует с 24 В питания в одном кабеле.
- Изолированный преобразователь обязателен при разности потенциалов между устройствами и на длинных линиях между зданиями.
- Не используйте «звонок» мультиметром на включённой линии — это не проверка, а способ получить ложные результаты и повредить трансивер.
- Фиксируйте настройки порта в проекте: скорость, чётность, стоп-биты, flow control — их забывают чаще, чем меняют кабели.
Частые вопросы
Можно ли подключить USB-RS-485 к устройству с RS-232?
Нет, уровни несовместимы. Нужен либо преобразователь интерфейсов RS-232↔RS-485, либо соответствующий адаптер под каждое устройство.
Почему обмен работает на коротком кабеле и не работает на длинном?
Скорее всего, нет терминаторов, кабель не витая пара или слишком высокая скорость для этой длины. Проверьте также, не идут ли провода рядом с силовыми линиями и частотными преобразователями.
Что такое null-modem и когда он нужен?
Кабель с перекрёстными TX/RX, который соединяет два устройства одного типа (компьютер-компьютер, прибор-прибор). Без него передача и приём попадают на одноимённые контакты и обмен не идёт.
Нужен ли переходник с внешним питанием?
Для RS-232 обычно нет. Для RS-485 на длинных линиях и для изолированных моделей — да, питание требуется для трансивера и барьера изоляции.
Почему в Linux порт то появляется, то исчезает?
Проверьте питание USB-порта и энергосбережение: ядро может отключать устройство при простое. Также помогает проверка dmesg в момент подключения — там видно, какой драйвер и какое устройство зарегистрировались.