Arduino SPI: Полное руководство по последовательной шине Serial Peripheral Interface
SPI (Serial Peripheral Interface) — это высокоскоростная последовательная шина, которая широко применяется в электронике для обмена данными между микроконтроллером и периферийными устройствами. В экосистеме Arduino интерфейс SPI используется для подключения SD-карт, RFID-считывателей, TFT- и OLED-дисплеев, модулей Ethernet и других компонентов. Благодаря своей простоте и скорости SPI стал стандартом де-факто для быстрой передачи данных на небольшие расстояния.
Что такое SPI?
Интерфейс SPI был разработан компанией Motorola и представляет собой синхронный протокол передачи данных «ведущий-ведомый». В роли ведущего (master) чаще всего выступает микроконтроллер (например, Arduino), а ведомыми (slave) являются периферийные устройства.
Передача данных осуществляется по четырём основным линиям:
- MOSI (Master Out Slave In) — данные от ведущего к ведомому.
- MISO (Master In Slave Out) — данные от ведомого к ведущему.
- SCK (Serial Clock) — тактовый сигнал.
- SS (Slave Select) — выбор конкретного ведомого устройства.
Особенность SPI заключается в том, что каждое ведомое устройство активируется отдельной линией SS. Это позволяет подключать сразу несколько модулей к одной шине, используя разные пины выбора.
Преимущества SPI
- Высокая скорость обмена данными (до нескольких МГц и выше).
- Простая схема подключения.
- Возможность работы с несколькими устройствами на одной шине.
- Синхронная передача, что повышает надёжность обмена.
Недостатки SPI
- Требует больше проводов по сравнению с I2C.
- Нет стандартного механизма адресации — каждый slave выбирается отдельным пином.
- Кабели ограниченной длины, подходит только для коротких соединений.
Аппаратная поддержка SPI в Arduino
Большинство плат Arduino (Uno, Mega, Nano) имеют встроенный аппаратный SPI-контроллер. Выводы зависят от модели:
| Модель Arduino | MOSI | MISO | SCK | SS (по умолчанию) |
|---|---|---|---|---|
| Arduino Uno / Nano | 11 | 12 | 13 | 10 |
| Arduino Mega | 51 | 50 | 52 | 53 |
| Arduino Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | 10 |
Для подключения рекомендуется использовать выводы разъёма ICSP, так как именно к ним подключён аппаратный SPI.
Пример использования SPI: работа с SD-картой
Рассмотрим пример подключения и работы с SD-картой через SPI:
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10;
void setup() {
Serial.begin(9600);
if (!SD.begin(chipSelect)) {
Serial.println("Ошибка инициализации SD-карты!");
return;
}
Serial.println("SD-карта готова к работе.");
File dataFile = SD.open("test.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Привет, SPI!");
dataFile.close();
Serial.println("Запись прошла успешно.");
} else {
Serial.println("Не удалось открыть файл.");
}
}
void loop() {}
SPI и дисплеи
Многие графические TFT и OLED-дисплеи используют интерфейс SPI. Это позволяет работать с высокой скоростью обновления экрана, в отличие от I2C, где скорость ограничена.
Пример подключения OLED-дисплея с библиотекой Adafruit SSD1306:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#define OLED_DC 9
#define OLED_CS 10
#define OLED_RESET 8
Adafruit_SSD1306 display(128, 64, &SPI, OLED_DC, OLED_RESET, OLED_CS);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello SPI");
display.display();
}
void loop() {}
SPI и RFID-считыватели
Один из самых популярных RFID-модулей для Arduino — RC522. Он также работает через SPI и позволяет считывать карты и метки стандарта MIFARE.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
Serial.println("Поднесите карту...");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
Serial.print("UID карты: ");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
rfid.PICC_HaltA();
}
Настройка SPI вручную
Библиотека SPI.h позволяет настраивать скорость передачи, порядок бит и режим работы (MODE0–MODE3). Например:
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
digitalWrite(SS, LOW);
SPI.transfer(0x55);
digitalWrite(SS, HIGH);
SPI.endTransaction();
Заключение
Интерфейс SPI — это мощный инструмент для проектов на Arduino. Он позволяет подключать быстрые периферийные устройства, такие как SD-карты, дисплеи, RFID-считыватели и Ethernet-модули. Несмотря на большее количество проводов по сравнению с I2C, SPI обеспечивает высокую скорость и надёжность обмена.
Коммерческое предложение
Если вы планируете собственный проект с использованием SPI или других технологий Arduino и ESP32, мы можем помочь в его реализации. Мы занимаемся разработкой схем, программированием и изготовлением печатных плат под конкретные задачи. Ознакомьтесь с примерами реализованных проектов в портфолио и закажите разработку под ключ для вашего бизнеса или хобби.
Модуль енкодера
Модуль енкодера с кнопкой.Используется для управления меню в различных устройствах. Заменяет множест..
74.24грн.
Уроки Arduino типы данных для начинающих
Привет друзья от geekmatic.in.ua! Пора заняться полезным делом и разобрать типы данных, представле..
BMS плата защиты 3х литий-ионных аккумуляторов 10А
Модуль защиты батареи трех литий-ионных аккумуляторовНапряжение отсечки при заряде 4,25 ... 4,3..
114.46грн.
АЦП ADS1115 4-х канальный
АЦП ADS1115 4-х канальный ADS1115 — это 4-х канальный 16-разрядный аналого-цифровой преобразовате..
99.62грн.
Светодиод ультраяркий 5мм
Сверхяркий светодиод диаметром 5 мм Корпус прозрачный у светодиодов разного цвета свечения. То есть..
5.75грн.





