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.
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, ponekadCPOL) – stanje mirovanja SCK-a.0znači da takt miruje na niskoj razini i pulsira na visoku;1znači da takt miruje na visokoj razini i pulsira na nisku.Faza takta (
phase, ponekadCPHA) – koji brid uzorkuje podatke.0uzorkuje na prvom bridu svakog taktnog impulsa (vodeći brid);1uzorkuje 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.