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 полягає в тому, що кожен slave активується окремою лінією 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Модуль живлення збільшуючий 2...24В/5...28В 2А

Модуль живлення збільшуючий 2...24В/5...28В 2А

Модуль збільшуючий напругу постійного струму з 2 ... 24 В до 5 ... 28 ВНапруга на виході регулю..

36.78грн.

Преобразование Char в Integer и обратно

Преобразование Char в Integer и обратно

Преобразование целочисленных переменных int в символьные переменные char в Arduino IDE - довольно пр..

Силовий MOSFET транзистор IRF520 N-канальний

Силовий MOSFET транзистор IRF520 N-канальний

MOSFET транзистор 3-го поколінняВикористовується для швидкісної комутації потужних виконавчих механі..

28.43грн.

Подвійна шестерня для зубчатого ременю на 20 зубів під вісь 8 мм

Подвійна шестерня для зубчатого ременю на 20 зубів під вісь 8 мм

Подвійна шестерня для передачі обертального моменту з одного валу на інший.Застосовується для розділ..

78.53грн.

Ніодімовий магніт 12mm x 3mm N35

Ніодімовий магніт 12mm x 3mm N35

Циліндричний ніодімовий магніт N35Розміри 12мм x 3ммІдеально підходить для роботи в зв'язці з м..

14.00грн.