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, мы можем помочь в его реализации. Мы занимаемся разработкой схем, программированием и изготовлением печатных плат под конкретные задачи. Ознакомьтесь с примерами реализованных проектов в портфолио и закажите разработку под ключ для вашего бизнеса или хобби.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Двухполярное питание из однополярного

Двухполярное питание из однополярного

Двухполярное питание необходимо для питания операционных усилителей, усилителей мощности и другой те..

Настройка Arduino IDE для программирования WiFi модуля ESP8266

Настройка Arduino IDE для программирования WiFi модуля ESP8266

Настройка Arduino IDE для программирования WiFi модуля ESP8266ESP8266 это дешовые широко распростран..

Управление servo-мотором через COM-порт Arduino

Управление servo-мотором через COM-порт Arduino

Опишем программу управления серво-мотором командами с COM-порта на примере контроллера Arduino Leona..

Плата STM32F103C8T6

Плата STM32F103C8T6

Минимальная плата контроллера от мирового лидера по производству контроллеров - фирмы STM32.Для зали..

211.50грн.

Модуль 5 — Датчики и модули: DHT11, LDR и проект «Умная лампа»

Модуль 5 — Датчики и модули: DHT11, LDR и проект «Умная лампа»

Модуль 5 — Датчики и модули (курс для начинающих) Цель модуля: познакомиться с популярными ..