Выбор между I2C и SPI: ключевые различия и рекомендации
Введение
Проектируете устройство и не знаете, какой протокол выбрать — I2C или SPI? Оба интерфейса относятся к «низкоуровневым» протоколам, но отлично подходят для межчиповой коммуникации на печатной плате. Неправильный выбор может привести к проблемам с производительностью или сложностям в разводке, поэтому важно понимать их фундаментальные отличия.
Что такое протокол SPI?
SPI (Serial Peripheral Interface) был разработан компанией Motorola в 1980-х годах для связи микроконтроллеров с периферией, такой как EEPROM. Протокол использует четыре сигнальные линии (без учёта питания и земли):
- SS (Slave Select) — выбор ведомого устройства (управляется мастером)
- MOSI (Master Out Slave In) — данные от мастера к ведомому
- SCLK (Serial Clock) — тактовый сигнал (генерируется мастером)
- MISO (Master In Slave Out) — данные от ведомого к мастеру
На шине SPI может быть только одно ведущее устройство (мастер), но количество ведомых ограничено лишь количеством доступных линий SS. Для каждого дополнительного периферийного устройства требуется отдельная линия SS.
Принцип работы SPI
Когда мастер хочет связаться с конкретным периферийным устройством, он переводит соответствующую линию SS в низкое состояние. Затем запускается тактирование по линии SCLK. Обмен данными происходит в полнодуплексном режиме: мастер одновременно передаёт данные по MOSI и принимает по MISO. В один момент времени может обмениваться данными только одно ведомое устройство.
Что такое протокол I2C?
I2C (Inter-Integrated Circuit) был разработан Philips Semiconductors (ныне NXP) в 1982 году для стандартизации связи между чипами на одной плате. Протокол использует всего две сигнальные линии:
- SDA (Serial Data) — линия данных
- SCL (Serial Clock) — линия тактирования
Обе линии реализованы как «открытый коллектор» (open-drain) с подтягивающими резисторами к питанию. Это позволяет подключать множество ведущих и ведомых устройств к одной шине. Если два мастера пытаются передать данные одновременно, срабатывает арбитраж: устройство, обнаружившее низкий уровень на SDA при передаче единицы, прекращает передачу.
Адресация в I2C
Обмен начинается с условия START (SDA переходит в низкий уровень при высоком SCL). Затем мастер передаёт 7-битный адрес ведомого и бит направления (0 — запись, 1 — чтение). Ведомое устройство с совпадающим адресом подтверждает приём (ACK), притягивая линию SDA к нулю.
Ключевые различия между I2C и SPI
| Характеристика | SPI | I2C |
|---|---|---|
| Тип выводов | Push-pull (двухтактный) | Open-drain (открытый коллектор) |
| Макс. скорость | 10–100 Мбит/с (нет строгого стандарта) | 100 кбит/с (стандарт), 400 кбит/с (быстрый), 3,4 Мбит/с (высокоскоростной) |
| Мульти-мастер | Нет | Да |
| Количество линий | 4 (+1 SS на каждое доп. устройство) | 2 |
| Макс. периферия | Ограничено числом GPIO для SS | 112 устройств (7-битная адресация) |
| Управление потоком | Нет | Да (ACK/NACK) |
| Режимы тактирования | 4 режима (фаза/полярность) | Не применимо |
Преимущества и недостатки
SPI
Плюсы:
- Высокая скорость полнодуплексной передачи
- Низкое потребление энергии
- Простая реализация в ПО
Минусы:
- Требует больше проводников (особенно при множестве устройств)
- Работает только на коротких расстояниях (в пределах одной платы)
- Различные режимы и нестандартные вариации вызывают проблемы совместимости
I2C
Плюсы:
- Минимум проводов (2 линии для любого числа устройств)
- Поддержка мульти-мастерной топологии
- Меньшая чувствительность к помехам
- Возможность передачи данных между платами (на низких скоростях)
- Дешевле в реализации
Минусы:
- Ниже скорость по сравнению с SPI
- Большее потребление энергии из-за подтягивающих резисторов
- Риск зависания шины, если устройство не отпускает линию
- Сложнее программная реализация
Факторы выбора
Ограниченное количество выводов МК
Если микроконтроллер имеет мало свободных GPIO, I2C выигрывает за счёт двух линий.
Потребление энергии
Для батарейных устройств SPI часто предпочтительнее из-за отсутствия постоянного тока через подтяжки.
Требуемая скорость
Для передачи больших объёмов данных (дисплеи, АЦП с высокой частотой) — SPI. Для медленных датчиков (температура, давление) — достаточно I2C.
Размер платы и разводка
На компактных платах I2C упрощает трассировку.
Краткое руководство по выбору
| Критерий | Выбирайте SPI, если… | Выбирайте I2C, если… |
|---|---|---|
| Скорость | Нужен высокоскоростной обмен | Устройства работают на низкой скорости |
| Размер платы | Места достаточно | Компактная плата, мало слоёв |
| Выводы МК | Есть свободные GPIO для SS | Выводы дефицитны |
| Питание | Критично минимальное потребление | Потребление некритично |
UART как альтернатива
UART — это физический интерфейс для асинхронного последовательного обмена данными между двумя устройствами. В отличие от SPI и I2C, UART не использует парадигму мастер/ведомый и не имеет адресации. Требует всего два провода (TX, RX) и часто применяется для отладки, связи с модулями (GSM, GPS, Bluetooth) или межконтроллерного обмена на расстоянии.
Заключение
И SPI, и I2C широко применяются во встраиваемых системах. Часто на одном чипе присутствуют оба интерфейса, что позволяет не выбирать. Если выбор необходим: для высокоскоростных задач — SPI, для экономии выводов и простой топологии — I2C.
Промышленные технологии
- 7 ключевых React-библиотек, которые должен освоить каждый разработчик
- Основное руководство по тестированию трансформаторного масла для надежных энергосистем
- Защитите свои двигатели: основные преимущества линейных реакторов
- Основное руководство по защитным капотам шлифовальных кругов: защита пользователей от разрушения и травм
- 5 ключевых инсайтов о микроинструментах для точной обработки
- TAA Compliance: 5 ключевых пунктов, которые должен знать каждый поставщик
- 9 ключевых применений машинного обучения, которые вы должны знать
- Освоение фрикционных накладок сцепления: полное руководство для промышленного оборудования
- Базовый словарь терминов водоабразивной резки для профессионалов
- Закаточка (кюрлинг): технология создания текстурированных поверхностей