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:
- Polaryzacja zegara (CPOL) – określa stan logiczny linii SCK w stanie spoczynkowym.
- 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
- I²C – Inter‑Integrated Circuit
- UART – Universal Asynchronous Receiver/Transmitter
- Mikrokontroler
- System wbudowany
- EEPROM
- Pamięć Flash
Artykuł opracowany na podstawie źródeł technicznych oraz publikacji dostępnych w zasobach publicznych.