encyklopedia.space

SPI (Serial Peripheral Interface)

SPI – skrót od Serial Peripheral Interface – jest synchronicznym, pełnodupleksowym protokołem komunikacji szeregowej wykorzystywanym w systemach wbudowanych do wymiany danych pomiędzy mikrokontrolerem a różnorodnymi peryferiami (np. pamięciami EEPROM, przetwornikami A/D, wyświetlaczami, czujnikami). Standard został opracowany w latach 80. przez firmę Motorola i od tego czasu stał się jedną z najpopularniejszych metod podłączania urządzeń w elektronice cyfrowej.

Historia

Pierwsze implementacje SPI pojawiły się w mikrokomputerach serii Motorola 6800 i Motorola 68000. W latach 90. protokół został przyjęty przez wielu producentów układów scalonych, co doprowadziło do jego standaryzacji w licznych dokumentacjach technicznych i podręcznikach.

Budowa i zasada działania

Typowa magistrala SPI składa się z czterech linii sygnałowych:

  • SCK (Serial Clock) – zegar generowany przez mastera, synchronizuje transmisję danych.
  • MOSI (Master Out Slave In) – linia danych wysyłana z mastera do slave’a.
  • MISO (Master In Slave Out) – linia danych wysyłana ze slave’a do mastera.
  • SS (Slave Select) – sygnał wyboru konkretnego urządzenia peryferyjnego (aktywowany niskim poziomem).

Komunikacja odbywa się w trybie pełnodupleksowym – jednoczesne przesyłanie i odbieranie danych jest możliwe w jednym cyklu zegara.

Tryby pracy i konfiguracja

Protokół umożliwia konfigurowanie kilku parametrów, które wpływają na kolejność i moment transmisji bitów:

  1. Polaryzacja zegara (CPOL) – określa stan logiczny linii SCK w stanie spoczynkowym.
  2. Faza zegara (CPHA) – definiuje, czy dane są próbkowane na pierwszej czy drugiej krawędzi impulsu zegara.

Połączenie tych dwóch bitów daje cztery możliwe tryby (0‑0, 0‑1, 1‑0, 1‑1), które muszą być zgodne zarówno po stronie mastera, jak i slave’a.

Zastosowania

SPI znajduje zastosowanie w wielu dziedzinach:

  • odczyt i zapis pamięci Flash oraz EEPROM,
  • komunikacja z wyświetlaczami graficznymi i segmentowymi,
  • interfejsy do przetworników analogowo‑cyfrowych (ADC) i cyfrowo‑analogowych (DAC),
  • pobieranie danych z czujników (np. żyroskopów, akcelerometrów),
  • sterowanie układami PWM i silnikami krokowymi.

Porównanie z innymi protokołami

W odróżnieniu od protokołu I²C, SPI nie wymaga adresowania urządzeń – każdy slave jest wybierany osobnym sygnałem SS. To upraszcza projektowanie, ale zwiększa liczbę potrzebnych linii w przypadku wielu peryferiów. W porównaniu z UART SPI oferuje wyższą przepustowość i możliwość pełnodupleksową, jednak wymaga bardziej złożonego układu scalonego w roli mastera.

Standardy i kompatybilność

Choć nie istnieje formalny międzynarodowy standard (np. IEEE), większość producentów trzyma się specyfikacji opisanej w dokumentacji technicznej Motorola. Różnice mogą występować w maksymalnej częstotliwości zegara (od kilku kHz do kilkudziesięciu MHz) oraz w liczbie obsługiwanych linii SS.

Przykładowy kod

Poniżej zamieszczono fragment kodu w języku C dla mikrokontrolera z rodziny AVR, ilustrujący inicjalizację i transmisję jednego bajtu:

/* Inicjalizacja magistrali SPI w trybie Master */
void SPI_init(void) {
    /* Ustawienie pinów */
    DDRB |= (1<<PB3) | (1<<PB5) | (1<<PB2);  // MOSI, SCK, SS jako wyjścia
    DDRB &= ~(1<<PB4);                         // MISO jako wejście

    /* Włączenie SPI, tryb Master, preskaler 16 */
    SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR0);
}

/* Wysłanie i odebranie jednego bajtu */
uint8_t SPI_transfer(uint8_t data) {
    SPDR = data;                               // rozpocznij transmisję
    while(!(SPSR & (1<<SPIF))) ;               // czekaj na zakończenie
    return SPDR;                               // odczytaj odebrany bajt
}

Wady i ograniczenia

  • Wymaga osobnego sygnału SS dla każdego slave’a, co przy dużej liczbie urządzeń zwiększa liczbę wyprowadzeń.
  • Brak wbudowanego mechanizmu wykrywania konfliktów – błędne podłączenie linii może prowadzić do zakleszczeń.
  • Nie zapewnia automatycznego potwierdzenia poprawności transmisji (np. kontrola sumy kontrolnej musi być implementowana w warstwie wyższej).

Patrz także

Artykuł opracowany na podstawie źródeł technicznych oraz publikacji dostępnych w zasobach publicznych.