SK LABS Serijski po periferijama
Uz dužno izvinjenje zbog dva preskočena broja, nastavljamo da malo pojašnjavamo neke od termina koje najčešće navodimo kao skraćenice. Na red dolazi serijski periferni interfejs, poznatiji kao SPI (serial peripheral interface). Ovo je uz I2C jedan od najčešćih interfejsa koji koristimo u Arduino svetu, ali je za neke malko komplikovaniji. SPI interfejs je razvila Motorola sredinom 80-ih, kao interfejs u punom duplex režimu. U pitanje je de facto standard, ali ne i formalni standard. Tu dolazimo do varijacija u opcijama protokola. SPI je sinhroni serijski komunikacioni interfejs koji se koristi za komunikaciju između mikrokontrolera ili između mikrokontrolera i drugih malih uređaja, kao što su senzori, integralna kola, mikro-SD kartice i slično. Uglavnom se koriste četiri linije za komunikaciju: MOSI, MISO, SCLK i SS/CS. Druga podela bila bi na master i slave. Na jednoj SPI magistrali može biti više povezanih uređaja, gde svaki treba da ima svoju liniju za odabir. MOSI (master out slave in) je linija na magistrali kojom master šalje podatke ka slave uređaju. Slave šalje podatke ka masteru linijom MISO (master in slave out). Puls koji generiše master šalje se linijom SCLK. Ako se setimo priče o I2C (SK 9/2022, i.sk.rs/31469), tada smo rekli da se master svakom slave obraća preko I2C adrese. Ovde se u tu svrhu koristi linija SS/CS (slave select/chip select). Ova linija je stalno u logičkom stanju HIGH. Kada je potrebno obratiti se nekom od SPI slave uređaja, tada se njegova SS/CS linija ispisuje LOW. Na jednoj SPI magistrali, svi SPI uređaji dele MOSI, MISO i SCLK linije. Svaki od SPI slave uređaja treba da ima zasebnu samo svoju SS/CS. Na ovaj način će se master obratiti tačno onom slave kome treba, dok će ostali ignorisati saobraćaj na magistrali. Ovakav način povezivanja se naziva nezavisnim. Postoji i lančani način povezivanja, gde se svi SPI uređaji povezuju sa iste četiri linije magistrale paralelno. Osim toga, razlikujemo hardverski SPI od softverskog. Radićemo prvo sa hardverskim SPI. Broj hardverskog SPI zavisi od konkretnog mikrokontrolera. Recimo da imamo situaciju sa jednim mikrokontrolerom (Uno, na primer) koji ima samo jedan hardverski SPI i nekim SPI senzorom ili integralnim kolom. Pinovi se povezuju prema oznakama SPI interfejsa, gde su za Uno to pinovi 10, 11, 12 i 13 za SS/CS, MOSI, MISO i SCLK. S tim što CS/SS može biti bilo koji drugi digitalni GPIO. Da bi poslali podatke preko SPI, potrebno je na pinu 10 ispisati logički LOW i držati ga sve vreme u LOW. Za to vreme će SPI slave slušati šta mu se šalje. Uno će podatke slati preko MOSI, dok će za sve vreme ujedno slati i puls preko SCLK. Shodno dobijenim podacima, slave će po potrebi poslati odgovarajuće podatke nazad linijom MISO. Ako imamo samo jedan slave, dovoljno je CS/SS postaviti LOW još u setup funkciji, jer nema potrebe za obraćanjem drugim SPI slave uređajima. Ako želimo da dodamo više SPI uređaja na SPI magistralu, možemo ih, kako smo rekli, povezati nezavisno. U tom slučaju, svaki od slave uređaja sa masterom bi trebalo da ima posebnu liniju SS/CS. Master će sve CS/SS linije držati HIGH i pisati LOW samo onoj kod koje mu je potrebna komunikacija sa slaveom u tom trenutku. Broj slave uređaja na jednoj ovakvoj magistrali može biti do tri, ne više. Lančana SPI podrazumeva da su svi slave na jednom SS/CS. Ovakav način ima smisla samo ako su svi slave istog tipa i treba da rade isti posao. U ovakvom postavljanju, master podiže SS/CS na HIGH i šalje podatke preko MOSI, dok SCLK za to vreme generiše puls. Podaci tada putuju sa jednog slave na drugi u nizu. Potrebno je da master pošalje onoliko pulseva koliko je potrebno da podaci stignu do poslednjeg slave u nizu. U Arduinovom sistemu postoji SPI biblioteka koja može da se koristiti direktno ili kroz namenske biblioteke za odgovarajući senzor ili integralno kolo i slično. Podrazumeva se da o dotičnom slaveu imamo potrebnu dokumentaciju. SPI interfejs se pokreće loop funkcijom SPI.begin(). Ova funkcija inicijalizuje magistralu, postavlja SCK i MOSI LOW a CS/SS HIGH. Početak SPI transakcije kreće sa SPI.beginTransaction(), a završava se sa SPI.endTransaction(). Za slanje podataka ka periferijama koristimo SPI.transfer() funkciju. U slučaju potrebe za više parametara, tada koristimo SPI.beginTransaction() sa malo više parametara. Prvo što nam je potrebno jeste brzina na kojoj on radi u SPI. Recimo da radi na 15 megaherca. Tada bi trebalo za parametar SPISettings postaviti 15000000. Drugi parametar bio bi da odaberemo između MSB (most significant bit) i LSB (least significant bit). U zavisnosti od toga šta nam je potrebno kao drugi parametar, idu MSBFIRST ili LSBFIRST. Najčešći je MSB. Treći parametar je SPI režim, a postavlja se jedan od SPI_MODE0 - 3. Kombinacija polariteta i faza naziva se režimom i ima ih ukupno četiri. Završetak transakcije ide isto sa SPI.endTransaction(). Biblioteka SPI ima nekih desetak funkcija i nećemo ih ovde sve pojašnjavati. Ono što je najvažnije i što doprinosi da Arduino bude toliko popularan jesu biblioteke. Ogroman broj SPI uređaja, senzora i integralnih kola već ima svoje namenske biblioteke koje deo oko SPI komunikacije uprošćavaju u tolikoj meri da početnici ne znaju ni šta se dešava „iza zavese”. Bitno im je da dobiju određenu vrednost koja im je potrebna, što je i dobro i nije. U primeru ispod se može videti uprošćen primer slanja vrednosti ka određenoj adresi SPI slave uređaja. #include <SPI.h> void setup(){ pinMode(10, OUTPUT); //CS/SS kao izlaz SPI.begin(); } void loop(){ digitalWrite(10, LOW); //CS/SS ide LOW, odabran SPI slave SPI.transfer(channel); //adresa u registru na koju pišemo SPI.transfer(vrednost); //vrednost koju šaljemo digitalWrite(10, HIGH); //prekidamo komunikaciju sa SPI uređajem delay(100); } Ako uporedimo SPI sa I2C, prvo što upada u oči jeste da je SPI neosporno brži. Ne postoje početni i završni bitovi, te se kod SPI protok obavlja konstantno i bez prekida. SPI nema sistem adresiranja kao I2C, ali je zbog toga limitiran po magistrali brojem uređaja. Odvojene MISO i MOSI linije dozvoljavaju protok podataka u oba smera u isto vreme. Broj linija na SPI sa svakim slave ide u plus za jedan. Kod I2C su samo dve linije, dokle god ima slobodnih adresa. Tri SPI uređaja na Unu zauzeće šest GPIO, tri ista takva na I2C će zauzeti samo dve GPIO. Ne postoji način da se sazna da li je slave primio podatke, a moguć je samo jedan master. Ovo znači da slave uređaji ne mogu da komuniciraju između sebe, već samo i isključivo preko mastera. Kod mikrokontrolera koji su limitirani brojem hardverskih SPI, kao što je ATmega328p na Unu, može se koristiti, recimo, Majenkova SoftSPI biblioteka. Ova biblioteka će odlično emulirati hardverski SPI. Međutim, postoji jedan limit, a to je brzina. Softverski SPI će izgubiti dosta vremena isključujući i uključujući nenamenske GPIO, što kod hardverskog nije slučaj. Postoje varijacije, kao što su MicroWire, MicroWire Plus, zatim, Queued SPI, Dual SPI, Quad SPI i drugo. Quad SPI često srećemo kod fleš memorija ESP serije mikrokontrolera (i ne samo njih). Quad se odnosi na dodatne dve I/O linije, gde se šalju četiri podatka po ciklusu pulsa. Three-Wire bus koristi dvosmernu data liniju (Slave In Slave Out - SISO i Master Out Master In - MOMI). QPI/SQI je dodatno proširenje Quad SPI, ali da ih dalje ne nabrajamo. SPI interfejs je, naravno, mnogo kompleksniji od ovog teksta. Nama i nije namera da ulazimo u „sitna crevca” već da pokušamo da vam SPI predstavimo u kraćim crtama.
|
||||||||||
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Doom: The Dark Ages Doom iz mračnog doba drugačiji je od svih drugih Doomova, jer je Slayer koncipiran kao tenk sa štitom... Clair Obscur: Expedition 33 Estetika Belle Époquea, gameplay u skladu sa kanonima JRPG-a, vrhunsko pripovedanje i ljubav prema igrama... Computex 2025, Tajpej, Tajvan AI NEXT Ovaj, nekada ultra-PC-specifični sajam, odavno se proširio na srodne tehnologije, biznis rešenja i digitalne usluge, postavši varijanta azijskog C... Gigabyte GeForce RTX 5070 Gaming OC 12G Višak samopouzdanja Kartica je sa hardverske strane vrlo kvalitetna, ali ništa ne može da nadomesti nedostatak snage „pod haubom”... Asus ProArt P16 (H7606WP) Pronalazak neverovatnog Novi ProArt P16 donosi moderna rešenja, u dobro usaglašenom odnosu gabarita i performansi – alatka koju ćete sa ponosom nosati sa sobom... Logitech ProX Superlight 2 Sve udvostručeno Ovaj miš predstavlja jasnu indikaciju da najveći proizvođač ne želi da napusti nijedan segment tržišta... Winhance 25.05 Popravka Prozora U pitanju je alatka koja omogućava da se brzo rešite (većine) bloatwarea, ali i da obavite optimizaciju rada Windowsa... .rs: Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije Unapređeno e Zakazivanje Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije Google Mariner, Google Astra i AI autonomni agenti Uspon tihog softvera Umesto kliktanja stručnog lica, softver će, već ove godine, u tihom, gotovo nečujnom načinu rada - završavati posao... Fatal Fury: City of the Wolves Fatal Fury je oduvek bio čudna cvećka u svetu borilačkih igara; takav je i ostao... Arc Raiders Novi extraction shooter iz pera autora dobrih delova franšize Battlefield (i potcenjenog The Finals)... |
||||||||||