
Interfejs SPI: tryby, parametry czasowe i połączenia
Poznaj CPOL, CPHA, MOSI, MISO, SCLK i CS, a następnie zbuduj niezawodną magistralę SPI z uwzględnieniem czasu, poziomów logicznych, topologii i diagnostyki.
Opracowanie i przegląd techniczny:ElectroDesignForge Engineering Team
Zobacz proces redakcyjnyPrzewodnik
SPI (Serial Peripheral Interface) łączy kontroler z pobliskimi układami, takimi jak pamięci Flash, przetworniki ADC/DAC, wyświetlacze, czujniki i układy RF. To szybkie, synchroniczne łącze szeregowe z transmisją dwukierunkową, lecz SPI nie stanowi kompletnej normy: sposób tworzenia ramek i ograniczenia elektryczne określają dokumentacje poszczególnych układów.
Szybkie zestawienie
| Sygnał | Kierunek z punktu widzenia kontrolera | Funkcja | Ważna uwaga |
|---|---|---|---|
| SCLK / SCK | wyjście | Zegar szeregowy | Jego poziom spoczynkowy określa CPOL. |
| MOSI | kontroler → urządzenie peryferyjne | Dane nadawane | Inne nazwy to COPI, SDI lub DIN. |
| MISO | urządzenie peryferyjne → kontroler | Dane odbierane | Inne nazwy to CIPO, SDO lub DOUT; stan wysokiej impedancji, gdy układ nie jest wybrany. |
| CS / SS / nCS | wyjście, zwykle aktywne stanem niskim | Wybór układu i granica ramki | Zwykle każdy układ peryferyjny wymaga niezależnego sygnału CS. |
| GND | wspólna | Odniesienie i droga prądu powrotnego | Prowadź ją obok sygnałów, zwłaszcza poza płytką. |
Nazwy MOSI i MISO przyjmują punkt widzenia kontrolera. Nazwy COPI (Controller Out, Peripheral In) i CIPO (Controller In, Peripheral Out) jasno wskazują role także wtedy, gdy omawia się łącze bez schematu.
SPI nie określa adresowania, potwierdzania ani uniwersalnej maksymalnej szybkości. Protokół danego urządzenia definiuje polecenia, adresy rejestrów, puste bajty zegarowe i odpowiedzi. Analizator stanów logicznych może więc poprawnie dekodować bity, choć urządzenie milczy z powodu błędnego CS albo błędnego podziału transmisji na ramki.
Przed połączeniem sprawdź: poziomy logiczne, dopuszczalną częstotliwość SCLK, tryb SPI, kolejność MSB/LSB, długość słowa, aktywny poziom CS i zależności czasowe CS. Domeny 1.8 V, 2.5 V, 3.3 V i 5 V nie są automatycznie zgodne.
Cztery tryby: CPOL i CPHA
- CPOL (polaryzacja zegara) określa poziom spoczynkowy SCLK: 0 = niski, 1 = wysoki.
- CPHA (faza zegara) określa zbocze próbkowania. Przy CPHA = 0 pierwsze zbocze po aktywacji CS próbkuje pierwszy bit; przy CPHA = 1 pierwsze zbocze zmienia ten bit, a następne go próbkuje.
| Tryb | CPOL | CPHA | Poziom spoczynkowy SCLK | Zbocze próbkowania | Zmiana danych na zboczu |
|---|---|---|---|---|---|
| 0 | 0 | 0 | Niski | Narastające | Opadające |
| 1 | 0 | 1 | Niski | Opadające | Narastające |
| 2 | 1 | 0 | Wysoki | Opadające | Narastające |
| 3 | 1 | 1 | Wysoki | Narastające | Opadające |
Zbocze początkowe jest pierwszym przejściem ze stanu spoczynkowego, a zbocze końcowe — drugim. Przy CPHA = 0 próbkuje się na zboczu początkowym; przy CPHA = 1 na końcowym. Obowiązuje to przy obu ustawieniach CPOL.
Jak odczytywać wykres czasowy
- Sprawdź poziom SCLK przed aktywacją CS: określa CPOL.
- Znajdź zbocze, przy którym odczytywane dane są stabilne: określa CPHA.
- Przy CPHA = 0 pierwszy bit musi być poprawny przed pierwszym zboczem.
- Sprawdź w dokumentacji opóźnienia wyjść; dane nie zawsze zmieniają się dokładnie na przeciwnym zboczu.
Błędne CPHA często przesuwa bity, a błędne CPOL może dawać pozornie sensowną sekwencję odczytaną w złych chwilach. 0x00, 0xFF lub niepoprawny identyfikator są możliwymi objawami, lecz nie stanowią jednoznacznej diagnozy.
Parametry czasowe poza częstotliwością
| Parametr | Znaczenie | Skutek przekroczenia |
|---|---|---|
fSCLK | maksymalna częstotliwość zegara | Sporadyczne błędy lub niestabilne próbkowanie |
tSU(D) | czas ustalenia MOSI/MISO przed zboczem próbkowania | Odczyt bitu na błędnym poziomie |
tH(D) | czas podtrzymania danych po zboczu próbkowania | Następny bit zakłóca bieżący |
tCSS | od aktywacji CS do pierwszego zbocza SCLK | Zignorowanie lub przesunięcie pierwszego bitu polecenia |
tCSH | od ostatniego zbocza do dezaktywacji CS | Nieprzyjęcie ostatniego bitu |
tCSHI | czas nieaktywnego CS między ramkami | Niewyzerowanie stanu wewnętrznego |
tDO | opóźnienie wyjścia MISO | Zbyt wczesne próbkowanie przy dużej szybkości |
Budżet czasowy obejmuje opóźnienie konwertera poziomów, czas propagacji w ścieżce lub kablu, rzeczywistą szybkość zbocza i obciążenie pojemnościowe. Częstotliwość działająca na krótkiej płytce może przestać działać po dodaniu złącza lub odgałęzienia.
Dla typowego CS aktywnego stanem niskim: utrzymuj SCLK w stanie wynikającym z CPOL, aktywuj CS, odczekaj tCSS, przedstaw pierwszy bit odpowiednio wcześnie przy CPHA = 0, wygeneruj zbocza, a następnie odczekaj tCSH przed zwolnieniem CS. Niektóre układy wymagają niskiego CS przez całą sekwencję polecenie–adres–dane; inne wykonują operację dopiero przy narastającym zboczu CS.
Łączenie MOSI, MISO, SCLK i CS
Controller MOSI ─────────► Peripheral SDI / DIN
Controller MISO ◄───────── Peripheral SDO / DOUT
Controller SCLK ─────────► Peripheral SCK
Controller nCS ─────────► Peripheral nCS
GND ─────────► GND
MISO może być współdzielona tylko wtedy, gdy każde niewybrane urządzenie peryferyjne rzeczywiście przechodzi w stan wysokiej impedancji. Rezystor podciągający lub ściągający ustala stan spoczynkowy, ale nie rozwiązuje konfliktu dwóch aktywnych wyjść.
SCLK jest często najbardziej wymagającą linią: przełącza się przy każdym bicie, synchronizuje każdy odbiornik i może wykazywać oscylacje. Prowadź ją krótko, nad ciągłą płaszczyzną masy i z dala od czułych wejść analogowych. Rezystor szeregowy o wartości kilkudziesięciu omów przy nadajniku może tłumić oscylacje w połączeniu punkt–punkt; sprawdź jego wartość oscyloskopem.
CS pozwala odpowiadać tylko jednemu urządzeniu peryferyjnemu. Podciąganie do stanu nieaktywnego może być przydatne podczas resetu kontrolera, po sprawdzeniu wewnętrznych rezystorów, poboru mocy i wymaganego czasu narastania.
Topologie SPI
Gwiazda z niezależnymi sygnałami CS
SCLK i MOSI dochodzą do każdego układu; każdy ma własny CS. Tylko wybrany układ steruje linią MISO.
┌──────────► Peripheral A
Controller ─ SCLK ├──────────► Peripheral B
─ MOSI ├──────────► Peripheral C
─ MISO ◄────────── shared outputs, high impedance when unselected
─ CSA ───────────► A
─ CSB ───────────► B
─ CSC ───────────► C
To zalecana topologia: łatwo ją diagnozować i nie przesyła bajtów przez inne układy. Gdy brakuje pinów GPIO, dekoder lub ekspander może wytwarzać sygnały CS; uwzględnij jego opóźnienie i stan po włączeniu zasilania.
Połączenie łańcuchowe
Niektóre rejestry przesuwne i sterowniki LED zaprojektowano do połączenia łańcuchowego. Wyjście szeregowe jednego układu zasila wejście następnego; wszystkie współdzielą SCLK i CS.
Controller MOSI ─► Device 1 ─► Device 2 ─► Device 3
Controller SCLK ─► all devices
Controller CS ─► all devices
Controller MISO ◄─ final device output, if available
Długość ramki jest sumą długości słów wszystkich układów, a fizyczna kolejność wyznacza kolejność bajtów. Nie jest to właściwy układ dla zwykłych urządzeń SPI, które jedynie współdzielą magistralę.
Wspólna magistrala i integralność sygnału
Każde odgałęzienie to nieużywany odcinek, który pogarsza zbocza wraz ze wzrostem SCLK. Rozmieszczaj układy blisko siebie i skracaj odgałęzienia. Przy połączeniu kablowym lub między płytkami zmniejsz fSCLK, zapewnij bliską drogę powrotną przez masę i mierz sygnał przy odbiorniku. SPI nie jest interfejsem różnicowym przeznaczonym do dużych odległości.
| Sytuacja | Zalecana praktyka |
|---|---|
| Jeden układ, bardzo krótkie ścieżki | Połączenie bezpośrednie; sprawdź tryb i poziomy logiczne |
| Kilka układów na jednej płytce | Niezależne CS, wysoka impedancja MISO, gdy układ nie jest wybrany |
| Oscylacje SCLK | Rezystor szeregowy blisko kontrolera; sprawdź oscyloskopem |
| Kabel lub połączenie między płytkami | Mniejsza szybkość, przewody GND między sygnałami, ograniczenie długości, w razie potrzeby transceiver |
| Wiele linii CS | Dekoder, rejestr przesuwny lub ekspander o bezpiecznym stanie po włączeniu |
Poziomy logiczne i diagnozowanie
Porównaj progi VIH/VIL i bezwzględne wartości maksymalne w obu kierunkach. Sygnał MISO 1.8 V może być za niski dla wejścia 3.3 V, a wyjście 5 V może uszkodzić wejście 3.3 V nieodporne na takie napięcie. Dwukierunkowe konwertery MOSFET popularne przy I²C nie nadają się automatycznie do szybkich linii SCLK lub MOSI: wybierz bufor albo konwerter dostosowany do wybranych poziomów, szybkości i obciążenia.
- Zacznij od jednego urządzenia peryferyjnego przy 100 kHz lub niższej częstotliwości.
- Przed analizą danych sprawdź zasilanie, GND, reset i stan CS.
- Zmierz jednocześnie SCLK, CS, MOSI i MISO, wyzwalając pomiar aktywacją CS.
- Sprawdź CPOL/CPHA, kolejność bitów i dokładną liczbę zboczy w ramce.
- Odczytaj udokumentowany rejestr identyfikatora lub stanu, a następnie stopniowo zwiększaj szybkość.
Analizator stanów logicznych sprawdza protokół, natomiast do oceny zboczy, przeregulowania, zakłóceń i odbić potrzebny jest oscyloskop. Mierz blisko wejścia urządzenia peryferyjnego: pomiar tylko przy kontrolerze może ukryć problem z linią.
Lista kontrolna
- CPOL, CPHA, kolejność bitów i długość słowa są jasno udokumentowane w schemacie i oprogramowaniu.
- Każde urządzenie peryferyjne ma własny CS, chyba że dokumentacja dopuszcza połączenie łańcuchowe.
- MISO jest zwalniana, gdy układ nie jest wybrany; wyjścia nie walczą ze sobą.
- Progi logiczne, bezwzględne wartości maksymalne i czasy sprawdzono w obu kierunkach.
- SCLK jest krótka i biegnie nad ciągłą masą; wartość ewentualnego rezystora szeregowego potwierdzono pomiarem.
- CS ma bezpieczny stan podczas resetu i włączania zasilania.
- Po dodaniu kabla, złącza, konwertera lub odgałęzienia wykonano pomiary przy odbiorniku.
Źródła
- NXP — przewodnik po bloku SPI, wersja 3.0
- Microchip — interfejs szeregowy SPI
- Dokumentacje wybranego kontrolera i urządzeń peryferyjnych: opisane w nich tryby, czasy, poziomy i sekwencje ramek mają pierwszeństwo przed ogólnymi zasadami.