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 LE | 10(CS), 11(COPI), 12(CIPO), 13(SCK) | Контакты SPI доступны в заголовке ICSP | |
| UNO R4 Minima, UNO R4 WiFi | 10(CS), 11(COPI), 12(CIPO), 13(SCK) | Контакты SPI доступны в заголовке ICSP | |
| Leonardo, Yún Rev2, Zero | 10(CS), 11(COPI), 12(CIPO), 13(SCK) | Контакты SPI доступны в заголовке ICSP | |
| Micro | 14(CIPO), 15(SCK), 16(COPI) | ||
| Nano boards | 11(COPI), 12(CIPO), 13(SCK) | ||
| MKR boards | 8(COPI), 9(SCK), 10(CIPO) | ||
| Due | 74(CIPO), 75(COPI), 76(SCK) | Контакты SPI доступны в специальном заголовке SPI | |
| GIGA R1 Wi-Fi | 89(CIPO), 90(COPI), 91(SCK) | 12(CIPO), 11(COPI), 13(SCK), 10(CS) | Пины 89, 90, 91 расположены в заголовке SPI. |
| Mega 2560 Rev3 | 50(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— это помогает убедиться, что устройство вообще отвечает.