3.21. SPI alapok¶
Az SPI (Serial Peripheral Interface) egy szinkron soros busz, amelyet rövid távú, nagy sebességű kapcsolatokra terveztek egy vezérlő és egy vagy több, ugyanazon a panelen lévő perifériás eszköz között. Ez a szabványos interfész SD-kártyákhoz, kijelzőkhöz, flash memóriához, ADC-khez és DAC-okhoz, valamint sokféle érzékelőhöz.
Míg a UART-nak nem volt közös órajele, és az időzítést magából az adatvezetékből nyerte ki, az SPI az adatvezetékek mellett egy órajel-vezetéket is futtat. A vezérlő tetszőleges sebességgel hajtja az órajelet, és a busz minden más eszköze ezzel az órajellel szinkronban mintavételezi az adatokat. Nincs átviteli sebesség (baud) találgatás és nincs keretezési többletterhelés – csak órajel-élek és bitek.
3.21.1. A négy vezeték¶
Egy teljes duplexű SPI busznak négy vezetéke van:
SCK (soros órajel). A vezérlő hajtja. Minden bit ennek a jelnek egy élén kerül be- vagy kiléptetésre.
MOSI (vezérlő ki, periféria be). A vezérlő kimeneti vonala; a periféria erről mintavételezi a biteket.
MISO (vezérlő be, periféria ki). A periféria kimeneti vonala; a vezérlő erről mintavételezi a biteket.
CS (chip select), néha SS-nek (peripheral select) is nevezik. Perifériánként külön vonal. A vezérlő alacsonyra húzza a CS-t a tranzakció megkezdéséhez, majd ismét magasra a befejezéséhez; minden olyan periféria, amelynek a CS-e nincs aktiválva, teljesen figyelmen kívül hagyja a buszt, és leállítja a MISO kimenetének hajtását.
Egy SPI bájt: a CS alacsonyra megy a periféria kiválasztásához, az SCK nyolc bitet léptet, a MOSI és a MISO pedig egy-egy bájtot visz át ellentétes irányokban.¶
Minden órajel-él egyidejűleg mozgat egy-egy bitet mindkét irányban. Egyetlen SCK impulzus egyszerre küld egy bitet a MOSI-n és fogad egy bitet a MISO-n – az SPI a vezeték szintjén teljes duplexű. A szoftvernek nem kell mindkét irányt használnia: a csak írásra és csak olvasásra szolgáló tranzakciók gyakoriak, a nem használt vonalat pedig vagy figyelmen kívül hagyják, vagy magasan tartják.
3.21.2. Órajel-polaritás és -fázis¶
Két konfigurációs bit dönti el pontosan, hogy melyik órajel-él mozgatja az adatokat:
Órajel-polaritás (
polarity, néhaCPOL) – az SCK üresjárati állapota. A0azt jelenti, hogy az órajel alacsonyan vár és magasra impulzál; az1azt jelenti, hogy az órajel magasan vár és alacsonyra impulzál.Órajel-fázis (
phase, néhaCPHA) – amely él mintavételezi az adatokat. A0minden órajel-impulzus első élén mintavételez (felfutó él); az1a második élen mintavételez (lefutó él).
Ezek együtt négy módot adnak, amelyeket hagyományosan Mode 0-tól Mode 3-ig neveznek. A Mode 0 (polarity=0, phase=0) a leggyakoribb, és biztonságos alapértelmezés ismeretlen eszközökhöz.
A döntő szabály az, hogy mindkét végnek meg kell egyeznie a módban. Az eltérő módok hibás adatokat adnak, még akkor is, ha az órajel- és adatvonalak helyesen vannak bekötve; ha egy eszköz értelmetlen választ ad az első tranzakcióra, először a módot érdemes ellenőrizni.
3.21.3. Több periféria¶
Több periféria osztozhat ugyanazon az SCK, MOSI és MISO vonalon, amíg mindegyiknek megvan a saját, a vezérlő által hajtott CS vonala:
Minden periféria ugyanazt az órajelet és adatot látja, de mindegyik a saját CS-ét figyeli. Aktiválás nélküli (magas) CS mellett a periféria teljesen figyelmen kívül hagyja az SCK-t és a MOSI-t, és a MISO-t nagy impedanciájú állapotban hagyja, hogy ne versengjen más eszközökkel a vonalért.
A vezérlő egyszerre pontosan egy CS-t aktivál, lefuttatja a tranzakciót, majd deaktiválja a CS-t a busz felszabadításához.
Egyetlen hardveres SPI blokkal rendelkező mikrovezérlő annyi perifériával tud kommunikálni, ahány szabad GPIO lába van a CS vonalakra – magán a buszon nincs címzés.
3.21.4. Erősségek és gyengeségek¶
Az SPI erősségei és gyengeségei egyaránt a felépítéséből fakadnak:
Gyors. Rövid nyomvonalakon, egyszerű szintillesztéssel több tíz megahertz is elérhető. Az SD-kártyaolvasók és az SPI kijelzők ezt használják.
Egyszerű a vezeték szintjén. Nincs címzés, nincs nyugtázás, nincsenek speciális start/stop feltételek – csak az órajelhez szinkronizált bitek a vezetékeken.
Lábigényes. Három közös vonal plusz perifériánként egy CS. Egy öt SPI eszközt tartalmazó panel nyolc lábat használ (három + öt).
Rövid távú. Az SPI tiszta, gyors éleket feltételez, ami ugyanazon a panelen rövid nyomvonalakat jelent. Hosszabb kapcsolatokhoz az I2C vagy valamelyik keretezett busz jobban megfelel.