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.

Négy egymásra rakott jelvonal: legfelül a CS, alatta az SCK, majd a MOSI és a MISO. A CS magasan kezd (üresjárat), alacsonyra esik a tranzakció megkezdéséhez, majd az SCK nyolc impulzust léptet ki, miközben a MOSI és a MISO egy-egy bájt adatot szállít, ezután a CS visszatér magasra.

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.