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.

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.

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.