Открыть сервис

SPI

SPI (англ. Serial Peripheral Interface, последовательный периферийный интерфейс) — это синхронный последовательный интерфейс передачи данных, предназначенный для обмена информацией между микроконтроллерами и периферийными устройствами (датчиками, дисплеями, памятью, аналого-цифровыми преобразователями) на коротких расстояниях. Разработан компанией Motorola (ныне NXP Semiconductors) в конце 1980-х годов. Отличается высокой скоростью передачи (до десятков мегагерц), простотой аппаратной реализации и полнодуплексным режимом работы (одновременная передача и приём данных).

История

Интерфейс SPI был впервые представлен компанией Motorola в 1987 году как часть семейства микроконтроллеров MC68HC11. Изначально он использовался для подключения внешних микросхем памяти и периферии, не имея официального стандарта (в отличие от I²C или UART). Благодаря открытости спецификаций и простоте внедрения, SPI быстро стал де-факто стандартом в индустрии встраиваемых систем. В 1990-е годы его поддержка была включена в большинство микроконтроллеров (Atmel, Microchip, Texas Instruments) и микропроцессоров. В 2000-е годы появились высокоскоростные варианты (Quad SPI, Dual SPI), использующие несколько линий данных для увеличения пропускной способности.

Архитектура и принцип работы

Топология соединения

SPI использует архитектуру «ведущий-ведомый» (master-slave). Одно устройство (ведущий) управляет тактовым сигналом и инициирует передачу, одно или несколько устройств (ведомые) отвечают на запросы. Соединение осуществляется по четырём основным линиям:

  • SCLK (Serial Clock) — тактовый сигнал, генерируемый ведущим.
  • MOSI (Master Out Slave In) — линия передачи данных от ведущего к ведомому.
  • MISO (Master In Slave Out) — линия передачи данных от ведомого к ведущему.
  • SS (Slave Select) — линия выбора ведомого (активный низкий уровень).

Для подключения нескольких ведомых используются два способа:

  1. Независимая выборка — каждое ведомое устройство подключается к отдельному выводу SS ведущего.
  2. Дейзи-чейн (каскадное соединение) — данные проходят последовательно через все устройства, что требует поддержки со стороны аппаратуры.

Режимы работы

Параметры передачи определяются двумя битами в конфигурации ведущего: CPOL (Clock Polarity) и CPHA (Clock Phase). Возможны четыре режима:

РежимCPOLCPHAОписание
000Тактовый сигнал начинается с низкого уровня, данные фиксируются по переднему фронту
101Тактовый сигнал начинается с низкого уровня, данные фиксируются по заднему фронту
210Тактовый сигнал начинается с высокого уровня, данные фиксируются по переднему фронту
311Тактовый сигнал начинается с высокого уровня, данные фиксируются по заднему фронту

Выбор режима зависит от спецификации конкретного периферийного устройства; несовпадение режимов приводит к ошибкам передачи.

Формат данных

Передача данных в SPI осуществляется пакетами (обычно 8 бит, но возможны 4, 16, 32 бита в зависимости от реализации). Ведущий генерирует тактовые импульсы, одновременно отправляя биты по линии MOSI и принимая биты по MISO. Таким образом, за один цикл обмена происходит полнодуплексная передача. Стартовый бит отсутствует; передача начинается с активации линии SS (переходом в низкий уровень) и заканчивается её деактивацией.

Преимущества и недостатки

Преимущества

  • Высокая скорость — до 80 МГц в современных реализациях (например, в микроконтроллерах STM32).
  • Полнодуплексность — одновременная передача и приём данных.
  • Простота аппаратуры — не требуется сложных схем синхронизации.
  • Гибкость — настраиваемая длина слова, частота, режимы.
  • Низкая задержка — отсутствие стартовых и стоповых битов (в отличие от UART).

Недостатки

  • Отсутствие стандарта — разные производители могут реализовывать интерфейс с отличиями (например, порядок битов, полярность сигналов).
  • Большое количество выводов — при подключении N ведомых устройств требуется N+3 линии (при независимой выборке).
  • Ограниченная дальность — обычно до 1-2 метров из-за чувствительности к помехам.
  • Нет подтверждения приёма — ведомый не может сообщить об ошибке (в отличие от I²C).

Применение

SPI широко используется в следующих областях:

Встраиваемые системы

  • Датчики — акселерометры, гироскопы, магнитометры (например, MPU6050, LSM303).
  • Дисплеи — OLED и LCD панели (например, SSD1306, ILI9341).
  • Память — EEPROM (25LC256), Flash (W25Q64), SD-карты (в режиме SPI).
  • АЦП/ЦАП — MCP3008, MAX5216.

Промышленность

  • Программируемые логические контроллеры (ПЛК) — обмен данными между модулями ввода/вывода.
  • Измерительное оборудование — осциллографы, мультиметры.

Потребительская электроника

  • Микроконтроллеры Arduino, ESP32, Raspberry Pi — для подключения периферии.
  • Радиомодули — nRF24L01, RFM69.

Разновидности и расширения

Quad SPI (QSPI)

Использует четыре линии данных (IO0–IO3) вместо одной MOSI и одной MISO, что позволяет передавать до 4 бит за такт. Применяется в высокоскоростных Flash-памятях (например, Winbond W25Q64).

Dual SPI

Использует две линии данных. Часто реализуется как режим совместимости с Quad SPI.

Microwire

Упрощённый вариант SPI, разработанный National Semiconductor (ныне Texas Instruments). Отличается фиксированной длиной слова (8 бит) и меньшим числом режимов.

Serial Peripheral Interface Plus (SPI+)

Расширение с поддержкой CRC (циклического избыточного кода) для контроля целостности данных.

Реализация в популярных платформах

Arduino

Библиотека SPI.h предоставляет методы begin(), transfer(), beginTransaction(). Для выбора ведомого используется цифровой вывод (например, digitalWrite(SS_PIN, LOW)).

Raspberry Pi

В Linux SPI доступен через файловые устройства /dev/spidev0.0 и /dev/spidev0.1. Управление осуществляется с помощью библиотек wiringPi или spidev.

ESP32

Поддерживает до трёх аппаратных SPI-интерфейсов (SPI2, SPI3, HSPI). Настройка производится через фреймворк ESP-IDF или Arduino-совместимые библиотеки.

Альтернативы

  • I²C (Inter-Integrated Circuit) — двухпроводной полудуплексный интерфейс, требующий меньше выводов, но с меньшей скоростью и сложнее в реализации.
  • UART (Universal Asynchronous Receiver-Transmitter) — асинхронный интерфейс, не требующий тактового сигнала, но не поддерживающий полнодуплексность без дополнительных линий.
  • CAN (Controller Area Network) — дифференциальный последовательный интерфейс для промышленности и автомобилестроения, устойчивый к помехам.

Интересные факты

  • В спецификации Motorola SPI не был запатентован, что способствовало его широкому распространению.
  • Некоторые производители (например, Microchip) реализуют SPI с возможностью работы в режиме «общего ведомого», где несколько устройств делят одну линию MISO.
  • В интерфейсе SD-карт SPI используется как резервный режим при отсутствии поддержки основного протокола.

Источники

  • Motorola. SPI Block Guide V03.06. 2003.
  • NXP Semiconductors. AN4707: Using the SPI Module. 2013.
  • Atmel. AVR151: Setup and Use of the SPI. 2010.
  • Texas Instruments. Understanding SPI. 2019.
  • Wikipedia. Serial Peripheral Interface. 2024.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →