SPI — быстрый последовательный интерфейс на четырёх проводах. Используется там, где нужна скорость: SD-карты, дисплеи, flash-память, радиомодули.
Линии: SCLK (такт), MOSI (данные от ведущего), MISO (данные к ведущему), CS (выбор устройства). Плюс земля.
Как работает: ведущий выдаёт такты, данные идут в обе стороны одновременно (полный дуплекс). Устройство выбирается низким уровнем на CS — поэтому каждому нужно отдельное CS.
Скорости: от 1 до 100 МГц и выше. На практике 10–40 МГц.
Режимы (CPOL/CPHA): четыре комбинации полярности такта и фазы. Если режим не совпадает с даташитом, данные читаются «со сдвигом» — классическая ошибка. Указывается как mode 0, 1, 2, 3.
Плюсы: быстро, просто, полный дуплекс, никаких адресов и конфликтов.
Минусы: четыре провода и отдельный CS на каждое устройство (пять устройств — пять CS), нет подтверждения приёма, короткие расстояния.
Типичная ошибка новичка: подключил MISO/MOSI наоборот и получил 0xFF или 0x00 в ответ. Другая: забыл CS — устройство не отвечает. Третья: частота выше, чем поддерживает модуль.
Проверка: если данные не читаются, снизь частоту до 1 МГц и проверь режим. В 80 % случаев проблема в этом.
Для светодиодных лент WS2812 SPI не подходит (там свой протокол 800 кГц), а вот для сдвиговых регистров 74HC595 и драйверов экранов — идеально.
SPI быстрее I2C в разы, и без него не работают экраны, карты памяти и быстрые АЦП.
Подключи модуль microSD или дисплей по SPI. Выведи ID регистра (например, 0x00 у многих чипов) — это проверка связи.
Проверь себя
Почему на SPI каждому устройству нужен свой CS?
Шина общая, и все устройства слышат такты. CS говорит, кому именно адресованы данные. Если у двух устройств общий CS, они ответят одновременно и «подерутся» на MISO.
-
Wikipedia: Serial Peripheral Interface
SPI: линии и режимы
-
SparkFun: Serial Peripheral Interface
SPI на практике