SPI (Serial Peripheral Interface) — это синхронный последовательный интерфейс передачи данных, разработанный компанией Motorola для связи между микросхемами на короткие расстояния.
Проще говоря, это способ "общения" электронных компонентов (например, микроконтроллера с датчиком, памятью, дисплеем), при котором биты данных передаются один за другим по нескольким проводам.
Основные принципы работы
SPI работает по принципу "Ведущий-Ведомый" (Master-Slave). Ведущее устройство (чаще всего это микроконтроллер) управляет обменом данными и тактирует передачу.
Для работы обычно используются 4 сигнальные линии (провода):
| Сигнал | Назначение | Описание |
|---|---|---|
| SCLK (Serial Clock) | Тактовый сигнал | Генерируется Ведущим. Синхронизирует передачу каждого бита данных. |
| MOSI (Master Out Slave In) | Данные от Ведущего к Ведомому | Линия, по которой ведущий передает данные ведомому. |
| MISO (Master In Slave Out) | Данные от Ведомого к Ведущему | Линия, по которой ведомый отвечает ведущему. |
| SS/CS (Slave Select / Chip Select) | Выбор ведомого | Активный низкий сигнал. Ведущий "подтягивает" его к низкому уровню (0 В), чтобы активировать конкретное ведомое устройство. |
Важно: Линии MISO и MOSI названы с точки зрения ведущего устройства. Если вы смотрите со стороны ведомого, все наоборот.
Как происходит обмен данными?
-
Инициализация: Ведущий устанавливает напряжение на линии SS нужного ведомого устройства в низкий уровень (логический 0). Это как сказать: "Эй, [имя устройства], я сейчас с тобой разговариваю!".
-
Синхронная передача: Ведущий генерирует тактовые импульсы на линии SCLK.
-
Передача бит: С каждым тактовым импульсом происходит два действия одновременно:
-
Ведущий выставляет очередной бит данных на линии MOSI.
-
Ведомый выставляет очередной бит данных на линии MISO.
-
-
Завершение: После передачи нужного количества бит (обычно 8, 16 и т.д.) ведущий возвращает линию SS в высокий уровень (логическая 1).
Таким образом, SPI — это интерфейс полнодуплексный (full-duplex), то есть передача и прием данных происходят одновременно.
Конфигурация (Режимы работы SPI)
Чтобы обмен данными был корректен, ведущее и ведомое устройства должны быть настроены на один и тот же режим. Режим определяется двумя параметрами:
-
CPOL (Clock Polarity) — Полярность тактового импульса.
-
CPOL = 0: Логический ноль на линии SCLK в состоянии покоя. -
CPOL = 1: Логическая единица на линии SCLK в состоянии покоя.
-
-
CPHA (Clock Phase) — Фаза тактового импульса.
-
CPHA = 0: Данные захватываются по переднему (нарастающему) фронту тактового импульса. -
CPHA = 1: Данные захватываются по заднему (спадающему) фронту тактового импульса.
-
Комбинация этих параметров дает 4 режима SPI:
| Режим | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Чаще всего используются режимы 0 и 3. В даташите (документации) на любую микросхему с SPI всегда указан требуемый режим.
Преимущества и Недостатки
Преимущества:
-
Высокая скорость: Работает на частотах до десятков МГц (значительно быстрее I²C и UART).
-
Полнодуплексная передача: Данные можно отправлять и получать одновременно.
-
Простота: Аппаратная реализация очень проста, нет сложного протокола с адресами, как в I²C.
-
Гибкость: Разрядность передаваемых данных не ограничена 8 битами (может быть 12, 16 и т.д.).
Недостатки:
-
Большее количество проводов: По сравнению с I²C (2 провода) и UART (2 провода + "земля") требуется 4 провода на устройство.
-
Нет подтверждения приема: Ведомое устройство не может сообщить, что оно получило данные (в отличие от I²C).
-
Нет встроенной коллизии шины: Только один ведущий. Для многомастерных систем нужны дополнительные ухищрения.
-
Требует больше выводов микроконтроллера: Каждое ведомое устройство требует отдельной линии SS. Если устройств много, выводы быстро заканчиваются (это решается с помощью демультиплексоров).
Сравнение с другими интерфейсами
| Характеристика | SPI | I²C | UART |
|---|---|---|---|
| Количество проводов | 4+ | 2 | 2 (+ GND) |
| Скорость | Очень высокая (десятки МГц) | Средняя (до 5 Мгц) | Низкая (до 115200 бод) |
| Синхронность | Синхронный (есть такт) | Синхронный (есть такт) | Асинхронный (нет такта) |
| Тип передачи | Полный дуплекс | Полудуплекс | Полный дуплекс |
| Подключение устройств | Отдельный CS на каждое | По адресам на одной шине | "Точка-точка" |
Где применяется?
SPI очень распространен в embedded-электронике:
-
Память: Flash, EEPROM.
-
Датчики: Акселерометры, гироскопы, термометры, датчики давления.
-
ЦАП/АЦП (цифро-аналоговые и аналого-цифровые преобразователи).
-
Цифровые потенциометры.
-
Дисплеи: TFT, OLED, LCD.
-
SD-карты (часто в режиме SDIO, который является расширением SPI).
-
RFID-модули, Wi-Fi и Bluetooth-модули.
Заключение
SPI — это быстрый, простой и эффективный интерфейс для связи между микросхемами внутри одного устройства. Его главные козыри — скорость и простота, а главные недостатки — большее количество управляющих линий и отсутствие механизма подтверждения приема.