3.21. Osnove SPI-ja

SPI (Serial Peripheral Interface) je sinkrona serijska sabirnica namijenjena vezama kratkog dometa i velike brzine između jednog kontrolera i jednog ili više perifernih uređaja na istoj pločici. To je standardno sučelje za SD kartice, zaslone, flash memoriju, ADC-e i DAC-e te širok raspon senzora.

Dok UART nema zajednički takt i vremensko usklađivanje obnavlja iz same podatkovne linije, SPI vodi taktnu žicu uz podatkovne žice. Kontroler upravlja taktom kojom god brzinom želi, a svaki drugi uređaj na sabirnici uzorkuje podatke u skladu s tim taktom. Nema pogađanja brzine prijenosa (baud) ni dodatnog opterećenja okvirivanjem – samo bridovi takta i bitovi.

3.21.1. Četiri žice

Potpuno dupleksna SPI sabirnica ima četiri žice:

  • SCK (serijski takt). Njime upravlja kontroler. Svaki bit se ulazno ili izlazno taktira na jednom bridu ovog signala.

  • MOSI (izlaz kontrolera, ulaz periferije). Izlazna linija kontrolera; periferija s nje uzorkuje bitove.

  • MISO (ulaz kontrolera, izlaz periferije). Izlazna linija periferije; kontroler s nje uzorkuje bitove.

  • CS (chip select), ponekad zvan SS (peripheral select). Zasebna linija po svakoj periferiji. Kontroler spušta CS na nisku razinu kako bi započeo transakciju i ponovno ga podiže kako bi je završio; svaka periferija čiji je CS deaktiviran u potpunosti ignorira sabirnicu i prestaje upravljati svojim MISO izlazom.

Četiri signalna traga naslagana jedan iznad drugog: CS na vrhu, SCK ispod njega, zatim MOSI i MISO. CS počinje na visokoj razini (mirovanje), pada na nisku razinu kako bi započeo transakciju, zatim SCK izlazno taktira osam impulsa dok MOSI i MISO svaki prenose po jedan bajt podataka, nakon čega se CS vraća na visoku razinu.

Jedan SPI bajt: CS prelazi na nisku razinu kako bi odabrao periferiju, SCK taktira osam bitova, a MOSI i MISO svaki prenose po jedan bajt u suprotnim smjerovima.

Svaki brid takta istovremeno pomiče po jedan bit u svakom smjeru. Jedan SCK impuls istodobno šalje jedan bit na MOSI i prima jedan bit na MISO – SPI je potpuno dupleksan na razini žica. Softver ne mora koristiti oba smjera: transakcije samo za pisanje i samo za čitanje su uobičajene, pri čemu se neiskorištena linija ili ignorira ili drži na visokoj razini.

3.21.2. Polaritet i faza takta

Dva konfiguracijska bita određuju točno koji brid takta pomiče podatke:

  • Polaritet takta (polarity, ponekad CPOL) – stanje mirovanja SCK-a. 0 znači da takt miruje na niskoj razini i pulsira na visoku; 1 znači da takt miruje na visokoj razini i pulsira na nisku.

  • Faza takta (phase, ponekad CPHA) – koji brid uzorkuje podatke. 0 uzorkuje na prvom bridu svakog taktnog impulsa (vodeći brid); 1 uzorkuje na drugom bridu (prateći brid).

Zajedno ova dva bita daju četiri načina rada, koji se uobičajeno nazivaju Mode 0 do Mode 3. Mode 0 (polarity=0, phase=0) najčešći je i siguran zadani odabir za nepoznate uređaje.

Ključno je pravilo da se oba kraja moraju složiti oko načina rada. Neusklađeni načini rada daju besmislene podatke iako su taktna i podatkovne linije ispravno spojene; ako uređaj na prvoj transakciji vrati besmislice, način rada je prva stvar koju treba provjeriti.

3.21.3. Više periferija

Nekoliko periferija može dijeliti iste SCK, MOSI i MISO linije sve dok svaka ima vlastitu CS liniju kojom upravlja kontroler:

  • Sve periferije vide isti takt i podatke, ali svaka prati vlastiti CS. S deaktiviranim CS-om (visoka razina), periferija u potpunosti ignorira SCK i MOSI te ostavlja MISO u stanju visoke impedancije kako se ne bi natjecala s drugim uređajima za liniju.

  • Kontroler aktivira točno jedan CS u svakom trenutku, izvede transakciju i deaktivira CS kako bi oslobodio sabirnicu.

Mikrokontroler s jednim hardverskim SPI blokom može komunicirati s onoliko periferija koliko ima slobodnih GPIO pinova za CS linije – na samoj sabirnici nema adresiranja.

3.21.4. Prednosti i nedostaci

I prednosti i nedostaci SPI-ja proizlaze iz njegove izvedbe:

  • Brz. Na kratkim tragovima s jednostavnom pretvorbom razine moguće je postići desetke megaherca. Čitači SD kartica i SPI zasloni koriste upravo to.

  • Jednostavan na razini žica. Nema adresiranja, nema potvrda, nema posebnih uvjeta za početak/kraj – samo bitovi na žicama sinkronizirani s taktom.

  • Zahtjevan za pinove. Tri zajedničke linije plus jedan CS po periferiji. Pločica s pet SPI uređaja koristi osam pinova (tri + pet).

  • Kratkog dometa. SPI pretpostavlja čiste, brze bridove, što znači kratke tragove na istoj pločici. Za dulje veze, I2C ili jedna od okvirivanih sabirnica bolji su izbor.