Интерфейсы передачи данных
Как микросхемы, платы и приборы обмениваются данными: от I²C и SPI внутри одной платы до RS-485 и CAN на сотни метров. Сравнительная таблица интерфейсов, подсказки по выбору и подробные статьи с уровнями сигналов, распиновками и схемами подключения.
- UARTКадр 8N1, скорость и допуск, TX и RX, уровни, USB–UART, AVR и STM32
- RS-232Уровни, распиновка DB9, нуль-модем, MAX3232, UART и AVR
- RS-485Уровни, длина линии, терминаторы, смещение, MAX485, Modbus RTU
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- CANCAN_H и CAN_L, терминаторы, кадр, арбитраж, ошибки, тайминг, MCP2515
- 1-WireТайм-слоты, ROM-команды, поиск, CRC8, DS18B20, паразитное питание
Интерфейс задаёт, как устройства обмениваются данными: сколько проводов нужно, какими напряжениями кодируются нули и единицы, как часто передаются биты и кто управляет линией. Почти все интерфейсы этого раздела последовательные: биты идут друг за другом по одной-двум линиям данных. Параллельные шины, где каждый бит идёт по своему проводу, встречаются реже — например, у символьных ЖК-модулей на контроллере HD44780 и у TFT-дисплеев.
Сравнение интерфейсов
| Интерфейс | Линии | Топология | Скорость | Дальность | Где встречается |
|---|---|---|---|---|---|
| UART (TTL) | TX, RX, GND | точка — точка | обычно 9600–115 200 бит/с, у современных МК — до единиц Мбит/с | в пределах платы или короткого кабеля | отладочная консоль, модули GPS, GSM, Bluetooth |
| RS-232 | TxD, RxD, GND + линии квитирования | точка — точка | до 20 кбит/с по стандарту, на практике 115 200 бит/с | около 15 м (предел — ёмкость линии 2500 пФ) | COM-порты, лабораторные приборы, станки |
| RS-485 | A, B, общий провод | шина до 32 единичных нагрузок | до 10 Мбит/с на коротких линиях | до 1200 м на скоростях до ~100 кбит/с | Modbus RTU, промышленная автоматика, приборы учёта |
| I²C | SDA, SCL, GND | шина с адресами, допускает несколько ведущих | 100 и 400 кбит/с, до 1 Мбит/с в режиме Fm+ | в пределах платы: ёмкость шины до 400 пФ | датчики, EEPROM, часы реального времени, расширители портов |
| SPI | SCLK, MOSI, MISO, CS на каждое ведомое | один ведущий, ведомые выбираются линией CS | единицы — десятки МГц | в пределах платы | флеш-память, дисплеи, АЦП, SD-карты |
| CAN | CAN_H, CAN_L, общий провод | шина с арбитражем, все узлы равноправны | до 1 Мбит/с, у CAN FD в фазе данных — несколько Мбит/с | около 40 м на 1 Мбит/с, около 500 м на 125 кбит/с | автомобили, спецтехника, промышленные сети |
| 1-Wire | DQ, GND | шина: ведущий и ведомые с 64-битными номерами | до 16,3 кбит/с, есть ускоренный режим overdrive | зависит от схемы ведущего и кабеля | термодатчики DS18B20, ключи iButton |
| USB 2.0 | D+, 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.