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.

Four signal traces stacked: CS at top, SCK below it, then MOSI and MISO. CS starts high (idle), drops low to begin the transaction, then SCK clocks out eight pulses while MOSI and MISO carry one byte of data each, then CS returns high.

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éha CPOL) – az SCK üresjárati állapota. A 0 azt jelenti, hogy az órajel alacsonyan vár és magasra impulzál; az 1 azt jelenti, hogy az órajel magasan vár és alacsonyra impulzál.

  • Órajel-fázis (phase, néha CPHA) – amely él mintavételezi az adatokat. A 0 minden órajel-impulzus első élén mintavételez (felfutó él); az 1 a 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.