ElectroDesignForgeElectroDesignForge
Sygnały i interfejsyProjektowanie PCB

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 redakcyjny

Przewodnik

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 kontroleraFunkcjaWażna uwaga
SCLK / SCKwyjścieZegar szeregowyJego poziom spoczynkowy określa CPOL.
MOSIkontroler → urządzenie peryferyjneDane nadawaneInne nazwy to COPI, SDI lub DIN.
MISOurządzenie peryferyjne → kontrolerDane odbieraneInne nazwy to CIPO, SDO lub DOUT; stan wysokiej impedancji, gdy układ nie jest wybrany.
CS / SS / nCSwyjście, zwykle aktywne stanem niskimWybór układu i granica ramkiZwykle każdy układ peryferyjny wymaga niezależnego sygnału CS.
GNDwspólnaOdniesienie i droga prądu powrotnegoProwadź 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.
TrybCPOLCPHAPoziom spoczynkowy SCLKZbocze próbkowaniaZmiana danych na zboczu
000NiskiNarastająceOpadające
101NiskiOpadająceNarastające
210WysokiOpadająceNarastające
311WysokiNarastająceOpadają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

  1. Sprawdź poziom SCLK przed aktywacją CS: określa CPOL.
  2. Znajdź zbocze, przy którym odczytywane dane są stabilne: określa CPHA.
  3. Przy CPHA = 0 pierwszy bit musi być poprawny przed pierwszym zboczem.
  4. 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ą

ParametrZnaczenieSkutek przekroczenia
fSCLKmaksymalna częstotliwość zegaraSporadyczne błędy lub niestabilne próbkowanie
tSU(D)czas ustalenia MOSI/MISO przed zboczem próbkowaniaOdczyt bitu na błędnym poziomie
tH(D)czas podtrzymania danych po zboczu próbkowaniaNastępny bit zakłóca bieżący
tCSSod aktywacji CS do pierwszego zbocza SCLKZignorowanie lub przesunięcie pierwszego bitu polecenia
tCSHod ostatniego zbocza do dezaktywacji CSNieprzyjęcie ostatniego bitu
tCSHIczas nieaktywnego CS między ramkamiNiewyzerowanie stanu wewnętrznego
tDOopóźnienie wyjścia MISOZbyt 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.

SytuacjaZalecana praktyka
Jeden układ, bardzo krótkie ścieżkiPołączenie bezpośrednie; sprawdź tryb i poziomy logiczne
Kilka układów na jednej płytceNiezależne CS, wysoka impedancja MISO, gdy układ nie jest wybrany
Oscylacje SCLKRezystor szeregowy blisko kontrolera; sprawdź oscyloskopem
Kabel lub połączenie między płytkamiMniejsza szybkość, przewody GND między sygnałami, ograniczenie długości, w razie potrzeby transceiver
Wiele linii CSDekoder, 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.

  1. Zacznij od jednego urządzenia peryferyjnego przy 100 kHz lub niższej częstotliwości.
  2. Przed analizą danych sprawdź zasilanie, GND, reset i stan CS.
  3. Zmierz jednocześnie SCLK, CS, MOSI i MISO, wyzwalając pomiar aktywacją CS.
  4. Sprawdź CPOL/CPHA, kolejność bitów i dokładną liczbę zboczy w ramce.
  5. 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