SPI (Serial Peripheral Interface) 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 названы с точки зрения ведущего устройства. Если вы смотрите со стороны ведомого, все наоборот.

Как происходит обмен данными?

  1. Инициализация: Ведущий устанавливает напряжение на линии SS нужного ведомого устройства в низкий уровень (логический 0). Это как сказать: "Эй, [имя устройства], я сейчас с тобой разговариваю!".

  2. Синхронная передача: Ведущий генерирует тактовые импульсы на линии SCLK.

  3. Передача бит: С каждым тактовым импульсом происходит два действия одновременно:

    • Ведущий выставляет очередной бит данных на линии MOSI.

    • Ведомый выставляет очередной бит данных на линии MISO.

  4. Завершение: После передачи нужного количества бит (обычно 8, 16 и т.д.) ведущий возвращает линию SS в высокий уровень (логическая 1).

Таким образом, SPI — это интерфейс полнодуплексный (full-duplex), то есть передача и прием данных происходят одновременно.


Конфигурация (Режимы работы SPI)

Чтобы обмен данными был корректен, ведущее и ведомое устройства должны быть настроены на один и тот же режим. Режим определяется двумя параметрами:

  1. CPOL (Clock Polarity) — Полярность тактового импульса.

    • CPOL = 0: Логический ноль на линии SCLK в состоянии покоя.

    • CPOL = 1: Логическая единица на линии SCLK в состоянии покоя.

  2. 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 — это быстрый, простой и эффективный интерфейс для связи между микросхемами внутри одного устройства. Его главные козыри — скорость и простота, а главные недостатки — большее количество управляющих линий и отсутствие механизма подтверждения приема.