SPI, I2C, UART: протоколы связи и их применение
1. Интерфейс UART
Что такое UART
Universal Asynchronous Receiver/Transmitter (UART) — последовательный протокол для связи хоста с периферией. Обеспечивает последовательную передачу, асинхронную и двунаправленную. Две линии: Tx (передача) и Rx (прием). Обычно Tx — цифровой пин 0, Rx — пин 1. Синхронизирует управление компьютером и внешними последовательными устройствами.
Как работает
Три режима: Simplex (однонаправленно), Half Duplex (по очереди в обе стороны), Full Duplex (одновременно в обе стороны).
Принцип передачи:
- Передающий UART преобразует параллельные данные мастера в последовательные для приемного UART. Приемный — обратно в параллельные для устройства-приемника.
- Асинхронность: нет тактового сигнала. UART генерирует старт/стоп биты для обозначения начала/конца сообщения.
- Оба UART должны работать на одном Baud rate (скорости). Допуск <10%, иначе данные бесполезны.
Протокол работы UART
Передача и прием данных
- Передающий UART получает данные от шины данных (CPU)
- Добавляет 3 бита: старт, паритет, стоп → пакет данных → на пин TX
- Передача прекращается при истощении данных
Управление прерываниями
Прерывания для автоотправки буфера. Сценарии: FIFO Overflow, Line Break, Frame Error, Parity Error; прием, передача, таймаут приема.
Операция FIFO
Stellaris UART: два 16-байтных FIFO (прием/передача). Настраиваемая глубина (1/8, 1/4, 1/2…) для разных прерываний.
Передающий FIFO: ввод данных до заполнения → стоп ввода (иначе потеря) → побайтовая отправка до опустошения → новый слот.
Приемный FIFO: автосохранение/стирание → всегда место. Трансиверный FIFO решает неэффективность CPU и частые прерывания UART. Нет потерь данных.
Loopback
Внутренний loopback для отладки: RX получает отправленные данные.
Последовательный ИК-протокол (SIR)
IrDA SIR как энкодер/декодер: перевод полудуплексного SIR в асинхронный UART поток. Декодированный вход и цифровой выход в UART.
Преимущества UART
- Простой, хорошо документирован, легко использовать
- Не требует линии тактового сигнала
- Бит паритета для проверки ошибок
Недостатки UART
- Размер кадра ≤9 бит, низкая скорость
- Не поддерживает много мастеров/слейвов
- Обязательный baud rate в пределах 10%
- Низкая скорость межустройственной передачи
Примеры UART в микроконтроллерах
- UART Seeeduino V4.2
- USB to UART 5V
- Base Shield V2
- USB CP2102 Serial Converter
2. Интерфейс I2C
Что такое I2C
Inter-Integrated Circuit (I2C) похож на UART, но для датчиков и модулей. Двунаправленная двухпроводная синхронная шина. Подключает множество устройств без компромисса пути — общая шина и адресация. Платеж: ниже скорость vs SPI. Скорость зависит от шумов, качества проводов, data rate. Подключение низкоскоростных устройств: EEPROM, ADC, микроконтроллеры.
Как работает
Две линии: SDA (данные) и SCL (такт). SCL синхронизирует передачу, SDA — данные. Мастер инициирует передачу, генерирует такт, открывает ведомое устройство. Адресуемое устройство — slave. Мастер и слейв не имеют постоянного data rate — зависит от направления передачи. Мастер уведомляет слейва перед передачей и приемом. Pull-up резистор на питание I2C обязателен.
Протокол I2C
Метод передачи
- Мастер посылает старт: SDA высокий→низкий, затем SCL высокий→низкий
- Мастер шлет 7/10-бит адрес + бит R/W каждому слейву
- Слейвы сравнивают адрес. Совпал → ACK (SDA низкий). Не совпал → SDA высокий
- Мастер шлет/принимает фрейм данных. После завершения приемник возвращает ACK
- Мастер: SCL высокий, затем SDA высокий — конец связи
Синхронизация такта
Каждый мастер генерирует свой такт на SCL. Данные валидны только во время высокого уровня такта.
Режимы передачи
Fast Mode
400 кбит/с. Подавление глитчей, slope control на выходе.
High-Speed Mode
3,4 Мбит/с. Быстрее Fast Mode.
Преимущества I2C
- Мало пинов/сигналов даже при множестве устройств
- Гибкость: multi-master, multi-slave
- Простота: 2 двунаправленных провода для многих устройств
- Адаптивность, поддержка множества мастеров
Недостатки I2C
- Низкая скорость, нужны pull-up резисторы (SPI — push-pull). Open-drain ограничивает скорость
- Резисторы занимают место на PCB
- Сложно при множестве устройств
Примеры I2C в микроконтроллерах
- Raspberry Pi 4-канальный 16-битный ADC
- I2C Hub (6 Port) Grove
- I2C Driver/Adapter
- I2C Arduino
3. Интерфейс SPI
Что такое SPI
Serial Peripheral Interface (SPI) — для микроконтроллеров. Full duplex — одновременная передача/прием. Быстрее I2C, мин. 8 бит за такт. Простой протокол → высокие скорости. Важен для дисплеев, SD-карт, термометров (внезапные изменения инфо).
Как работает
Два способа:
- Chip Select (CS) — у каждого устройства свой CS
- Daisy chaining (цепочка)
Устройств сколько угодно, но лимит — доступные hardware CS линии. При point-to-point адресация не нужна.
Протокол SPI
4 линии:
- MOSI (Master Out Slave In)
- MISO (Master In Slave Out)
- SCLK (такт)
- NSS (Slave Select)
Multi-slave: у каждого слейва свой NSS → усложняет железо vs I2C. Два сдвиговых регистра → синхронная передача от мастера (CPU) к периферии.
Преимущества SPI
- Простота: нет сложной адресации слейвов как в I2C
- Самый быстрый из последовательных интерфейсов (быстрее UART, I2C)
- Нет старт/стоп бит — непрерывная передача
- Отдельные MISO/MOSI — одновременный прием/передача
Недостатки SPI
- Много занятых пинов — лимит устройств
- Нет flow control, нет подтверждения приема/передачи (в I2C есть ACK)
- Нужно 4 линии (UART — 2), нет проверки ошибок (нет паритета)
- Только один мастер
Примеры SPI в микроконтроллерах
- SPI Seeeduino V4.2
- SPI Driver/Adapter
Сравнение UART, I2C, SPI
Таблица сравнения по скорости, пинам, режимам, сложности, применению.
Какой протокол «лучший»?
Нет superiores. Выбор под проект: SPI — для скорости. I2C — для множества устройств без сложной схемы.
Заключение
Разобранны ключевые аспекты UART, I2C, SPI: интерфейсы, скорости, плюсы/минусы. Готовы ответить на вопросы. Обращайтесь — поможем сразу.
Промышленные технологии
- MQTT против DDS: выбор правильного M2M протокола для IoT
- Понимание сетевых протоколов: от физического уровня к продвинутому арбитражу
- Основы цифровой памяти: адресация, доступ и волатильность
- Основные платы расширения для Raspberry Pi: I2C, UART, GPIO и не только — Наборы, хэдеры и защита
- 14 инновационных применений нанотехнологий: от медицины к материалам
- Серебряная пайка: процесс, материалы и применение
- Раскрытие производственной эффективности: проверенные стратегии данных
- Оптимизация приёма данных для более умного принятия решений
- Сорта древесины и их практическое применение: от строительства до производства бумаги
- Вольфрам: исторические применения и современные инновации