3.21. Podstawy SPI¶
SPI (Serial Peripheral Interface) to synchroniczna magistrala szeregowa zaprojektowana do krótkich, szybkich połączeń między jednym kontrolerem a jednym lub większą liczbą urządzeń peryferyjnych na tej samej płytce. Jest to standardowy interfejs dla kart SD, wyświetlaczy, pamięci flash, przetworników ADC i DAC oraz szerokiej gamy sensorów.
Tam, gdzie UART nie miał współdzielonego zegara i odtwarzał taktowanie z samej linii danych, SPI prowadzi przewód zegara obok przewodów danych. Kontroler taktuje zegar z dowolną wybraną przez siebie częstotliwością, a każde inne urządzenie na magistrali próbkuje dane w synchronizacji z tym zegarem. Nie ma zgadywania szybkości transmisji (baud) ani narzutu na ramkowanie – tylko zbocza zegara i bity.
3.21.1. Cztery przewody¶
Magistrala SPI w trybie pełnego dupleksu ma cztery przewody:
SCK (zegar szeregowy). Sterowany przez kontroler. Każdy bit jest wtaktowywany do lub wytaktowywany z urządzenia na zboczu tego sygnału.
MOSI (wyjście kontrolera, wejście peryferium). Linia wyjściowa kontrolera; peryferium próbkuje z niej bity.
MISO (wejście kontrolera, wyjście peryferium). Linia wyjściowa peryferium; kontroler próbkuje z niej bity.
CS (chip select), czasami nazywana SS (peripheral select). Oddzielna linia dla każdego peryferium. Kontroler ściąga CS do stanu niskiego, aby rozpocząć transakcję, i z powrotem do stanu wysokiego, aby ją zakończyć; każde peryferium z dezaktywowanym CS całkowicie ignoruje magistralę i przestaje sterować swoim wyjściem MISO.
Jeden bajt SPI: CS przechodzi w stan niski, aby wybrać peryferium, SCK taktuje osiem bitów, a MOSI i MISO przesyłają po jednym bajcie każdy w przeciwnych kierunkach.¶
Każde zbocze zegara przemieszcza jeden bit w każdym kierunku w tym samym czasie. Pojedynczy impuls SCK jednocześnie wysyła jeden bit na MOSI i odbiera jeden bit na MISO – SPI jest pełnodupleksowe na poziomie przewodów. Oprogramowanie nie musi używać obu kierunków: transakcje tylko do zapisu i tylko do odczytu są powszechne, przy czym nieużywana linia jest albo ignorowana, albo utrzymywana w stanie wysokim.
3.21.2. Polaryzacja i faza zegara¶
Dwa bity konfiguracyjne decydują dokładnie o tym, które zbocze zegara przemieszcza dane:
Polaryzacja zegara (
polarity, czasamiCPOL) – stan spoczynkowy SCK.0oznacza, że zegar spoczywa w stanie niskim i przechodzi impulsem w stan wysoki;1oznacza, że zegar spoczywa w stanie wysokim i przechodzi impulsem w stan niski.Faza zegara (
phase, czasamiCPHA) – które zbocze próbkuje dane.0próbkuje na pierwszym zboczu każdego impulsu zegarowego (zbocze wiodące);1próbkuje na drugim zboczu (zbocze opadające).
Razem dają one cztery tryby, umownie nazywane od Mode 0 do Mode 3. Mode 0 (polarity=0, phase=0) jest najczęstszy i stanowi bezpieczne ustawienie domyślne dla nieznanych urządzeń.
Kluczowa zasada brzmi, że oba końce muszą zgadzać się co do trybu. Niedopasowane tryby dają śmieciowe dane, nawet jeśli linie zegara i danych są poprawnie podłączone; jeśli urządzenie zwraca bezsensowne dane w pierwszej transakcji, tryb jest pierwszą rzeczą do sprawdzenia.
3.21.3. Wiele peryferiów¶
Kilka peryferiów może współdzielić te same linie SCK, MOSI i MISO, o ile każde z nich ma własną linię CS sterowaną przez kontroler:
Wszystkie peryferia widzą ten sam zegar i te same dane, ale każde obserwuje własne CS. Przy dezaktywowanym CS (stan wysoki) peryferium całkowicie ignoruje SCK i MOSI oraz pozostawia MISO w stanie wysokiej impedancji, aby nie rywalizować z innymi urządzeniami o linię.
Kontroler aktywuje dokładnie jedno CS na raz, przeprowadza transakcję i dezaktywuje CS, aby zwolnić magistralę.
Mikrokontroler z pojedynczym sprzętowym blokiem SPI może komunikować się z tyloma peryferiami, ile ma wolnych pinów GPIO do przeznaczenia na linie CS – na samej magistrali nie ma adresowania.
3.21.4. Mocne i słabe strony¶
Mocne i słabe strony SPI wynikają z jego konstrukcji:
Szybkie. Na krótkich ścieżkach z prostą translacją poziomów osiągalne są dziesiątki megaherców. Korzystają z tego czytniki kart SD i wyświetlacze SPI.
Proste na poziomie przewodów. Brak adresowania, brak potwierdzeń, brak specjalnych warunków start/stop – tylko bity na przewodach zsynchronizowane z zegarem.
Pinożerne. Trzy współdzielone linie plus jedno CS na peryferium. Płytka z pięcioma urządzeniami SPI używa ośmiu pinów (trzy + pięć).
Krótkozasięgowe. SPI zakłada czyste, szybkie zbocza, co oznacza krótkie ścieżki na tej samej płytce. Do dłuższych połączeń lepiej sprawdzi się I2C lub jedna z magistral ramkowanych.