AVR tečaj obuke. Rad sa SPI modulom. Čitanje i pisanje podataka. Ch2. Kako raditi sa SPI - Theory Spi input

Prijenos sučelja.

Razvijena su mnoga sučelja za prijenos podataka za prijenos podataka s jednog uređaja na drugi ili s jednog čipa na drugi. Svako sučelje ima i pozitivne i negativne strane, stoga morate znati koja sučelja postoje, njihove prednosti i nedostatke te koristiti pravo sučelje za prijenos podataka u određenoj situaciji.

Sučelja dolaze s asinkronim i sinkronim prijenosom podataka. Kod sinkronog prijenosa podataka, signal sata se prenosi istovremeno s podacima, što omogućuje sinkronizaciju prijamnika i odašiljača. Primjer takvog protokola je SPI sučelje.

U asinkronom prijenosu podataka nema signala takta. U takvim vodovima postoji opasnost od neusklađenosti između prijemnika i odašiljača, zbog čega daljnji podaci neće biti ispravno primljeni. Kako bi se to spriječilo, asinkrona sučelja obavljaju periodičnu sinkronizaciju duž podatkovnih linija. Prednost ovakvih sučelja je manji broj vodiča potrebnih za prijenos.

Pogledajmo pobliže nekoliko najpopularnijih sučelja.

USART sučelje.

USART sučelje je serijski univerzalni sinkrono-asinkroni primopredajnik. Podaci se u redovitim intervalima prenose na USART. Ovo vremensko razdoblje određeno je navedenom USART brzinom i navedeno je u baudu (za znakove koji mogu imati samo vrijednosti jednake nuli ili jedan, baud je ekvivalentan bitovima u sekundi). Postoji općeprihvaćeni raspon standardnih brzina: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 bauda.

Osim podatkovnih bitova, USART automatski ubacuje sinkronizacijske oznake u tok, takozvane početne i završne bitove. Nakon prijema, ovi dodatni bitovi se uklanjaju. Tipično, početni i završni bitovi odvajaju jedan bajt informacija (8 bitova), ali postoje USART implementacije koje dopuštaju prijenos 5, 6, 7, 8 ili 9 bitova. Bitovi odvojeni startnim i stop signalom minimalno su slanje. USART omogućuje umetanje dva zaustavna bita tijekom prijenosa kako bi se smanjila vjerojatnost desinkronizacije prijemnika i odašiljača u gustom prometu. Primatelj ignorira drugi stop bit, tretirajući ga kao kratku pauzu na liniji.

Konvencija je da je pasivno (u nedostatku podataka) stanje USART ulaza i izlaza logična "1". Početni bit je uvijek logička "0", tako da USART prijemnik čeka prijelaz s "1" na "0" i od toga broji vremenski interval od polovice trajanja bita (sredina prijenosa početnog bita) . Ako je u ovom trenutku unos još uvijek "0", tada počinje proces primanja minimalne pošiljke. Da bi to učinio, prijemnik broji 9 bitnih trajanja u nizu (za 8-bitne podatke) i bilježi stanje unosa u svakom trenutku. Prvih 8 vrijednosti su primljeni podaci, zadnja vrijednost je ispitna vrijednost (stop bit). Vrijednost zaustavnog bita uvijek je "1"; ako je stvarna primljena vrijednost drugačija, USART bilježi pogrešku.

Za formiranje vremenskih intervala, odašiljački i prijamni USART-ovi imaju izvor preciznog vremena (taktiranje). Točnost ovog izvora mora biti takva da zbroj pogrešaka (prijemnik i odašiljač) u postavljanju vremenskog intervala od početka početnog impulsa do sredine zaustavnog impulsa ne prelazi polovicu (ili još bolje, barem a četvrtina) bitnog intervala. Za 8-bitnu poruku 0,5/9,5 = 5% (u stvarnosti ne više od 3%). Budući da je ovo zbroj pogrešaka prijemnika i odašiljača plus moguće izobličenje signala na liniji, preporučena tolerancija za točnost takta USART-a nije veća od 1,5%.

Budući da satni bitovi zauzimaju dio bitstreama, rezultirajuća propusnost UART-a nije jednaka brzini veze. Na primjer, za 8-bitne prijenose formata 8-N-1, bitovi sata zauzimaju 20% toka, što za fizičku brzinu od 115.200 bauda daje brzinu prijenosa podataka od 92.160 bps ili 11.520 bajtova/s.

Provjera pariteta

Protokol USART ima mogućnost automatskog nadzora integriteta podataka korištenjem metode pariteta bitova. Kada je ova značajka omogućena, posljednji bit podataka ("bit parnosti") uvijek je 1 ili 0, tako da je broj jedinica u bajtu uvijek paran.

Kontrola protoka

Nekad su USART uređaji mogli biti toliko spori da nisu mogli pratiti dolazni tok podataka. Kako bi se riješio ovaj problem, USART moduli su opremljeni zasebnim ulazima i izlazima za kontrolu protoka. Kad je ulazni međuspremnik bio pun, logika USART-a za primanje postavila je razinu zabrane na odgovarajućem izlazu, a USART koji je slao obustavio je prijenos. Kasnije je kontrola protoka pripisana komunikacijskim protokolima, a potreba za zasebnim linijama za kontrolu protoka postupno je nestala.

Fizička implementacija.

USART je protokol razmjene, tj. određuje način formiranja bita, parametre prijenosa bajtova, brzinu prijenosa itd.

Ali fizička implementacija USART-a može biti drugačija. Na primjer, za prijenos podataka unutar jedne ploče, signali se prenose na razinama +5V i 0V. Za prijenos podataka na velike udaljenosti i između uređaja koriste se druge fizičke naponske razine i standardi, kao što su: strujna petlja (4-20 mA), RS-232 (COM port), RS-485 i slično.

Za pretvaranje razina "kontrolera" od 0-5 V u "standardne" razine postoji ogroman broj specijaliziranih mikro krugova, na primjer ADM202 za RS-232.

Serijsko sučelje SPI

Naziv SPI je skraćenica za "Serial Peripheral Bus", što odražava njegovu namjenu - sabirnicu za spajanje vanjskih uređaja. SPI sabirnica je organizirana prema principu master-slave. Master sabirnice je obično mikrokontroler, ali također može biti programabilna logika, DSP kontroler ili ASIC. Uređaji spojeni na master su podređeni. Njihovu ulogu igraju razne vrste mikro krugova, uklj. uređaji za pohranu (EEPROM, Flash memorija, SRAM), sat stvarnog vremena (RTC), ADC/DAC, digitalni potenciometri, specijalizirani kontroleri itd.

Glavni građevni blok SPI sučelja je konvencionalni registar posmaka, čija sinkronizacija i ulazni/izlazni signali bitstreama tvore signale sučelja. Stoga je ispravnije nazvati SPI protokol ne protokolom za prijenos podataka, već protokolom za razmjenu podataka između dva registra posmaka, od kojih svaki istovremeno obavlja i funkciju prijamnika i odašiljača. Preduvjet za prijenos podataka na SPI sabirnici je generiranje signala za sinkronizaciju sabirnice. Samo vođa ima pravo generirati ovaj signal i rad roba u potpunosti ovisi o tome.

Veza.

Postoje tri vrste povezivanja na SPI sabirnicu, od kojih svaka uključuje četiri signala. Svrha SPI signala opisana je u tablici 7.1.

Najjednostavnija veza, koja uključuje samo dva mikrokruga, prikazana je na slici 7.2. Ovdje master sabirnice prenosi podatke duž MOSI linije sinkrono sa SCLK signalom koji je generirao, a podređena jedinica hvata poslane bitove podataka na određenim rubovima primljenog signala sinkronizacije. U isto vrijeme, slave šalje svoj paket podataka. Prikazani sklop može se pojednostaviti uklanjanjem MISO linije ako korišteni podređeni IC ne omogućuje prijenos podataka o odgovoru ili za to nema potrebe. Jednosmjerni prijenos podataka može se pronaći u takvim čipovima kao što su DAC, digitalni potenciometri, programabilna pojačala i drajveri. Dakle, razmatrana opcija za povezivanje podređenog IC-a zahtijeva 3 ili 4 komunikacijske linije.

Kako bi podređeni IC primao i slao podatke, osim što ima taktni signal, SS linija također mora biti nisko postavljena. U protivnom će slave IC biti neaktivan. Kada se koristi samo jedan vanjski IC, moglo bi biti primamljivo eliminirati SS liniju tako da se odabrani ulaz podređenog IC-a snažno spusti na nisko. Ovo rješenje je izrazito nepoželjno i može dovesti do kvarova ili čak nemogućnosti prijenosa podataka, jer Ulaz odabira čipa služi za resetiranje IC-a u početno stanje i ponekad inicira izlaz prvog bita podataka.

Ako je potrebno spojiti nekoliko mikro krugova na SPI sabirnicu, koristi se neovisna (paralelna) veza (slika 7.3) ili kaskadna (serijska) veza (slika 7.4). Neovisna veza je češća, jer postiže se korištenjem bilo kojeg čipa kompatibilnog sa SPI. Ovdje su svi signali, osim za odabir mikrosklopova, povezani paralelno, a master sabirnice, prebacujući jedan ili drugi SS signal u nisko stanje, određuje s kojim će podređenim IC-om razmjenjivati ​​podatke. Glavni nedostatak ove veze je potreba za dodatnim linijama za adresiranje podređenih čipova (ukupan broj komunikacijskih linija je 3+n, gdje je n broj podređenih čipova).

Ako nema dovoljno nogu mikrokontrolera, možete koristiti demultipleksni čip. Demultiplekser povezuje jedan ulazni signal s jednim od izlaznih signala, ovisno o kodu na kontrolnim pinovima. Slika 7.4 prikazuje dijagram spajanja demultipleksera. SS signal se dovodi na njegov ulaz, koji uzima vrijednost jednaku 0 ako je potrebno odabrati jedan od mikro krugova. Broj potrebnog mikro kruga u binarnom kodu isporučuje se na noge Am-A0. To vam omogućuje smanjenje broja krakova koji se koriste u mikrokontroleru na m=log 2 n. Gdje je n broj podređenih čipova. Oni. za spajanje 128 uređaja potrebno je 8 pinova mikrokontrolera. Jedan za postavljanje signala za uključivanje i 7 za postavljanje broja čipa koji se uključuje. Treba napomenuti da na nepovezanim krakovima demultipleksera mora postojati logička. Inače se koristi pretvarač signala koji logičku nulu pretvara u logičku jedinicu.

Kaskadno prebacivanje nema ovaj nedostatak jer ovdje nekoliko čipova formira jedan veliki registar posmaka. Da biste to učinili, izlaz podataka za prijenos jednog IC-a povezan je s ulazom za prijem podataka drugog, kao što je prikazano na slici 3. Ulazi za odabir čipa ovdje su povezani paralelno i, stoga, ukupan broj komunikacijskih linija ostaje jednak do 4. Međutim, korištenje kaskadnog povezivanja moguće je samo ako je njegova podrška navedena u dokumentaciji za korištene čipove. Da biste to saznali, važno je znati da se takvo povezivanje na engleskom jeziku zove "daisy-chaining".

Prijenosni protokol

Protokol prijenosa preko SPI sučelja u biti je identičan logici posmačnog registra (slika 7.6), koji se sastoji od izvođenja operacije pomaka i, sukladno tome, bitnog unosa i izlaza podataka na određenim rubovima sinkronizacijskog signala. Podešavanje podataka tijekom prijenosa i uzorkovanje tijekom prijema uvijek se izvode na suprotnim rubovima sata. Ovo je neophodno kako bi se osiguralo uzorkovanje podataka nakon što se pouzdano utvrde. Ako uzmemo u obzir da prvi brid u prijenosnom ciklusu može biti rastući ili silazni brid, tada postoje četiri moguće logičke opcije za rad SPI sučelja. Ove se opcije nazivaju SPI modovi i opisuju ih dva parametra:

· CPOL - početna razina signala sinkronizacije (ako je CPOL=0, tada linija sinkronizacije prije početka prijenosnog ciklusa i nakon njegovog završetka ima nisku razinu (tj. prvi rub je u porastu, a zadnji u opadanju), inače, ako je CPOL=1, - visoko (tj. prva fronta pada, a zadnja raste));

· CPHA - faza sinkronizacije; Ovaj parametar određuje slijed u kojem se podaci instaliraju i dohvaćaju. Ako je CPHA=0, podaci će se uzorkovati na rastućem rubu ciklusa takta, a zatim će se podaci postaviti na padajućem rubu. Ako je CPHA=1, tada će se instalacija podataka izvršiti na uzlaznom rubu u ciklusu sinkronizacije, a uzorkovanje će se izvršiti na padajućem rubu.

Informacije o SPI modovima prikazane su na slikama 7.7 i 7.8.

Glavni i podređeni čipovi koji rade u različitim SPI načinima su nekompatibilni, stoga je prije odabira podređenih čipova važno razjasniti koje načine rada podržava glavni sabirnica. Hardverski SPI moduli integrirani u mikrokontrolere u većini slučajeva podržavaju mogućnost odabira bilo kojeg načina rada i stoga se na njih mogu spojiti bilo koji slave SPI čipovi (odnosi se samo na neovisnu opciju povezivanja). Osim toga, SPI protokol u bilo kojem od načina rada jednostavno se implementira u softver.

RS-485 sučelje

RS-485 sučelje (drugi naziv je EIA/TIA-485) jedan je od najčešćih standarda fizičkog komunikacijskog sloja. Fizički sloj je komunikacijski kanal i način prijenosa signala (sloj 1 OSI modela međusobnog povezivanja otvorenih sustava).

Mreža izgrađena na RS-485 sučelju sastoji se od primopredajnika povezanih pomoću upredene parice - dvije upredene žice. RS-485 sučelje temelji se na principu diferencijalnog (uravnoteženog) prijenosa podataka. Njegova suština je prijenos jednog signala preko dvije žice. Štoviše, jedna žica (uvjetno A) nosi izvorni signal, a druga (uvjetno B) nosi njegovu inverznu kopiju. Drugim riječima, ako postoji "1" na jednoj žici, onda "0" na drugoj i obrnuto. Dakle, uvijek postoji potencijalna razlika između dviju žica upletene parice: na "1" je pozitivna, na "0" je negativna (slika 7.9).

Upravo ta razlika potencijala prenosi signal. Ova metoda prijenosa pruža visoku otpornost na smetnje uobičajenog načina rada. Common-mode smetnja je smetnja koja podjednako utječe na obje žice linije. Na primjer, elektromagnetski val koji prolazi kroz dio komunikacijske linije inducira potencijal u obje žice. Ako se signal prenosi potencijalom u jednoj žici u odnosu na zajedničku, kao u RS-232, tada smetnje na ovoj žici mogu iskriviti signal u odnosu na zajedničku (masu) koja dobro apsorbira smetnje. Osim toga, razlika potencijala uzemljenja će pasti preko otpora dugačke zajedničke žice - dodatni izvor izobličenja. A kod diferencijalnog prijenosa ne dolazi do izobličenja. Zapravo, ako dvije žice leže blizu jedna drugoj, pa čak i isprepletene, tada je prijem na obje žice isti. Potencijal u obje jednako opterećene žice mijenja se jednako, dok informativna razlika potencijala ostaje nepromijenjena.

Hardverska implementacija RS485 sučelja.

Hardverska implementacija sučelja - primopredajni čipovi s diferencijalnim ulazima/izlazima (na liniju) i digitalnim portovima (na UART portove kontrolera). Postoje dvije opcije za ovo sučelje: RS-422 i RS-485.

RS-422 je full duplex sučelje. Prijem i prijenos odvijaju se preko dva odvojena para žica. Na svakom paru žica može postojati samo jedan odašiljač.

RS-485 je half-duplex sučelje. Prijem i prijenos odvijaju se preko jednog para žica s vremenskim odvajanjem. U mreži može postojati mnogo odašiljača, budući da se mogu isključiti u načinu prijema (Slika 7.10).

Objašnjenje simbola na sl. 7.10

D (vozač) - odašiljač;
R (receiver) - prijemnik;
DI (driver input) - digitalni ulaz odašiljača;
RO (receiver output) - digitalni izlaz prijemnika;
DE (driver enable) - dopuštenje za upravljanje odašiljačem;
RE (receiver enable) - dopuštenje za rad s prijamnikom;
A - izravni diferencijalni ulaz/izlaz;
B - inverzni diferencijalni ulaz/izlaz;
Y - izravni diferencijalni izlaz (RS-422);
Z - inverzni diferencijalni izlaz (RS-422).

Pogledajmo pobliže RS-485 primopredajnik. Digitalni izlaz prijemnika (RO) spojen je na UART priključak (RX) prijemnika. Digitalni ulaz odašiljača (DI) u UART priključak odašiljača (TX). Budući da su prijemnik i odašiljač spojeni na diferencijalnoj strani, odašiljač mora biti isključen tijekom prijema, a prijemnik mora biti isključen tijekom prijenosa. U tu svrhu koriste se upravljački ulazi - dopuštenje prijamnika (RE) i dopuštenje odašiljača (DE). Budući da je RE ulaz inverzan, može se spojiti na DE i prebaciti prijemnik i odašiljač jednim signalom iz bilo kojeg priključka kontrolera. Na razini "0" - rad za prijem, na "1" - za prijenos (slika 7.11).

Prijemnik, primajući razliku potencijala (UAB) na diferencijalnim ulazima (AB), pretvara ih u digitalni signal na izlazu RO. Osjetljivost prijemnika može biti različita, ali proizvođači čipova primopredajnika u dokumentaciji pišu zajamčeni raspon praga za prepoznavanje signala. Ti su pragovi obično ±200 mV. To jest, kada je UAB > +200 mV - prijemnik detektira "1" kada je UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Svi uređaji su spojeni na jedan kabel s upredenom paricom na isti način: izravni izlazi (A) na jednu žicu, inverzni izlazi (B) na drugu.

Ulazna impedancija prijamnika na strani linije (RAB) obično je 12 kΩ. Budući da snaga odašiljača nije neograničena, ovo stvara ograničenje broja prijamnika spojenih na liniju. Prema RS-485 specifikaciji, uzimajući u obzir završne otpornike, odašiljač može pokretati do 32 prijemnika. Međutim, postoji niz mikro krugova s ​​povećanom ulaznom impedancijom, što vam omogućuje povezivanje znatno više od 32 uređaja na liniju.

Maksimalna brzina komunikacije prema RS-485 specifikaciji može doseći 10 Mbaud/sec. Maksimalna udaljenost je 1200 metara. Ako je potrebno organizirati komunikaciju na udaljenosti većoj od 1200 metara ili spojiti više uređaja nego što dopušta nosivost odašiljača, koriste se posebni repetitori.

I2C sučelje.

Ovo sučelje predložio je Philips, koji ga je koristio za organiziranje komunikacije između čipova u svojim televizorima. I 2 C (skraćenica za Inter-Integrated Circuit) je dvosmjerna asinkrona serijska sabirnica. Fizički, I 2 C sabirnica se sastoji od dvije signalne linije, od kojih je jedna (SCL) namijenjena prijenosu taktnog signala, a druga (SDA) razmjeni podataka. Za upravljanje vodovima koriste se izlazni stupnjevi s otvorenim kolektorom, tako da vodovi sabirnice moraju biti spojeni na izvor napajanja +5 V preko otpornika s otporom od 1...10 kOhm, ovisno o fizičkoj duljini vodova i brzina prijenosa podataka. Duljina spojnih linija u standardnom načinu rada može doseći 2 metra, brzina prijenosa podataka je 100 kbit/s.

Svi autobusni pretplatnici podijeljeni su u dvije klase - "Vođa" i "Rob". Glavni uređaj generira taktni signal (SCL). Može samostalno pristupiti sabirnici i obratiti se bilo kojem slave uređaju u svrhu prijenosa ili primanja informacija. Svi podređeni uređaji "slušaju" sabirnicu kako bi detektirali vlastitu adresu i nakon što su je prepoznali, izvršili propisanu operaciju. Osim toga, moguć je tzv. “MultiMaster” način rada, kada je na sabirnici instalirano nekoliko master uređaja, koji ili zajednički dijele zajedničke slave uređaje, ili naizmjenično djeluju kao masteri kada sami pokreću razmjenu informacija, ili kao slave kada čekaju pristup s drugog glavnog uređaja. Način rada "MultiMaster" zahtijeva stalno praćenje i prepoznavanje sukoba. U tom smislu, ovaj način je teže implementirati (što znači implementacija softvera) i, kao rezultat toga, rjeđe se koristi u stvarnim proizvodima.

U početnom trenutku vremena - u stanju pripravnosti - obje linije SCL i SDA su u stanju logičke jedinice (tranzistor izlaznog stupnja s otvorenim kolektorom je zatvoren). U načinu prijenosa (Slika 7.12), SDA bit podataka taktira uzlazni rub SCL-a. Informacije na SDA liniji se mijenjaju kada je SCL linija u nultom stanju. Podređeni uređaj može "držati" SCL liniju u nultom stanju, na primjer, dok obrađuje sljedeći primljeni bajt, dok glavni uređaj mora čekati dok se SCL linija ne oslobodi prije nego što nastavi slati informacije.

Za sinkronizaciju paketa sabirnice I 2 C razlikuju se dva uvjeta - "START" i "STOP", koji ograničavaju početak i kraj informacijskog paketa (Slika 7.13). Za kodiranje ovih uvjeta koristi se promjena stanja SDA linije s jednim stanjem SCL linije, što je neprihvatljivo pri prijenosu podataka. Uvjet "START" nastaje kada se na SDA liniji pojavi silazni rub, kada je SCL linija u jednom stanju, i obrnuto, "STOP" uvjet nastaje kada se na SDA liniji pojavi rastući rub kada je SCL linija je u jednom stanju.

Prijenos podataka počinje na prvom uzlaznom rubu na SCL liniji, koji taktira najvažniji bit prvog informacijskog bajta. Svaki informacijski bajt (8 bitova) sadrži 9 takta SCL linije. U devetom ciklusu prijemni uređaj izdaje potvrdu (ACK) - padajući rub koji označava prijem podataka. Treba napomenuti da bilo koji pretplatnik sabirnice, i glavni i podređeni, može u različitim vremenima biti i odašiljač i prijamnik i, u skladu s načinom rada, mora ili primiti ili izdati ACK signal, čiji se nedostatak tumači kao greška.

Za početak operacije razmjene podataka, glavni uređaj izdaje uvjet "START" na sabirnici. Nakon uvjeta “START” slijedi bajt s adresom podređenog uređaja (Slika 7.14), koji se sastoji od sedmobitne adrese uređaja (bitovi 1...7) i jednobitne zastavice operacije čitanja i pisanja - “ R/W” (bit 0). R/W bit određuje smjer razmjene, pri čemu 0 znači prijenos podataka od glavnog do podređenog (Slika 7.14a), a 1 znači čitanje od podređenog (Slika 7.14b). Svi bitovi na I 2 C sabirnici se prenose redom od visokog prema niskom, odnosno 7. bit se prenosi prvi, 0. posljednji. Nakon adrese može slijediti jedan ili više informacijskih bajtova (u smjeru određenom R/W zastavom), čije bitove taktira master na SCL sabirnici.

Prilikom izvođenja operacije čitanja, glavno računalo mora ACK pročitati bajt ako želi pročitati sljedeći bajt, a ne izdati ACK ako se sprema završiti čitanje paketa (vidi sliku 7.14b).

Dopušteno je nastaviti s adresom podređenog uređaja više puta u jednom ciklusu prijenosa, odnosno odašiljanje ponovljenog uvjeta "START" bez prethodnog uvjeta "STOP" (Slika 7.14c).

Potrebno je istaknuti neke značajke memorijskih čipova koji rade preko I 2 C sučelja i postupke razmjene podataka s njima. Prvo, trajna podatkovna memorija ovih mikrosklopova podijeljena je na memorijske stranice, tako da kada se upiše bajt, cijela se stranica najprije kopira u interni RAM mikrosklopa, gdje se mijenja željena ćelija. Nakon toga se stara stranica briše i na njeno mjesto upisuje nova. Još jedna značajka je da četiri najvažnija bita slave adrese uvijek moraju biti jednaka 1010. Ovaj zahtjev regulira sam Philips.

1-Wire sabirnica koristi samo jedan vodič za komunikaciju i napajanje. Način komunikacije je asinkroni i half-duplex, koji striktno slijedi obrazac master-slave. Jedan ili više podređenih uređaja mogu biti povezani na istu sabirnicu u isto vrijeme. Na jednu sabirnicu može se spojiti samo jedan glavni uređaj.

Stanje mirovanja sabirnice odgovara visokoj razini koju stvara otpornik za povlačenje. Vrijednost pull-up otpornika navedena je u dokumentaciji za pomoćni IC. Svi čipovi spojeni na sabirnicu moraju moći proizvesti nisku razinu. Ako izlaz mikrokontrolera ne podržava tri stanja, tada je potrebno osigurati driver koji ima otvoreni kolektor ili otvoreni odvodni izlaz

Prijenos signala preko 1-Wire sabirnice podijeljen je na vremenske utore od 60 µs. Samo jedan bit podataka prenosi se po vremenskom odsječku. Podređeni uređaji smiju imati značajne razlike od nominalnih vremenskih odgoda. Međutim, to zahtijeva točnije mjerenje vremena od strane vođe kako bi se osigurala ispravna komunikacija s podređenima koji imaju različite vremenske baze.

Osnovni signali sabirnice.

Master inicira svaku komunikaciju na razini bita. To znači da prijenos svakog bita, bez obzira na smjer, mora pokrenuti master. To se postiže postavljanjem sabirnice na nisku razinu, što sinkronizira logiku svih ostalih uređaja. Postoji 5 glavnih naredbi za komunikaciju putem 1-Wire sabirnice: “Write log. 1”, “Pisanje dnevnika. 0”, “Čitanje”, “Reset” i “Prisutnost”.

Signal “Pišite dnevnik. 1"

Signal “Pišite dnevnik. 1” prikazan je na sl. 7.15. Glavni postavlja nisku razinu za 1...15 µs. Nakon toga, oslobađa sabirnicu za ostatak vremenskog intervala.

Riža. 7.15 – Signal „Piši dnevnik. 1"

Signal “Pišite dnevnik. 0"

Signal “Pišite dnevnik. 0” prikazan je na slici 7.16. Glavni generira nisku razinu najmanje 60 µs, ali ne duže od 120 µs.

Slika 7.16 – Signal “Write log. 0"

Očitajte signal

Signal "Očitaj" prikazan je na sl. 7.17. Glavni postavlja nisku razinu za 1...15 µs. Podređeni uređaj tada drži sabirnicu niskom ako želi poslati zapisnik. 0. Ako je potrebno prenijeti trupac. 1, tada jednostavno otpušta liniju. Skeniranje sabirnice mora se izvršiti unutar 15 µs nakon što sabirnica postane niska. Gledano sa strane mastera, signal “Read” je u biti signal “Write log”. 1". Stvarno unutarnje stanje podređenog uređaja bit će određeno signalom "Record log". 1" ili "Čitanje".

Slika 7.17 - Signal "Očitaj".

Reset/signal prisutnosti

Signali “Reset” i “Presence” prikazani su na slici 7.18. Imajte na umu da su vremenski intervali pulsa različiti. Glavni povlači nisko 8 vremenskih odsječaka (480 µs) i zatim otpušta sabirnicu. Ovo dugo razdoblje niskog stanja naziva se signal "Reset".

Ako je slave prisutan na sabirnici, mora unutar 60 µs nakon što glavni oslobodi sabirnicu, postaviti nisku razinu na najmanje 60 µs. Taj se odgovor naziva "Prisutnost". Ako se takav signal ne detektira, tada master mora pretpostaviti da nema uređaja spojenih na sabirnicu i da daljnja komunikacija nije moguća.

USB (Universal Serial Bus) razvijen je za brzo povezivanje vanjskih uređaja s osobnim računalom te pronalaženje i instaliranje potrebnog softvera. Uređaji male snage napajaju se izravno preko sučelja.

USB standard podrazumijeva prisutnost samo jednog Master (Host) uređaja na mreži. Štoviše, standard podržava do 127 podređenih uređaja na mreži. Kako bi se razlikovali glavni i podređeni uređaji, razvijeni su različiti tipovi konektora (slika 7.19): tip A za glavni i tip B za podređeni. Prihvaćeno je da je napon od 5 V prisutan samo na konektoru tipa A, koji je glavni konektor. Ostali uređaji napajaju se izravno iz njega.

USB standard koristi 4 oklopljene žice, od kojih dvije prenose snagu (+5v & GND) (Slika 7.19 i Tablica 7.2). Druga dva predstavljaju diferencijalne podatkovne signale upredene parice. Korištena shema kodiranja NRZI(Non Return to Zero Invert) za prijenos podataka sa poljem za sinkronizaciju za sinkronizaciju glavnog i podređenog sata.

Standard USB 2.0 uveo je standard On-The-Go (OTG), koji je uveo Host Negotiation Protocol, koji omogućuje da se dva USB uređaja dogovore o tome tko će djelovati kao glavni. Ovo je namijenjeno i ograničeno na pojedinačne veze od točke do točke, kao što je mobilni telefon na osobno računalo.

USB podržava "vruću" (plug'n'play) vezu s dinamički učitanim i neučitanim upravljačkim programima. Korisnik jednostavno uključi uređaj i na taj način ga spoji na sabirnicu. Host detektira vezu, ispituje novoumetnuti uređaj i učitava odgovarajući driver, označavajući trenutak učitavanja pješčanim satom na ekranu (ako je driver za USB uređaj već instaliran na sustavu). Krajnjem korisniku nije stalo do raskida ili IRQ(prekidi) i adrese portova, niti o ponovnom pokretanju računala (nije potrebno ponovno pokretanje). Kada korisnik završi s USB uređajem, jednostavno ga ukloni (ili odspoji kabel), host će detektirati odsutnost uređaja i automatski ukloniti upravljački program.

SB verzija 1.1 podržava dvije brzine - full speed mode s brzinom od 12 Mbits/s i low speed mode s brzinom od 1.5 Mbits/s. Način rada od 1,5 Mbit/s je sporiji i manje osjetljiv na EMI (smetnje), što smanjuje troškove feritnih kuglica i zahtjeve za kvalitetom komponenti.

Kabel sabirnice pune brzine je kabel s upredenom paricom, zaštićen oklopom, a može se koristiti i za rad niske brzine. Kabel za rad samo pri minimalnoj brzini (na primjer, za spajanje miša) može biti bilo koji i neoklopljen.

USB 2.0 standard uvodi High Speed ​​​​mod s brzinom prijenosa podataka od 480Mbits/s.

Prijenos podataka.

Sve prijenose podataka preko sučelja inicira host. Podaci se prenose u obliku paketa. USB sučelje koristi nekoliko vrsta paketa:

A) potpisati paket (paket tokena) opisuje vrstu i smjer prijenosa podataka, adresu uređaja i serijski broj krajnje točke (CT je adresabilni dio USB uređaja); Paketi značajki dolaze u nekoliko vrsta: U, VAN, SOF, POSTAVITI;

B) paket podataka (paket podataka) sadrži prenesene podatke;

B) paket odobrenja (paket za rukovanje) namijenjen je izvješćivanju o rezultatima prijenosa podataka; Postoji nekoliko vrsta koordinacijskih paketa: ACK, N.A.K., ODUGOVLAČENJE.

Prijenos podataka putem USB-a provodi se na sljedeći način:

Prvi paket, takozvani token, generira glavni uređaj kako bi opisao vrstu podataka koji se prenose, operaciju prijenosa (čitanje ili pisanje), adresu uređaja i krajnju točku. Sljedeći obično preneseni je paket podataka koji nosi korisne informacije, nakon čega slijedi paket rukovanja koji pokazuje da su podaci ili token uspješno primljeni ili da je krajnja točka u zastoju ili nedostupna za prihvaćanje podataka.

Krajnje točke u USB standardu su izvori i primatelji podataka. Svi uređaji moraju podržavati krajnju točku 0. Ovo je krajnja točka koja prihvaća sve zahtjeve za upravljanjem i statusom tijekom enumeracije (zahtjev za rukovanje za određivanje tipa priključenog uređaja) i sve dok uređaj ostaje operativan na sabirnici.

Krajnje točke označene brojevima od 1 koriste se za prijenos korisničkih informacija. Pogledajmo nekoliko primjera.

Upravljački program uređaja šalje do krajnje točke glavnog uređaja EP1. Jer Ovaj uređaj je glavni, tada podaci idu u OUT međuspremnik EP1. U tom slučaju šalje se OUT token, koji označava da su podaci spremni za slanje. Nakon što primi ovaj token, podređeni uređaj može čitati podatke iz OUT međuspremnika.

Ako slave uređaj treba prenijeti podatke na master, on ih stavlja u IN međuspremnik. Ovaj međuspremnik će čuvati podatke sve dok master ne pošalje IN token tražeći podatke od krajnje točke. Svi međuspremnici krajnjih točaka imenovani su u odnosu na glavni, tj. Izlazni međuspremnik podređenog uređaja naziva se IN jer to je ulazni međuspremnik za glavni uređaj.

Prijenos podataka s jedne krajnje točke na drugu vrši se putem tokova. Protok – Logička veza između glavnog računala i krajnje točke(a).

Streamovi također imaju skup parametara kao što su tip prijenosa (Kontrola, Bulk, Iso ili Interrupt), smjer protoka podataka i maksimalne veličine paketa/spremnika.

Na primjer, zadani tok je dvosmjerni tok sastavljen od IN krajnje točke 0 i OUT krajnje točke 0 s kontrolom tipa prijenosa.

USB definira dvije vrste cijevi

A) Potočne cijevi nemaju unaprijed definirani USB format, tako da možete poslati bilo koju vrstu podataka kroz stream pipe i oporaviti podatke na drugom kraju. Tokovi podataka su sekvencijalni i imaju unaprijed određeni smjer - IN ili OUT. Stream cijevi podržavaju bulk, isochronous i interrupt vrste prijenosa. Stream cijevima se može upravljati ili s glavnog računala ili s uređaja.

B) Cijevi poruka imaju unaprijed definirani USB format. Njima upravlja host, pokreće ih zahtjev koji šalje host. Podaci se šalju u željenom smjeru navedenom u zahtjevu. Dakle, cijevi za poruke omogućuju prijenos podataka u oba smjera, ali podržavaju samo prijenose kontrole.

USB standard opisuje četiri vrste prijenosa podataka:

A) Kontrolno prosljeđivanje (prijenos kontrole) koristi se za konfiguraciju uređaja kao i za druge svrhe specifične za uređaj.

B) Strujanje (masovni prijenos) koristi se za prijenos relativno velike količine informacija.

B) Prekid prosljeđivanja (prekidati prijenos) služi za prijenos relativno male količine informacija, za koje je važan njihov pravovremeni prijenos. Ima ograničeno trajanje i veći prioritet u usporedbi s drugim vrstama prijenosa.

D) Izokrono prosljeđivanje (izokroni prijenos) naziva se i strujanje u stvarnom vremenu. Informacije koje se prenose u takvom prijenosu zahtijevaju realnu vremensku ljestvicu tijekom njihovog stvaranja, prijenosa i prijema.

Streaming prijenosi karakteriziran zajamčenim prijenosom podataka bez pogrešaka između glavnog računala i funkcije otkrivanjem pogrešaka tijekom prijenosa i ponovnim traženjem informacija. Kada glavno računalo postane spremno za primanje podataka iz funkcije, šalje funkciji paket zastavice U-plastična vrećica. Kao odgovor na to, funkcija u fazi prijenosa podataka šalje paket podataka hostu ili, ako ga ima

SPI u Arduinu, to je jedan od glavnih protokola za razmjenu podataka između Arduino ploče i povezanih uređaja. Zajedno s I2C i UART, ovaj protokol se često koristi za mnoge vrste perifernih uređaja, tako da je poznavanje principa rada SPI neophodno za svakog Arduino inženjera. U ovom članku ćemo se ukratko osvrnuti na osnovne principe, shemu interakcije i način povezivanja SPI senzora i ekrana na Arduino.

SPI je široko korišten protokol za prijenos podataka između mikrokontrolera (Master) i perifernih uređaja (Slave). U našim projektima kao Master se najčešće koristi Arduino ploča. SPI sučelje je izumila i koristila Motorola, ali je s vremenom postalo industrijski standard. Glavna prednost rada s ovim sučeljem je njegova velika brzina i mogućnost povezivanja više uređaja na jednu podatkovnu sabirnicu.

SPI igle i igle

Komunikacija preko SPI arduino sučelja odvija se između nekoliko uređaja koji se nalaze blizu jedan drugoga. Arduino ploče opremljene su posebnim pinovima za SPI. Uparivanje se odvija pomoću četiri kontakta:

  • MOSI – informacije se ovom linijom prenose do Slave-a od Master-a.
  • MISO – koristi se za prijenos informacija s podređenog na master.
  • SCLK – stvaranje taktnih impulsa za sinkroni prijenos podataka.
  • SS – izbor podređenog uređaja.

Interakcija SPI uređaja

Interakcija uređaja počinje kada SS izlaz padne na nisku razinu.

Prije početka rada morate odrediti:

  • Od kojeg bita treba početi pomak - visokog ili niskog? Redoslijed se prilagođava pomoću funkcije PI.setBitOrder().
  • Odredite razinu na kojoj bi SCK linija trebala biti u nedostatku taktnog impulsa. Podesivo funkcijom SPI.setDataMode().
  • Odaberite brzinu prijenosa podataka. Određeno funkcijom SPI.setClockDivider().

Sljedeći korak je odrediti u kojem će se načinu informacije prenositi. Izbor načina rada određen je takvim pokazateljima kao što su polaritet i faza taktnog impulsa. Ako je razina niska, bilježi se 0, visoka - 1. Ukupno postoje 4 načina:

  • Način rada 0 – SPI_MODE0: polaritet (CPOL) 0, faza (CPHA) 0.
  • Način rada 1: polaritet 0, faza 1.
  • Način rada 2: polaritet 1, faza 0.
  • Način rada 3: polaritet 1, faza 1.

U početku, Arduino je dizajniran za prijenos podataka s bitom najveće važnosti, ali prije početka morate to razjasniti u dokumentaciji. Načine rada možete demonstrirati na slici.

U SPI sučelju moguće su dvije vrste veza: neovisne i kaskadne. U prvom slučaju, prilikom povezivanja, Master se obraća svakom Slave-u pojedinačno, u drugom slučaju, povezivanje se događa jedan po jedan, tj. kaskada.

Spajanje SPI na Arduino

Svaki Arduino model ima svoje SPI pinove. Ovi zaključci:

  • Uno: MOSI odgovara pinu 11 ili ICSP-4, MISO – 12 ili ICSP-1, SCK – 13 ili ICSP-3, SS (slave) – 10.
  • Mega1280 ili Mega2560: MOSI – 51 ili ICSP-4, MISO – 50 ili ICSP-1, SCK – 52 ili ICSP-3, SS (slave) – 53.
  • Leonardo: MOSI – ICSP-4, MISO – ICSP-1, SCK – ICSP-3.
  • Duge: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.

Najnoviji Arduino Due kontroler proširuje korisničke mogućnosti i omogućuje implementaciju više zadataka od drugih mikrokontrolera. Na primjer, moguće je automatski kontrolirati podređeni uređaj i automatski odabrati različite konfiguracije (brzina sata, način rada itd.).

Arduino SPI biblioteka

Za rad na Arduinu stvorena je zasebna biblioteka koja implementira SPI. Prije pokretanja koda trebate dodati #include omogućiti knjižnicu.

Glavne funkcije:

  • begin() i end() – uključivanje i isključivanje rada. Tijekom inicijalizacije, linije SCLK, MOSI i SS su konfigurirane na izlazu, šaljući nisku razinu u SCLK, MOSI i visoku razinu u SS. Funkcija end() ne mijenja razine linija; potrebna je za isključivanje bloka povezanog sa sučeljem na Arduino ploči.
  • setBitOrder(order) – postavljanje redoslijeda slanja informacijskih bitova (MSBFIRST – prioritet bita najveće važnosti, LSBFIRST – prioritet bita najmanje važnosti).
  • setClockDivider(divider) – postavljanje razdjelnika takta glavne frekvencije. Možete postaviti djelitelje na 2, 4, 8, 16, 32, 64 i 128. Zapisuje se na sljedeći način - SPI_CLOCK_DIVn, gdje je n odabrani djelitelj.
  • setDataMode(mode) – odaberite jedan od četiri načina rada.
  • prijenos(vrijednost) – prenosi bajt od glavnog uređaja i vraća bajt koji je primljen od podređenog uređaja.
  • shiftIn(miso_pin, sclk_pin, bit_order) i shiftOut(mosi_pin, sclk_pin, order, value) – prihvaćanje i slanje podataka, mogu se spojiti na bilo koje digitalne pinove, ali prije toga ih morate sami konfigurirati.

Prednosti i nedostaci SPI

Prednosti SPI sučelja:

  • Sposobnost prijenosa velikih podataka, ne ograničenih na 8 bita.
  • Softver jednostavan za implementaciju.
  • Jednostavnost hardverske implementacije.
  • Potrebno je manje pinova nego za paralelna sučelja.
  • Samo brzina uređaja ograničava maksimalnu frekvenciju takta.

Mane:

  • Veliki broj pinova u usporedbi s I2C.
  • Rob ne može kontrolirati protok informacija.
  • Nedostatak standardnog protokola za otkrivanje grešaka.
  • Velik broj načina implementacije sučelja.
  • Nedostatak potvrde o primitku informacija.

Primjer korištenja Arduino SPI u projektu sa senzorom tlaka

Za provedbu projekta trebamo Arduino, senzor tlaka, matičnu ploču i žice. Primjer spajanja senzora prikazan je na slici.

Pomoću senzora SCP1000 moguće je prepoznati parametre kao što su tlak i temperatura i prenijeti te vrijednosti putem SPI.

Osnovni elementi programske skice

Prije svega, registri senzora se registriraju u kodu koristeći setup(). Uređaj vraća nekoliko vrijednosti - jednu u 19 bita za primljeni tlak, drugu u 16 bita za temperaturu. Nakon toga se očitavaju dva bajta temperature i očitava se tlak u dvije faze. Prvo, program uzima tri najznačajnija bita, zatim sljedećih 16 bita, nakon čega se pomoću pomaka bita ove dvije vrijednosti kombiniraju u jednu. Pravi tlak je 19-znamenkasta vrijednost podijeljena s 4.

const int TLAK = 0x1F; // prva faza određivanja tlaka (otkrivaju se tri najznačajnija bita)

const int PRESSURE_LSB = 0x20; // druga faza, koja definira 16 bitova za pritisak

const int TEMPERATURA = 0x21; //16 bita za temperaturu

Za čitanje podataka o temperaturi i njihovo pretvaranje u Celzijuse koristi se sljedeći element koda:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // da biste odredili stvarnu vrijednost temperature u Celzijevim stupnjevima, morate dobiveni broj podijeliti s 20

Serial.print(“Temp

Serial.print(realTemp);

Čitanje bitova pritiska i njihovo kombiniranje:

bajt pritisak_podataka_visok = readRegister(0x1F, 1);

pritisak_podataka_visok &= 0b00000111;

unsigned int pressure_data_low = readRegister(0x20, 2);

dugi tlak = ((podaci_tlaka_visok<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

Kratki zaključci o SPI

SPI štitovi i senzori često se nalaze u Arduino projektima, tako da morate znati kako ovaj protokol radi. U principu, nema ništa komplicirano u povezivanju SPI uređaja. Glavna stvar je ispravno spojiti žice i koristiti standardne metode knjižnice u pravom slijedu. Za neke uređaje, na primjer, SD kartice ili OLED zaslone, u načelu nema alternative.

Dobar dan! Današnji članak je mala teoretska digresija koja će nam pomoći u savladavanju tečaja Arduino programiranja. Govorit ćemo o SPI sučelju. Što je to i s čime se jede, pokušat ćemo otkriti u ovom članku.

Za početak, definicija. SPI(Serial Peripheral Interface - serijsko periferno sučelje) je standard za serijski sinkroni prijenos podataka koji je dizajniran za komunikaciju kontrolera s različitim periferijama. Ovo sučelje je jednostavno i praktično. Za Arduino je napisana posebna biblioteka za rad sa SPI.

Komunikacija se temelji na principu “master-slave”. Kontroler je obično glavni uređaj. Svi ostali uređaji koji su spojeni na sustav su slave. Podaci s nadređenog uređaja prenose se podatkovnom sabirnicom do jednog od odabranih podređenih uređaja ili obrnuto sa podređenog uređaja na nadređeni sinkrono, koristeći signal glavnog takta.

Pinout SPI sabirnice podataka sastoji se od 4 reda: MOSI, MISO, CS i SCLK:

  • MOSI(Master Out Slave In - Glavni izlaz, Slave ulaz) ili jednostavno SI.– prijenos podataka se odvija s glavnog uređaja na podređeni uređaj.
  • MISO(Master In Slave Out - Glavni ulaz, Slave izlaz) ili jednostavno TAKO– prijenos podataka se odvija s podređenog uređaja na glavni uređaj.
  • C.S.(Chip Select - odabir čipa) ili SS(Odabir podređenog — Odabir podređenog) – odabir podređenog uređaja.
  • SCLK(Serijski SAT) ili jednostavno SCK– prijenos taktnog signala od glavnog do podređenog.

Za prijenos podataka s mastera na slave potrebno je da master postavi nisku razinu signala na CS liniji slave s kojom će uspostaviti komunikaciju. Bitovi se zatim prenose preko MOSI linije. Kako bi zaustavio prijenos podataka, voditelj "otpušta" CS liniju, takoreći, postavljajući na nju visoku razinu signala.

Za spajanje nekoliko podređenih uređaja na SPI podatkovnu sabirnicu, svaki od njih treba imati svoju vlastitu individualnu CS liniju. Nakon što je to učinjeno, glavni uređaj može naizmjenično "povlačiti" vodove, prebacujući se između pomoćnih uređaja. Više podređenih uređaja može se spojiti na različite načine: paralelno ili serijski.

Paralelno povezivanje podređenih uređaja preko SPI sabirnice podataka

Osobitost paralelnog povezivanja nekoliko podređenih uređaja je u tome što se za stvaranje komunikacije koriste zajedničke linije SCLK, MOSI i MISO. U ovom slučaju svaki slave uređaj ima svoju vlastitu SS(CS) liniju. Glavni uređaj određuje s kojim će „trenutno podređenim“ uspostaviti razmjenu podataka generiranjem niske razine signala na odgovarajućoj SSn liniji (gdje je n – 1,2...).

Za povezivanje n-broja podređenih uređaja na kontroler preko SPI sučelja, trebate ih dodijeliti za ovu svrhu n+3 pinovi mikrokontrolera.

Serijsko povezivanje slave uređaja na SPI sabirnicu

Što se tiče serijskog povezivanja podređenih uređaja, oni koriste zajedničke linije SCLK i SS, a izlaz jednog spojen je na ulaz drugog. MOSI linija nadređenog je spojena na prvu podređenu, a MISO linija je spojena na posljednju. Ako ovu vezu promatrate s gledišta glavnog uređaja, tada je jedan slave uređaj povezan preko SPI podatkovne sabirnice.

Treba istaknuti prednost ove vrste povezivanja: možete spojiti n-ti broj uređaja koristeći samo 4 pina mikrokontrolera za tu svrhu.

Toliko za sada, nastavak slijedi...

Danas započinjemo naše upoznavanje s gumom SPI (Serial Peripheral Interface).

Ova sabirnica se vrlo široko koristi u elektronici. Vrlo je zgodan, jer je sinkroni i full duplex, stoga se koristi u mnogim sklopovima za komunikaciju između različitih digitalnih uređaja - senzora, kontrolera, upravljačkih programa i drugih uređaja.

Drugi važan čimbenik u potrebi našeg upoznavanja s njom je to što je ova sabirnica hardverski organizirana u kontrolerima AVR.

Štoviše, htjeli mi to ili ne, već duže vrijeme komuniciramo sa SPI sučeljem, čim smo prvi put počeli flashati naš kontroler, budući da se flasha preko ovog sučelja.

Stoga bih želio bolje upoznati ovu gumu.

Otvorimo tehničku dokumentaciju za Atmega8 kontroler, otvorimo stranicu na kojoj je prikazan raspored pinova ovog kontrolera i vidimo da su pinovi 16 do 19 tamo gdje se nalaze pinovi SPI sabirnice

Sada malo više o ovim nalazima

SS (odabir čipa)— ovo je noga za odabir uređaja. Ako je podređeni uređaj na ovom pinu postavljen na nisku razinu, tada će ovaj uređaj odgovoriti i razmjenjivati ​​informacije putem SPI sabirnice; ako je na visokoj razini, neće.

MOSI (glavni izlaz podređeni ulaz)- Ovo je izlazni pin glavnog uređaja i ulaz podređenog uređaja.

MISO (master input slave output)- naprotiv, izlaz podređenog, ulaz glavnog.

SCK— noga sinkronizacije. Svi uređaji koji sudjeluju u razmjeni informacija na ovoj sabirnici opskrbljuju se taktnim impulsima na određenoj frekvenciji.

Ovdje je dijagram implementacije SPI sabirnice u Atmega8 kontroleru

Kao i svaki autobus, postoji niz registara koji pohranjuju određene informacije.

Zanima nas REGISTAR SMJENA, preko njega se razmjenjuju podaci. Čim postoji određeni brid na sinkronizacijskom pinu, bilo silazni ili uzlazni, ovisno o postavkama, ovi registri slave i master uređaja će razmjenjivati ​​informacije, i to ne sve informacije, već samo jedan bit. Ovi registri će se pomaknuti ulijevo i najvažniji bitovi iz svakog registra će ići u najmanje značajne bitove istog registra pridruženog uređaja. To jest, podređeni bit će prenijeti svoj najznačajniji bit preko MOSI pina do voditelja, koji će ga upisati u ispražnjeni bit nižeg reda zbog lijevog pomaka, a podređeni će prenijeti svoj pomaknuti bit višeg reda kroz MISO pričvrstiti na niži bit vodećeg. Ovako ide razmjena, odnosno u 8 punih taktova oni će potpuno razmijeniti bajtove

Čim se prenese svih 8 bitova jednog bajta informacije, određeni registar će nam signalizirati da je ovaj proces završen. Ili bolje rečeno, određeni dio određenog registra.

Također u blok dijagramu vidimo razdjelnik, čiji ulaz prima taktne impulse, a zatim se, podijeljeni s određenom vrijednošću, šalju kroz lanac do SCK pina, a odatle se dovode do pomoćnog uređaja na pinu isto ime. Time se osigurava sinkronizirani rad uređaja. Frekvencija takta odabire se među najnižom koju podržavaju svi uređaji koji sudjeluju u razmjeni.

Kažem množinu jer u danom krugu može biti više od samo dva uređaja. Kako se to osigurava, pod uvjetom da uređaji nemaju adrese, sada ću vam reći.

Postoji više načina za razmjenu informacija između više uređaja, odnosno kada postoji više slave uređaja na jednom master uređaju. Pogledat ćemo dva najčešća od njih.

Prva metoda je radijalna (kliknite na sliku za povećanje slike)

Ovdje master usmjerava podatke na određeni uređaj, uključivanjem logičke 0 na SS pinu.Ovom metodom moguće je odabrati samo jedan uređaj, a trebat će vam i nekoliko slobodnih pinova portova kontrolera.

Postoji još jedna zanimljiva metoda - prsten ili kaskada (kliknite na sliku za povećanje slike)

Ovdje vidimo da su sve selekcijske noge paralelne i da razmjena ide u krug. Dakle, brzina se smanjuje zbog činjenice da se krug prijenosa povećava, ali se krakovi luka spremaju.

Sve ćemo to detaljnije proučiti u sljedećim lekcijama, kada ćemo koristiti određene uređaje u našim projektima.

Pa, čini se sa sklopom prijenosa podataka preko sabirnice SPI shvatili smo.

Sada shvatimo kako kontrolirati ovaj proces na razini hardverskih registara AVR kontrolera.

Te registre vidimo u blok dijagramu iznad na stranici.

Atmega8 ima sljedeće registre za servisiranje SPI sabirnice.

SPDR (SPI registar podataka)- registar podataka, u blok dijagramu je DATA BUFFER. U ovaj registar unijet ćemo bajt za njegov naknadni prijenos na podređeni uređaj, a iz njega ćemo pročitati bajt informacija koji je došao od podređenog uređaja. Također nije nužno da naš kontroler bude glavni uređaj. Nakon toga ćemo sastaviti krug od dva regulatora, od kojih će jedan biti podređeni. Dakle, u ovom registru će se nalaziti bajt za slanje i primanje.

SPCR (SPI kontrolni registar)- kontrolni registar

Ovaj registar uključuje sljedeće bitove:

SPIE (Omogućivanje SPI prekida)- bit koji omogućuje prekide.

SPE (SPI omogućeno)— bit koji omogućuje SPI sabirnicu.

DORD (redoslijed podataka)— bit koji postavlja redoslijed slanja bitova.Ako je postavljen na 1, tada se prvi šalje najmanje značajan bit, ako je postavljen na 0, šalje se najvažniji bit.

MSTR (odabir glavnog/podređenog)— bit koji označava uređaj kao glavni ili podređeni. Kada je ovaj bit postavljen na 1, uređaj će biti glavni.

CPOL (polaritet sata)— polaritet sinkronizacije, određuje na kojem rubu sinkronizacijskog impulsa će se pokrenuti stanje pripravnosti

Ako je ovaj bit 1, tada ćemo imati stanje pripravnosti s uzlaznim rubom, a ako je 0, onda s silaznim rubom.

CPHA (faza sata)— bit odgovoran za fazu takta, odnosno na kojem rubu će se bit prenositi.

Pogledajmo dijagrame prijenosa podataka ovisno o instalaciji CPOL i CPHA

Ovo je tako zanimljiva ovisnost. Ponekad u tehničkim karakteristikama nekog uređaja vidimo da on npr. može raditi u SPI 0:0 i SPI 1:1 modu, a upravo se to tiče podešavanja ovih bitova.

SPR1, SPR0 (odabir SPI takta)- ovo su bitovi odgovorni za vrijednost djelitelja frekvencije sinkronizacije; oni rade zajedno s bitom SPI2X nalazi se u statusnom registru. On je ujedno i kontrolni jer osam bitova u kontrolnom registru nije bilo dovoljno za sve postavke, a slobodnih u statusnom registru ima mnogo.

SPSR (SPI statusni registar)- registar stanja

SPI2X (Bit s dvostrukom SPI brzinom)- bit koji udvostručuje brzinu, radeći u sprezi s bitovima SPR1 i SPR0 kontrolnog registra.

Pogledajmo ovisnost frekvencije o ova tri bita

SPIF (SPI oznaka prekida)— Oznaka prekida. Čekamo da se ovaj bit postavi na jedan. kada primimo bajt. Čim se bajt s drugog uređaja potpuno pojavi u našem međuspremniku, ova će se zastavica postaviti. Ova zastavica radi samo ako je postavljen bit koji omogućuje prekide, kao i ako su omogućeni globalni prekidi.

WCOL (Pisanje zastavice sudara)— zastavica sukoba ili kolizije bit će postavljena ako postoji sukob bitova tijekom prijenosa podataka, ako se tijekom prijenosa podataka pokuša pisati u registar podataka.

Pa, sada možemo reći da smo se malo upoznali sa SPI sučeljem.

Pogledajte VIDEO TUTORIAL(kliknite na sliku)

Broj pregleda posta: 6.294

S ocjenama od 10 Ohma do 1 MOhma);

  • spojne žice (na primjer, ovo je dobar set);
  • osobno računalo s Arduino IDE razvojnim okruženjem.
  • 1 Opis serije SPI sučelje

    SPI - Serial Peripheral Interface ili "Serial Peripheral Interface" je sinkroni protokol prijenosa podataka za uparivanje glavni uređaj S periferni uređaji (podređeni). Glavni uređaj je često mikrokontroler. Komunikacija između uređaja odvija se preko četiri žice, zbog čega se SPI ponekad naziva "četverožično sučelje". Ovo su gume:

    Postoje četiri načina prijenosa podataka ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), uzrokovan kombinacijom polariteta taktnih impulsa (radimo na VISOKOJ ili NISKOJ razini), Polaritet sata, CPOL i faza taktnih impulsa (sinkronizacija na rastućem ili silaznom rubu taktnog impulsa), Faza sata, CPHA.

    Slika objašnjava ovu tablicu.

    SPI sučelje nudi nekoliko opcija za povezivanje slave uređaja: nezavisna I kaskada. Kada je neovisno spojen na SPI sabirnicu, glavni uređaj pristupa svakom podređenom uređaju zasebno. Kod kaskadne veze podređeni uređaji rade jedan po jedan, kao u kaskadi.


    Vrste povezivanja uređaja za rad preko SPI sučelja: neovisno i kaskadno

    2 Implementacija SPI sučelja na Arduino obiteljskim pločama

    U Arduinu, sabirnice SPI sučelja nalaze se na određenim portovima. Svaka ploča ima svoj raspored pinova. Radi praktičnosti, zaključci su umnoženi i također postavljeni na zasebno ICSP konektor(U serijskom programiranju kruga, programiranje uređaja uključenog u krug pomoću serijskog protokola). Imajte na umu da ICSP konektor nema pomoćni pin za odabir - SS, jer pretpostavlja se da će se Arduino koristiti kao glavni uređaj u mreži. Ali ako je potrebno, možete dodijeliti bilo koji digitalni pin Arduina kao SS.

    Slika prikazuje standardnu ​​korespondenciju pinova sa SPI sabirnicama za Arduino UNO i Nano.


    3 Knjižnica za posao sa SPI sučeljem

    Za Arduino je napisana posebna biblioteka koja implementira SPI protokol. Spaja se ovako: na početku programa dodajemo #uključi SPI.h.

    Da biste započeli s korištenjem SPI protokola, morate postaviti postavke i zatim inicijalizirati protokol pomoću postupka SPI.beginTransaction(). To možete učiniti pomoću jedne upute: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    To znači da inicijaliziramo SPI protokol na frekvenciji od 14 MHz, prijenos podataka se odvija počevši od MSB (najvažniji bit), u SPI_MODE0 modu.

    Nakon inicijalizacije odaberite slave uređaj pomicanjem odgovarajućeg SS pina u stanje NISKO.

    Zatim naredbom prenosimo podatke na slave uređaj SPI.transfer().

    Nakon prijenosa vraćamo SS državi VISOKO.


    Rad s protokolom završava naredbom SPI.endTransaction().

    Preporučljivo je minimizirati vrijeme prijenosa između uputa SPI.beginTransaction() i SPI.endTransaction() kako biste izbjegli probleme ako drugi uređaj pokuša pokrenuti prijenos podataka pomoću različitih postavki.

    4 Spajanje registra pomaka na Arduino

    Razmotrimo praktičnu primjenu SPI sučelja. Upalit ćemo LED diode kontrolirajući 8-bitni registar posmaka preko SPI sabirnice. Spojimo se na Arduino registar pomaka 74HC595. Spojit ćemo LED s nominalnom vrijednošću od 220 Ohma na svaki od 8 izlaza registra preko graničnog otpornika. Dijagram je prikazan na slici.


    5 Skica za upravljanje posmačnim registrom putem SPI sučelja

    Napišimo ovakav skeč.

    #uključi const int pinSelect = 8; // registracija odaberite pin void setup() ( SPI.begin(); // inicijaliziranje SPI sučelja pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // odabir pomoćnih uređaja (registar) SPI.transfer(0); // brisanje sadržaja registra digitalWrite(pinSelect, HIGH); // kraj prijenosa Serial.begin(9600); } void petlja() ( za (int i=0; i )

    Najprije povežimo SPI biblioteku i inicijalizirajmo SPI sučelje. Definirajmo pin 8 kao SS podređeni pin za odabir. Očistimo registar posmaka tako da mu pošaljemo vrijednost "0". Inicijalizirajte serijski port.

    Da biste zapalili određenu LED diodu pomoću registra pomaka, trebate primijeniti 8-bitni broj na njen ulaz. Na primjer, da bi prva LED dioda zasvijetlila, unosimo binarni broj 00000001, za drugu - 00000010, za treću - 00000100, itd. Ovi binarni brojevi, kada se pretvore u decimalni brojevni sustav, tvore sljedeći niz: 1, 2, 4, 8, 16, 32, 64, 128 i potencije su broja od 0 do 7.

    Sukladno tome, u ciklusu petlja() Na temelju broja LED dioda preračunavamo od 0 do 7. Funkcija pow(baza, stupanj) Podiže 2 na stepen brojača petlje. Mikrokontroleri ne rade baš precizno s brojevima tipa "double", pa koristimo funkciju zaokruživanja za pretvaranje rezultata u cijeli broj krug(). I prenesemo dobiveni broj u registar pomaka. Radi jasnoće, monitor serijskog porta prikazuje vrijednosti dobivene tijekom ove operacije: Jedinica "prolazi" kroz pražnjenja - LED diode svijetle u valovima.

    6 "Val koji trči" od LED dioda

    LED diode svijetle jedna po jedna, a mi promatramo pokretni "val" svjetala. LED-icama se upravlja pomoću posmačnog registra na koji smo se spojili preko SPI sučelja. Kao rezultat toga, samo 3 Arduino pina se koriste za kontrolu 8 LED dioda. Ako povezujemo LED diode izravno na Arduino digitalne priključke, morali bismo koristiti zaseban priključak za svaki LED.

    Proučavali smo najjednostavniji primjer rada Arduina sa SPI sabirnicom. Detaljnije ćemo razmotriti rad nekoliko registara pomaka s neovisnim i kaskadnim vezama u zasebnom članku.