UART, SPI, I2C и уровни сигналов
Цель: Понять различия UART, SPI и I²C: способ синхронизации, состав линий, формат обмена, электрические уровни и базовую диагностику интерфейсов.
3 часа короткая теория, самостоятельная практика, проверка результата и тест.
Суть темы
UART, SPI и I²C передают цифровые данные, но делают это по-разному. UART обычно работает без отдельной линии тактового сигнала: передатчик и приёмник заранее согласуют скорость и формат кадра. SPI использует общий тактовый сигнал от ведущего устройства и отдельную линию выбора ведомого. I²C использует две линии — SCL и SDA — и адресацию устройств на общей шине.
- UART: линии TX/RX, стартовый бит, биты данных, необязательная чётность и стоповый бит.
- SPI: SCLK, MOSI, MISO и CS; режим определяется сочетанием CPOL/CPHA.
- I²C: SCL/SDA с открытым стоком и подтягивающими резисторами; обмен строится из START, адреса, данных, ACK/NACK и STOP.
- Для всех трёх интерфейсов нужно проверить совместимость логических уровней и общий опорный провод.
Ключевые связи и параметры
В UART приёмник ориентируется на стартовый бит и затем делает выборки внутри кадра. Поэтому ошибка скорости передачи постепенно сдвигает моменты выборки и приводит к неверному чтению данных. Для 115200 бод длительность одного бита составляет примерно 8,68 мкс.
В SPI моменты передачи и считывания задаются тактовым сигналом SCLK. Параметры CPOL и CPHA определяют исходный уровень тактовой линии и рабочий фронт. В I²C высокий уровень создаётся подтягивающим резистором, поэтому скорость нарастания фронта зависит от сопротивления подтяжки и ёмкости всей шины.
tбит(UART) = 1 / baudскорость SPI определяется частотой SCLKдля I²C скорость фронта зависит от Rподтяжки · CшиныРазбор примера
UART настроен на 115200 бод с одной стороны и на 9600 бод с другой. Электрические импульсы на линии есть, но приёмник выбирает биты в неправильные моменты, поэтому на выходе появляются бессмысленные символы.
В I²C логический анализатор может показать последовательность байтов, но не объяснить слишком медленный фронт SDA. Осциллограф покажет, что линия долго поднимается к логической единице из-за слишком слабой подтяжки или большой ёмкости шины.
Практическая работа и проверка
- Для UART измерьте длительность одного бита и вычислите скорость.
- Для SPI определите состояние CS и режим CPOL/CPHA.
- Для I²C найдите START, адрес, ACK/NACK и STOP.
- Осциллографом проверьте амплитуду сигналов и форму фронтов.
- Сопоставьте переданные байты с описанием регистра или команды в документации периферийного устройства.
Типичные ошибки и диагностика
- Менять скорость UART только на одной стороне.
- Перепутать режим CPOL/CPHA в SPI.
- Подключить I²C без подтягивающих резисторов.
- Соединить устройства с несовместимыми логическими уровнями.
При ошибках UART сначала проверяют скорость, формат кадра, общий провод и уровни. В SPI — CS, CPOL/CPHA и порядок битов. В I²C — наличие подтяжек, зависшую низкую линию, адрес и подтверждения ACK/NACK.
Связь с реальным устройством
При ремонте цифровой платы важно разделять два уровня диагностики: протокол обмена и физическую форму сигналов. Правильные байты невозможны без корректных электрических уровней и временных параметров.
Что нужно запомнить
- UART работает без отдельной тактовой линии и требует согласованной скорости и формата кадра.
- SPI использует SCLK и отдельный выбор ведомого устройства.
- I²C использует SCL/SDA, адресацию и подтягивающие резисторы.
- Логический анализатор показывает структуру обмена, осциллограф — электрическую форму сигналов.
- Совместимость уровней и общий опорный провод обязательны для любого цифрового интерфейса.