Главная chevron_right Функции chevron_right Связь chevron_right SPI

SPI

Библиотека SPI позволяет Arduino общаться с периферией — дисплеями, SD-картами, датчиками и сетевыми модулями — через быстрый синхронный интерфейс SPI.

Полная статья

Описание

Библиотека SPI реализует поддержку интерфейса SPI на плате Arduino, когда та выступает в роли ведущего (контроллера) устройства. Библиотека входит в состав всех официальных платформ Arduino (avr, megaavr, mbed, samd, sam, arc32), поэтому устанавливать её отдельно не нужно — она доступна сразу после установки поддержки платы.

SPI (Serial Peripheral Interface) — синхронный последовательный протокол, широко используемый для связи с дисплеями, SD-картами, АЦП, ЦАП, датчиками и другой периферией. В отличие от I2C, SPI работает на более высоких скоростях и поддерживает полный дуплекс, но требует отдельной линии выбора устройства (CS/SS) для каждого ведомого.

Чтобы подключить библиотеку, добавьте в начало скетча:

#include <SPI.h>

Подробнее об устройстве протокола, режимах тактирования и типичных схемах подключения рассказывает руководство Arduino и последовательный периферийный интерфейс (SPI).

Пины SPI по умолчанию

ПлатаПины SPI по умолчаниюДополнительные пины SPIПримечания
UNO R3, UNO R3 SMD, UNO WiFi Rev2, UNO Mini LE10(CS), 11(COPI), 12(CIPO), 13(SCK)Контакты SPI доступны в заголовке ICSP
UNO R4 Minima, UNO R4 WiFi10(CS), 11(COPI), 12(CIPO), 13(SCK)Контакты SPI доступны в заголовке ICSP
Leonardo, Yún Rev2, Zero10(CS), 11(COPI), 12(CIPO), 13(SCK)Контакты SPI доступны в заголовке ICSP
Micro14(CIPO), 15(SCK), 16(COPI)
Nano boards11(COPI), 12(CIPO), 13(SCK)
MKR boards8(COPI), 9(SCK), 10(CIPO)
Due74(CIPO), 75(COPI), 76(SCK)Контакты SPI доступны в специальном заголовке SPI
GIGA R1 Wi-Fi89(CIPO), 90(COPI), 91(SCK)12(CIPO), 11(COPI), 13(SCK), 10(CS)Пины 89, 90, 91 расположены в заголовке SPI.
Mega 2560 Rev350(CIPO), 51(COPI), 52(SCK), 53(CS)Контакты SPI доступны в заголовке ICSP

Конкретные номера пинов MOSI, MISO, SCK и SS зависят от модели платы — уточняйте их в документации или на распиновке вашей платы. Использование неправильных пинов — одна из самых частых причин, по которым SPI-устройство не отвечает.

Функции

Конфигурация

Контроль транзакций

Передача данных

Устарело

Перечисленные ниже функции считаются устаревшими. Вместо них рекомендуется использовать SPISettings совместно с beginTransaction() — это обеспечивает корректную работу в многозадачных и многоустройственных конфигурациях.

Где применяется

  • Дисплеи — TFT-экраны и OLED-модули с SPI-интерфейсом (например, на базе ILI9341 или ST7789).
  • Карты памяти — чтение и запись данных на SD-карту через SPI.
  • Датчики — АЦП, гироскопы, барометры и другие компоненты с высокоскоростным SPI-интерфейсом.
  • Сетевые модули — Ethernet-контроллеры (например, W5500) и радиомодули (например, NRF24L01).

Практические замечания

  • Всегда явно управляйте пином CS: переводите его в LOW перед началом обмена и в HIGH после завершения. Если этого не делать, ведомое устройство может игнорировать данные или мешать другим устройствам на шине.
  • Используйте beginTransaction() и endTransaction() — это защищает SPI-обмен от прерываний и конфликтов при работе нескольких ведомых устройств.
  • Режим SPI (0–3) и порядок битов (MSBFIRST / LSBFIRST) должны совпадать с требованиями конкретного устройства — смотрите его даташит. Неправильный режим — вторая по частоте причина проблем после неверных пинов.
  • Максимальная тактовая частота, которую поддерживает ведомое устройство, указана в его документации. Превышение этого значения приводит к ошибкам передачи, хотя внешне всё может выглядеть нормально.
  • Для отладки удобно временно снизить частоту SPI и вывести принятые байты в Serial Monitor — это помогает убедиться, что устройство вообще отвечает.

Полезные материалы