Перейти к содержанию

Интерфейсы передачи данных

Как микросхемы, платы и приборы обмениваются данными: от I²C и SPI внутри одной платы до RS-485 и CAN на сотни метров. Сравнительная таблица интерфейсов, подсказки по выбору и подробные статьи с уровнями сигналов, распиновками и схемами подключения.

Интерфейс задаёт, как устройства обмениваются данными: сколько проводов нужно, какими напряжениями кодируются нули и единицы, как часто передаются биты и кто управляет линией. Почти все интерфейсы этого раздела последовательные: биты идут друг за другом по одной-двум линиям данных. Параллельные шины, где каждый бит идёт по своему проводу, встречаются реже — например, у символьных ЖК-модулей на контроллере HD44780 и у TFT-дисплеев.

Сравнение интерфейсов

ИнтерфейсЛинииТопологияСкоростьДальностьГде встречается
UART (TTL)TX, RX, GNDточка — точкаобычно 9600–115 200 бит/с, у современных МК — до единиц Мбит/св пределах платы или короткого кабеляотладочная консоль, модули GPS, GSM, Bluetooth
RS-232TxD, RxD, GND + линии квитированияточка — точкадо 20 кбит/с по стандарту, на практике 115 200 бит/соколо 15 м (предел — ёмкость линии 2500 пФ)COM-порты, лабораторные приборы, станки
RS-485A, B, общий проводшина до 32 единичных нагрузокдо 10 Мбит/с на коротких линияхдо 1200 м на скоростях до ~100 кбит/сModbus RTU, промышленная автоматика, приборы учёта
I²CSDA, SCL, GNDшина с адресами, допускает несколько ведущих100 и 400 кбит/с, до 1 Мбит/с в режиме Fm+в пределах платы: ёмкость шины до 400 пФдатчики, EEPROM, часы реального времени, расширители портов
SPISCLK, MOSI, MISO, CS на каждое ведомоеодин ведущий, ведомые выбираются линией CSединицы — десятки МГцв пределах платыфлеш-память, дисплеи, АЦП, SD-карты
CANCAN_H, CAN_L, общий проводшина с арбитражем, все узлы равноправныдо 1 Мбит/с, у CAN FD в фазе данных — несколько Мбит/соколо 40 м на 1 Мбит/с, около 500 м на 125 кбит/савтомобили, спецтехника, промышленные сети
1-WireDQ, GNDшина: ведущий и ведомые с 64-битными номерамидо 16,3 кбит/с, есть ускоренный режим overdriveзависит от схемы ведущего и кабелятермодатчики DS18B20, ключи iButton
USB 2.0D+, D−, VBUS, GNDхост и устройства, звезда через хабы1,5, 12 или 480 Мбит/скабель до 5 мсвязь с ПК, переходники USB–UART

Цифры в таблице — ориентиры для выбора. Точные условия, при которых они выполняются, и способы выйти за эти пределы разобраны в статьях об интерфейсах.

Как выбрать интерфейс

  • Микросхемы на одной плате. Медленные датчики, EEPROM и часы реального времени — I²C: две линии на все устройства. Быстрые потоки данных (флеш-память, дисплей, АЦП) — SPI.
  • Модуль рядом с микроконтроллером. GPS-приёмник, GSM-модем или Bluetooth-модуль почти всегда подключают по UART: две линии данных, программная поддержка есть в любом МК.
  • Прибор и компьютер. Сегодня это USB через переходник USB–UART. RS-232 остаётся там, где он уже есть: в приборах, станках и промышленных контроллерах с разъёмом DE-9.
  • Длинная линия и много устройств. Цех, щиты учёта, вентиляция, освещение — RS-485: дифференциальная пара на сотни метров, обычно с протоколом Modbus RTU. Если узлы должны передавать без опроса ведущим и важна аппаратная проверка кадров — CAN.
  • Несколько датчиков температуры на одном проводе — 1-Wire: каждый датчик имеет уникальный 64-битный номер, и линия данных может питать его в паразитном режиме.

Что отличает интерфейсы друг от друга

Синхронные и асинхронные. В I²C и SPI ведущий передаёт тактовый сигнал по отдельной линии, и приёмник считывает данные по его фронтам. В UART, RS-232 и RS-485 тактовой линии нет: обе стороны заранее договариваются о скорости, а приёмник подстраивается по старт-биту каждого байта. Поэтому у асинхронных интерфейсов важна точность тактового генератора, а у синхронных — нет.

Несимметричные и дифференциальные линии. В UART, RS-232, I²C и SPI сигнал — напряжение провода относительно общей земли, и любая помеха на этом проводе прямо попадает в данные. В RS-485, CAN и USB информацию несёт разность напряжений двух проводов витой пары: помеха наводится на оба провода одинаково, и приёмник её вычитает. Отсюда разница в дальности: метры против сотен метров.

Точка — точка и шина. UART и RS-232 соединяют ровно два устройства. На шины I²C, RS-485 и CAN подключают десятки узлов, и интерфейс должен решить, кто сейчас передаёт: адресом (I²C), протоколом опроса (Modbus на RS-485) или арбитражем по идентификатору кадра (CAN).

Интерфейс и протокол — не одно и то же. RS-232 и RS-485 описывают только электрику: уровни, нагрузки, разъёмы. Что значат байты, задаёт протокол поверх них — Modbus RTU, DMX512, собственный формат прибора. Поэтому два устройства с надписью «RS-485» не обязательно поймут друг друга. В I²C, CAN и USB протокол, наоборот, входит в спецификацию: адресация, подтверждения, формат кадра.

Уровни сигналов

Прежде чем соединять устройства, сверьте уровни. Выход с логикой 5 В может повредить вход микроконтроллера с питанием 3,3 В, а напряжение RS-232 в ±12 В почти наверняка выведет его из строя. Для каждого стыка есть стандартное решение: делитель или сдвигатель уровней на MOSFET для I²C, преобразователь MAX3232 для RS-232, трансивер вроде MAX485 для RS-485. Схемы подключения с номиналами приведены в статьях раздела, а подобрать резисторы делителя поможет калькулятор делителя напряжения.

Архитектура и периферия контроллеров, к которым подключаются эти интерфейсы, — в разделе «Микроконтроллеры».

Готовятся к публикации

USB · Modbus RTU · LIN · JTAG и SWD

Частые вопросы

Чем UART отличается от RS-232?

UART — это блок микроконтроллера и формат кадра: старт-бит, данные, чётность, стоп-бит. RS-232 — электрический стандарт для передачи того же кадра по кабелю: напряжения ±5…±15 В вместо логических 0 и 3,3–5 В, причём логическая единица передаётся отрицательным напряжением. Между выводами UART и разъёмом RS-232 всегда стоит преобразователь уровней, например MAX3232.

Что выбрать для связи микросхем на одной плате: I²C или SPI?

I²C обходится двумя линиями на все устройства и сам адресует их, но работает на 100–400 кбит/с, реже до 1 Мбит/с. SPI требует отдельной линии выбора на каждое ведомое устройство, зато работает на частотах в единицы и десятки мегагерц и проще в отладке. Датчики и EEPROM обычно подключают по I²C, флеш-память, дисплеи и быстрые АЦП — по SPI.

Какой интерфейс выбрать для линии длиной в сотни метров?

RS-485 или CAN: оба используют дифференциальную витую пару, которая подавляет помехи. RS-485 даёт до 1200 м на скоростях до ~100 кбит/с и до 32 единичных нагрузок на шине; поверх него обычно работает Modbus RTU. CAN дороже в реализации, но сам решает конфликты передатчиков и проверяет кадры аппаратно: 125 кбит/с — примерно на 500 м.

Можно ли вынести датчик I²C на провод длиной в несколько метров?

Напрямую — с трудом: ёмкость шины I²C ограничена 400 пФ, а каждый метр кабеля добавляет десятки пикофарад, и фронты затягиваются. Помогают снижение скорости до 100 кбит/с или ниже, более сильные подтягивающие резисторы и специальные буферы-удлинители шины. Для удалённых датчиков чаще выбирают RS-485 или 1-Wire.