Šta je 4 žice spi interfejs. Kako raditi sa SPI - teorija. Vremenski dijagram signala

Danas počinjemo naše upoznavanje sa gumom SPI (serijski periferni interfejs).

Ova magistrala se veoma široko koristi u elektronici. Vrlo je zgodan jer je sinhroni i puni dupleks, stoga se koristi u mnogim krugovima za komunikaciju između različitih digitalnih uređaja - senzora, kontrolera, drajvera i drugih uređaja.

Još jedan bitan faktor u potrebi našeg upoznavanja je da je ova sabirnica hardverski organizovana u kontrolerima AVR.

Štaviše, hteli to ili ne, sa SPI interfejsom komuniciramo već duže vreme, čim smo prvi put počeli da flešujemo naš kontroler, pošto se flešuje preko ovog interfejsa.

Stoga bih želio da bolje upoznam ovu gumu.

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

Sada malo više o ovim nalazima

SS (odabir čipa)— ovo je noga za odabir uređaja. Ako podređeni uređaj na ovom pinu padne nizak, onda ovaj uređajće odgovoriti i razmijeniti informacije putem SPI magistrale, ako je visoka, onda neće.

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

MISO (glavni ulaz slave izlaz)- naprotiv, izlaz slave-a, ulaz mastera.

SCK— noga za sinhronizaciju. Svi uređaji koji učestvuju u razmjeni informacija na ovoj magistrali se snabdijevaju taktnim impulsima na određenoj frekvenciji.

Evo dijagrama implementacije SPI magistrale u Atmega8 kontroleru

Kao i svaka sabirnica, postoji niz registara koji pohranjuju određene informacije.

Zainteresovani smo za SHIFT REGISTER, preko njega se razmjenjuju informacije. Čim postoji određena ivica na pinu za sinhronizaciju, silazna ili rastuća, ovisno o podešavanjima, 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 najznačajniji bitovi iz svakog registra će ići na najmanje značajne bitove istog registra pridruženog uređaja. To jest, slave će prenijeti svoj najznačajniji bit kroz MOSI pin do lidera, koji će ga upisati u ispražnjeni bit nižeg reda zbog lijevog pomaka, a slave će prenijeti svoj pomjereni bit visokog reda kroz MISO zakačiti na niži bit lidera. Ovako ide razmjena, odnosno u 8 punih ciklusa takta će u potpunosti razmijeniti bajtove

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

Također u blok dijagramu vidimo razdjelnik na čiji ulaz prima impulse takta i zatim, podijeljeni određenom vrijednošću, šalju se kroz lanac do SCK pina i odatle se napajaju do slave uređaja na pinu isto ime. Ovo osigurava sinkroniziran rad uređaja. Frekvencija takta se bira od najniže koju podržavaju svi uređaji koji učestvuju u razmjeni.

Kažem množinu jer može postojati više od samo dva uređaja u datom kolu. Kako je to osigurano, pod uslovom da uređaji nemaju adrese, sad ću vam reći.

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

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

Ovdje master usmjerava podatke na određeni uređaj, uključivanjem logičke 0 na SS pin-u.

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

Ovdje vidimo da su svi krakovi za odabir paralelni i razmjena ide u krug. Dakle, brzina se smanjuje zbog činjenice da se krug prijenosa povećava, ali su krakovi luka sačuvani.

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

Pa, čini se sa sklopom za prijenos podataka preko magistrale SPI shvatili smo.

Sada ćemo shvatiti kako kontrolirati ovaj proces na razini hardverskih registara AVR kontrolera.

Ove registre vidimo u blok dijagramu iznad na stranici.

Atmega8 ima sljedeće registre za servisiranje SPI magistrale.

SPDR (SPI registar podataka)- registar podataka, u blok dijagramu je DATA BUFFER. U ovaj registar ćemo unijeti bajt za njegov naknadni prijenos na slave uređaj, a iz njega ćemo čitati bajt informacija koji je došao sa slave uređaja. Takođe nije neophodno da naš kontroler bude glavni uređaj. Nakon toga ćemo sastaviti krug od dva kontrolera, od kojih će jedan biti slave. 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 (SPI Interrupt Enable)- bit koji omogućava prekide.

SPE (SPI Omogući)— bit koji omogućava SPI magistralu.

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

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

CPOL (polaritet sata)— polaritet sinhronizacije, određuje na kojoj ivici sinhronizacionog impulsa će biti pokrenut režim pripravnosti

Ako je ovaj bit 1, tada ćemo imati režim pripravnosti sa rastućom ivicom, a ako je 0, onda sa opadajućom ivicom.

CPHA (faza takta)— bit odgovoran za fazu takta, odnosno na kojoj će se ivici bit prenijeti.

Pogledajmo dijagrame prijenosa podataka ovisno o instalaciji CPOL i CPHA

Ovo je tako zanimljiva zavisnost. Ponekad ponekad vidimo unutra tehničke specifikacije bilo kojeg uređaja koji, na primjer, može raditi u SPI 0:0 i SPI 1:1 modu, to je upravo ono što se tiče postavljanja ovih bitova.

SPR1, SPR0 (SPI odabir brzine takta)- ovo su bitovi odgovorni za vrijednost sinkronizacijskog djelitelja frekvencije oni rade zajedno sa bitom SPI2X nalazi se u statusnom registru. Ujedno je i kontrolni, jer osam bitova u kontrolnom registru nije bilo dovoljno za sva podešavanja, a u statusnom registru ima mnogo slobodnih.

SPSR (SPI statusni registar)- statusni registar

SPI2X (dvostruki SPI brzi bit)- bit koji udvostručuje brzinu, radeći u sprezi sa SPR1 i SPR0 bitovima kontrolnog registra.

Pogledajmo zavisnost frekvencije od ova tri bita

SPIF (SPI Interrupt Flag)— Zastavica prekida. Čekamo da se ovaj bit postavi na jedan. kada primimo bajt. Čim se bajt sa drugog uređaja u potpunosti pojavi u našem baferu, ova zastavica će biti postavljena. Ova zastavica radi samo ako je postavljen bit koji omogućava prekide, kao i ako su omogućeni globalni prekidi.

WCOL (Pisanje zastavice COLlision)— zastavica sukoba ili kolizije će biti postavljena ako postoji sukob bitova tokom prijenosa podataka, ako se tokom prijenosa podataka pokuša upisati u registar podataka.

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

Pogledajte VIDEO VODIČ(kliknite na sliku)

Pregleda postova: 6,294

SPI(Serijska periferna sabirnica) - protokol serijske periferne razmjene. Ovaj pirsing je razvio Motorola, ali ga trenutno koriste mnogi proizvođači. Dizajniran je za međusobno povezivanje mikrokontrolera, kao i sa svim vrstama perifernih uređaja: senzorima, ADC-ovima, memorijskim čipovima, satovima. Ali i dalje najčešća upotreba SPI- Ovo je upisivanje programa u memoriju mikrokontrolera. U mikrokontrolerima AVR uz pomoć SPI možete flešovati mikrokontroler bez odlemljenja sa ploče, ovaj način flešovanja se zove ISP (u sistemskom programiranju). Iako imena SPI I ISP veoma suglasni, nisu ista stvar, u AVR SPI koristi se kao fizički sloj ISP, odnosno koriste se linije SPI za prijenos podataka, ali je sam protokol (softverski nivo) drugačiji.

Za prijenos podataka na SPI koriste se tri linije:

MISO (glavni ulaz Slave izlaz)– preko ove linije Master (master) prima podatke od Slave-a (slave).

MOSI (Master Output Slave Input)– Master šalje podatke Slave-u preko ove linije.

SCK (serijski sat)– služi za prijenos signala sata na slave uređaj.

Linija se također koristi SS (Slave Select), koji definira uređaj s kojim Gospodaruće razmjenjivati ​​podatke.

Zbog činjenice da mnogi proizvođači koriste SPI u svojim uređajima, nazivi pinova mogu se neznatno razlikovati. Ispod je tabela sa alternativnim nazivima.


Postoje dvije vrste SPI-a: hardverski i softverski. Prilikom implementacije softvera SPI, moramo ručno postaviti signal na noge odgovarajućeg MISO, MOSI, SS dok vuče SCK. Sa hardverskom implementacijom SPI podatke prenosimo u poseban registar, a mikrokontroler sam vrši gore opisane manipulacije, prema preliminarnim postavkama.

Fizička implementacija SPI, predstavlja dva pomaka povezana zajedno.


Zavisno od logičkog nivoa signala SCK, dolazi do sinhronizacije Gospodaru I Slave i na kojoj se fronti podaci hvataju i prebacuju, moguća su 4 načina rada SPI.

  • CPOL = 0 - signal sinhronizacije počinje na niskom nivou;
  • CPOL = 1 - signal sinhronizacije počinje na visokom nivou;
  • CPHA = 0 - podaci se uzorkuju na rastućoj ivici signala sinhronizacije;
  • CPHA = 1 - podaci se uzorkuju na padajućoj ivici signala sinhronizacije.
Oscilogrami ispod pokazuju kako izgleda parcela 0x17 u različitim modovima.
CPOL = 0 CPHA = 0


CPOL = 1 CPHA = 0


CPOL = 0 CPHA = 1


CPOL = 1 CPHA = 1

SPI- sinhroni interfejs, odnosno za primanje nekih podataka iz Slave, Gospodaru treba nešto poslati. Čini se da je sve jasno, ali šta ako Gospodarušalje jedan bajt i Slave da mu vratim dva? U ovom slučaju, Master bi mu trebao poslati nešto 2 puta, na primjer 0x00.
//pošalji naredbu, odgovor bi trebao biti dva bajta Spi_Master_Transmit(chx); //pošalji nešto da primi prvi bajt Spi_Master_Transmit(0X00); touch_x = SPDR; touch_x<<= 8; //отправляем что-нибудь для того чтобы принять второй байт Spi_Master_Transmit(0X00); touch_x |= SPDR; touch_x >>= 3;
To je sve, gornji primjer koda je preuzet iz radnog projekta.

Serijski periferni interfejs ili SPI- serijski periferni interfejs, koji se koristi za komunikaciju između periferije i mikrokontrolera. Na primjer, periferni uređaj može biti: ekran, razni senzori, FLASH memorija, SD kartica (da, da, SD kartica ili “fleš disk” koji koristite u telefonima i kamerama komunicira sa vanjski svijet koristeći SPI interfejs) itd.

Nažalost, ne postoji zvanična dokumentacija za SPI interfejs, pa je ovaj post zasnovan na raznim člancima na Internetu, sopstvenom iskustvu i dokumentaciji za mikrokontrolere.

Pročitajte šta je SPI u člancima na Wikipediji

IN SPI Uvijek postoji jedan gospodar i jedan/više robova.

Prijenos podataka uvijek inicira master.

SPI koristi četiri komunikacijske linije:

  • MOSI ili S.I.- glavni izlaz, slave ulaz (engleski) GospodaruVanSlaveU). Služi za prijenos podataka sa glavnog uređaja na slave.
  • MISO ili SO- glavni ulaz, slave izlaz (engleski) GospodaruUSlaveVan). Služi za prijenos podataka sa slave uređaja na glavni uređaj.
  • SCLK ili SCK- serijski sat SerialSat). Služi za prijenos taktnog signala za slave uređaje.
  • C.S. ili SS- izbor mikrokola, izbor slave (eng. Odabir čipa, odabir slave).

P.S. Za jednosmjernu komunikaciju sa jednim uređajem dovoljno je koristiti SCLK, MOSI(u slučaju da slave uređaj samo prima) ili SCLK, MISO(u slučaju da slave uređaj ne prima ništa, već samo prenosi informacije). Na ulazu C.S. Slave uređaj mora biti postavljen na logički nula, inače slave neće raditi.

P.S. Ako podređeni uređaj i emituje i prima, tada se možete ograničiti na tri žice - MISO, MOSI, SCLK, na ulazu C.S. Slave uređaj također treba postaviti logički nula.

SPI može se implementirati u mikrokontroler hardver, tada je zadatak upravljanja interfejsom riješen za svaki mikrokontroler posebno, jer implementacije mogu varirati. Na primjer, za ATmega328R(mikrokontroler iz Atmela) pri radu sa SPI moramo ga programski instalirati SS logicno nula at početak prijema/prijenosa i postaviti logično jedinica nazad na kraj prenosa.

Za prijenos podataka na podređeni uređaj, potrebno je registrator pomaka MASTER (na slici, masterov pomični registar je " 8 BITNI REGISTER SHIFT") zapišite bajt prenesene informacije. Istovremeno, automatski SCKće početi da se generiše sat signala. Ovo je hardverska implementacija.

Ako nema hardverske podrške za SPI u mikrokontroleru, onda interfejs SPI se uvijek može implementirati u softver, tj. stvoriti program koji kontroliše noge kontrolera u skladu sa SP protokolom razmene.

Razlike u implementaciji SPI interfejsa

Slave mikrokola mogu različito "tumačiti" primljeni signal preko SPI, razlika može biti u sljedećim točkama:

  • u količini podataka koji se prenose ili veličina paketa, obično ovo 8 bit, ali ima još toga
  • u bitnom redu, kao prvo najznačajniji dio ili prvi najmanje značajan bit
  • By na koji nivo taktnog signala se prenose podaci?(po logičkoj jedinici (HIGH) ili logičkoj nuli (LOW))
  • By do koje ivice impulsa dolazi do sinhronizacije?(uspon ili spuštanje), ukratko nazvana "faza sinhronizacije"

kombinacija " nivo signala sata" i " faze sinhronizacije» je definisan u specifikacijama kao SPI režimi rada. Postoje samo 4th:

Mode Jačina signala (CPOL) faza (CPHA)
0 0 0
1 0 1
2 1 0
3 1 1

U rubrici " Nivo signala» 1st, znači da bit podataka, prihvaćeno rob kad nula se prenosi duž linije za sinhronizaciju, drugim riječima - podređeni uređaj čeka i ne prihvata podatke kada je uključen SCK postavljen na logički 1.

U rubrici " Faza» 1st, znači da je signal sinhronizacije određen sa padajući rub taktnog pulsa, i logično 0-l By rastuća ivica pulsa takta.

P.S. Štaviše, ako u koloni “ Nivo signala» instaliran 1st, tada će padajući i rastući front ako je prikazan na dijagramu biti “ naopačke».

Na grafikonima, podacima 4 načina rada može se prikazati na sljedeći način:

Više o principima rada SPI možete pročitati u članku

http://www.kit-e.ru/articles/interface/2009_03_53.php

Implementacija SPI na ATmega mikrokontrolerima serije AVR (ATmega328P) i "ranim" Motorola mikrokontrolerima

U mikrokontroleru ATmega328P(mikrokontroler iz Atmel AVR serije) možete kontrolisati sledeće parametri SPI:

Za konfiguraciju i kontrolu SPI interfejsa koriste se tri registra:

  • Kontrolni registar - SPCR
  • Statusni registar - SPSR
  • Registar podataka - SPDR

Pročitajte više o svakom od njih...

Kontrolni registar – « SPCR» 0x2C, adresa za snimanje 0x4C

— Logička jedinica u 7. bit(ime bita SPIE) – omogući SPI prekide(prekid će se dogoditi ako je postavljen bit za omogućavanje prekida globalnog registra SREG(7. bit)). Nakon što je prijenos bajta završen, generirat će se prekid.

— Logička jedinica u 6. bit(ime bita - SPE) - priključiti SS, MOSI, MISO I SCK na portove mikrokontrolera ATmega328P - PB2,PB3,PB4,PB5.

— Logička jedinica u 5. bit(ime bita DORD) – to će odrediti prema SPI prenijeti prvi junior rank, A zatim najstariji– “LSB” način rada. Logička nula, naprotiv, znači da se prvo prenosi najvažniji bit, a potom i najmanji bit - “MSB” mod.

— Logička jedinica u 4. bit(ime bita - MSTR) — omogućavanje načina rada domaćina, nula – omogućiti slave mod

— Logička jedinica u 3rd bit(ime bita CPOL) (polaritet signala sinhronizacije ili nivo sinhronizacije) – sinhronizacija se sprovodi prema nedostatak impulsa(logička nula) ili je signal sata u stanju pripravnosti jednak 1. Logička nula - sinhronizacija se vrši prisustvom impulsa (logičkim) ili je signal sata u stanju pripravnosti jednak 0. Na kojem frontu (pad ili uspon) se vrši sinhronizacija određuje se 2nd bit ( CPHA).

— Logička jedinica u 2. bit(ime bita CPHA) (faza sinhronizacije) – određuje da li je signal sinhronizacije određen padajućim rubom SCK, i logička nula na uzlaznoj ivici SCK. Štaviše, ako je CPOL postavljen na 1, tada se front koji pada i diže može biti prikazan „naopako” na dijagramu.

1st I 0th bit sa bitom SPI2x u registru SPSR odrediti SPI brzina podataka(ili brzina takta preko SCK). Ovi bitovi imaju značenje samo za gospodara, oni su besmisleni, jer Brzina prijema zavisi od master-ove SCK frekvencije.

Gdje fosc frekvencija sata glavnog oscilatora SPI (obično je jednaka frekvenciji takta procesora).

Statusni registar - "SPSR"(adresa u ATmega328P za čitanje 0x2D, adresa za snimanje 0x4D, ako imate drugi MK, onda možete pronaći adrese u dokumentaciji)

7th registarski bit " SPIF": SPI zastavica prekida

Bit je postavljen jedinica, Kada prijenos bajtova podaci o MOSI je završio. Ako je bit za omogućavanje SPI prekida (SPIE bit) u SPCR registru postavljen, postavljanje SPIF zastavice uzrokuje generiranje zahtjeva za prekid.

6 registarski bit " WCOL": Napišite zastavu COLlision

Bit konflikt pisanja u registar SPDR. Bit je postavljen jedinica, ako je u vrijeme prijenosa podaci su pokrenuti pokušaj pisanja V registar podataka SPDR.

- Sa 5th By 1st bit – rezervisani bitovi, njihova vrijednost je uvijek jednaka 0

0th malo " SPI2X": Dvostruki SPI brzinski bit

malo " dupla brzina prijenos podataka" Ako je bit napisan jedinica, To brzina transferi podaci udvostručeni. Koristeći kombinaciju ovog bita i 1st I 0th bit ( SPR1, SPR0) registar SPCR, odrediti brzina prenosa SPI podaci. .

Registar podataka - "SPDR"(adresa u ATmega328P za čitanje 0x2E, adresa za snimanje 0x4E, ako imate drugi MK, onda možete pronaći adrese u dokumentaciji)

Veličina registra je ista kao gore - 8 bit. Ovaj registar se koristi za prijenos i čitanje podataka putem SPI. Postavljanjem podataka u njega započinjete proces prijenosa.

Pogledajmo 3 primjera rada sa SPI interfejsom na ATmega328P u okruženjima:

- Arduino

#include bajt x=B11000000; //preneseni bitni bajt y= B00000000; //prijemni bit će biti zapisan u varijablu y void setup() (SPI.begin(); /* SPI inicijalizacija */ /* inicijalizacija u Arduinu to znači - postavite jedan u SS - postavite na SS izlaz (Slave Select ili odabir slave) - 10 pinova - postavite 1 u sljedeće bitove SPCR kontrolnog registra: u 4. bit (ime bita - MSTR) - omogućite master mod u 6. bitu (ime bita - SPE) - povežite SS, MOSI, MISO i SCK na portove PB4,PB5,PB6,PB7 (10,11,12,13 pinova u Arduinu) - konfigurirajte sljedeće izlazne pinove: SCK (Serijski sat ili signal takta) - 13 pinski MOSI (Master Out Slave In ili podaci iz master) - 11 pin Kao rezultat inicijalizacije putem SPI.begin(), konfiguracija SPI sučelja je sljedeća: - redoslijed “MSB” bitova, tj. prvo se prenosi najvažniji bit, a zatim najmanje značajna - sinhronizacija se vrši prisustvom impulsa ili taktnog signala u stanju čekanja je 0 - signal sinhronizacije je određen uzlaznom ivicom SCK (dvije tačke iznad označavaju da je SPI mod u ovom slučaju 0 ) - brzina prijenosa fosc/4 */ // NEKE SPI KOMUNIKACIONE PARAMETRE MOŽEMO PONOVNO INICIJALIZIRATI // naručiti sekvence bitova //SPI.setBitOrder(MSBFIRST); /* LSBFIRST - prvo junior, zatim stariji MSBFIRST - prvi stariji, zatim junior (podrazumevana vrijednost iz SPI.begin) */ // frekvencija razmjene podataka //SPI.setClockDivider(SPI_CLOCK_DIV4); /* je definiran kao omjer fosc prema koeficijentu, čije su moguće vrijednosti: SPI_CLOCK_DIV2 SPI_CLOCK_DIV4 SPI_CLOCK_DIV8 SPI_CLOCK_DIV16 SPI_CLOCK_DIV32 SPI_CLOCK_DIV64 SPI_CLOCK_DIV64 SPI_CLOCK_DIV64 SPI_CLOCK_DIV64 SPI_CLOCK_DIV64 SPI_CLOCK_DIV_de 0); /* SPI_MODE0 - nulti mod SPI_MODE1 - prvi mod SPI_MODE2 - drugi mod SPI_MODE3 - treći mod */ ) void loop() ( /* IMPLEMENTACIJA PRENOSA PODATAKA PREKO SPI */ digitalWrite(10, HIGH); /* moramo podesiti sami u SS 1-tsu */ y=SPI.transfer(x /* prenos bit-po-bit argumenta (bajt) i primanje odgovora od slave uređaja, prijenos se vrši dodjeljivanjem vrijednosti bajta); SPDR registru iu ovom trenutku automatski se generira signal takta */ digitalWrite(10, LOW) od nas se traži da postavimo SS na 0 */ SPI.end(); SPI sabirnica sa pinova 10,11,12,13 */ /* To jest, postavlja 0 na 6. bit (SPE) SPCR registra */ )

#include

bajt x = B11000000 ; //preneseni bit

bajt y = B00000000 ; //prijemni bit će biti zapisan u varijablu y

void setup() (

SPI. begin(); /* SPI inicijalizacija */

/* inicijalizacija u Arduinu to znači

Postavite jedinicu na SS

Postavite na SS izlaz (Slave Select ili Slave izbor) - 10 pin

Postavite sljedeće bitove SPCR kontrolnog registra na 1:

U 4. bitu (ime bita - MSTR) - omogućite glavni mod

B 6. bit (ime bita - SPE) - povezivanje

SS, MOSI, MISO i SCK

Na portove PB4,PB5,PB6,PB7

(10,11,12,13 pinova u Arduinu)

Konfigurirajte sljedeće izlazne pinove:

SCK (Serijski sat ili signal sata) - 13 pin

MOSI (Master Out Slave In ili podaci sa mastera) - 11 pin

Kao rezultat inicijalizacije putem SPI.begin()

Naša konfiguracija SPI interfejsa je sljedeća:

Redoslijed bitova je "MSB", tj. Najpre se prenosi najvažniji bit, a zatim najmanji bit

Sinhronizacija se zasniva na prisutnosti pulsa

Ili je taktni signal u stanju mirovanja 0

Sinhronizacijski signal je određen uzlaznom ivicom SCK

(dvije tačke iznad označavaju da je SPI mod u ovom slučaju 0)

Brzina prijenosa fosc/4

// NEKE SPI KOMUNIKACIONE PARAMETRE MOŽEMO PONOVNO INICIJALIZIRATI

// red bitova

//SPI.setBitOrder(MSBFIRST);

// frekvencija razmjene podataka

//SPI.setClockDivider(SPI_CLOCK_DIV4);

/* definiran kao relacija

Fosc na koeficijent čije su moguće vrijednosti:

SPI_CLOCK_DIV2

SPI_CLOCK_DIV4

SPI_CLOCK_DIV8

SPI_CLOCK_DIV16

SPI_CLOCK_DIV32

SPI_CLOCK_DIV64

SPI_CLOCK_DIV128

//SPI način rada

//SPI.setDataMode(SPI_MODE0);

SPI_MODE0 - nulti način rada

SPI_MODE1 - prvi način rada

SPI_MODE2 - drugi način rada

SPI_MODE3 - treći način rada

void loop()

/* IMPLEMENTACIJA PRENOSA PODATAKA PREKO SPI */

digitalWrite(10, HIGH); /* od nas se traži da sami instaliramo 1-tsu u SS */

y = SPI. transfer(x); /* prenosi bitni argument (bajt) i prima odgovor od podređenog uređaja

Prijenos se vrši dodjeljivanjem SPDR registru vrijednosti bajta

I u ovom trenutku automatski na SCK (13 pin)

Generiše se signal sata */

digitalWrite(10, LOW); /* od nas se traži da sami postavimo SS na 0 */

SPI. end(); /* onemogućava SPI sabirnicu sa pinova 10,11,12,13 */

/* To je postavlja 0 na bit 6 (SPE) SPCR registra */

- Atmel Studio (AVR GCC)

#include #include void init_spi() (DDRB=(1<

#include

#include

void init_spi() (

DDRB = (1<< PB0 ) | (1 << PB1 ) | (1 << PB2 ) | (0 << PB3 ) ;

//konfiguriraj pinove za SPI (SS, SCK, MOSI - izlaz, MOSI ulaz)

// SPI inicijalizacija

// SPI Tip: Master

// SPI takt: 2000,000 kHz

// Faza SPI takta: početak ciklusa

// Polaritet SPI sata: nizak

// SPI redoslijed podataka: MSB prvi

SPCR = (0<< SPIE ) | (1 << SPE ) | (0 << DORD ) | (1 << MSTR ) | (0 << CPOL ) | (0 << CPHA ) | (1 << SPR1 ) | (1 << SPR0 ) ;

Interfejsi za prijenos.

Mnoga sučelja za prijenos podataka su razvijena za prijenos podataka s jednog uređaja na drugi ili s jednog čipa na drugi. Svaki interfejs ima i pozitivne i negativne strane, tako da morate znati koja sučelja postoje, njihove prednosti i nedostatke, te koristiti pravi interfejs za prijenos podataka u datoj situaciji.

Interfejsi dolaze sa asinhronim i sinhronim prijenosom podataka. Kod sinhronog prijenosa podataka, signal sata se prenosi istovremeno s podacima, omogućavajući prijemniku i predajniku da se sinhroniziraju. Primjer takvog protokola je SPI interfejs.

U asinhronom prijenosu podataka nema taktnog signala. U takvim linijama postoji opasnost od neusklađenosti prijemnika i odašiljača, zbog čega daljnji podaci neće biti ispravno primljeni. Da bi se ovo spriječilo, asinhroni interfejsi izvode periodičnu sinhronizaciju duž linija podataka. Prednost ovakvih interfejsa je manji broj provodnika potrebnih za prenos.

Pogledajmo pobliže nekoliko najpopularnijih interfejsa.

USART interfejs.

USART interfejs je serijski univerzalni sinhroni-asinhroni primopredajnik. Podaci se prenose na USART u redovnim intervalima. Ovaj vremenski period je određen navedenom USART brzinom i specificiran je u baudu (za znakove koji mogu uzeti 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, 9216.

Pored bitova podataka, USART automatski ubacuje oznake za sinhronizaciju u tok, takozvane startne i stop bitove. Po prijemu, ovi dodatni bitovi se uklanjaju. Tipično, početni i stop bitovi odvajaju jedan bajt informacija (8 bitova), ali postoje USART implementacije koje omogućavaju prenos 5, 6, 7, 8 ili 9 bita. Bitovi razdvojeni signalima za početak i zaustavljanje su minimalno slanje. USART vam omogućava da ubacite dva stop bita tokom prenosa kako biste smanjili verovatnoću desinhronizacije prijemnika i predajnika u gustom saobraćaju. Prijemnik ignoriše 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čka “1”. Početni bit je uvijek logička "0", tako da USART prijemnik čeka prijelaz iz "1" u "0" i od njega broji vremenski interval od polovine trajanja bita (sredina prijenosa startnog bita) . Ako je u ovom trenutku unos još uvijek “0”, tada počinje proces prijema minimalne pošiljke. Da bi to učinio, prijemnik broji 9 bitova trajanja u nizu (za 8-bitne podatke) i bilježi ulazno stanje u svakom trenutku. Prvih 8 vrijednosti su primljeni podaci, zadnja vrijednost je testna vrijednost (stop bit). Vrijednost stop bita je uvijek “1” ako je stvarna primljena vrijednost drugačija, USART bilježi grešku.

Za formiranje vremenskih intervala, USART-ovi za odašiljanje i prijem imaju izvor preciznog vremena (clocking). Preciznost ovog izvora mora biti takva da zbir grešaka (prijemnika i predajnika) u postavljanju vremenskog intervala od početka startnog impulsa do sredine zaustavnog impulsa ne prelazi polovinu (ili još bolje, najmanje četvrtina) intervala bita. Za 8-bitnu poruku 0,5/9,5 = 5% (u stvarnosti ne više od 3%). Pošto je ovo zbir grešaka prijemnika i predajnika plus moguće izobličenje signala na liniji, preporučena tolerancija za tačnost USART takta nije veća od 1,5%.

Budući da bitovi takta zauzimaju dio bitstreama, rezultirajuća propusnost UART-a nije jednaka brzini veze. Na primjer, za 8-bitni prijenos u 8-N-1 formatu, bitovi takta zauzimaju 20% toka, što za fizičku brzinu od 115.200 baudova daje brzinu prijenosa podataka od 92.160 bps ili 11.520 bajtova/s.

Paritet

USART protokol ima mogućnost automatskog praćenja integriteta podataka pomoću metode pariteta bitova. Kada je ova funkcija omogućena, posljednji bit podataka ("paritetni bit") je uvijek 1 ili 0, tako da je broj jedinica u bajtu uvijek paran.

Kontrola protoka

U starim danima, USART uređaji su mogli biti toliko spori da nisu mogli pratiti dolazni tok podataka. Da bi se riješio ovaj problem, USART moduli su dobili odvojene izlaze i ulaze za kontrolu protoka. Kada je ulazni bafer bio pun, logika prijemnog USART-a je postavila nivo inhibicije na odgovarajući izlaz, a odašiljajući USART je suspendovao prenos. Kasnije je kontrola protoka dodijeljena komunikacijskim protokolima, a potreba za odvojenim linijama za kontrolu protoka postepeno je nestala.

Fizička implementacija.

USART je protokol razmjene, tj. određuje način formiranja bita, parametre prenosa bajtova, brzinu prenosa 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 +5V i 0V nivoima. Za prijenos podataka na velike udaljenosti i između uređaja koriste se drugi fizički naponski nivoi i standardi, kao što su: strujna petlja (4-20 mA), RS-232 (COM port), RS-485 i sl.

Za pretvaranje nivoa "kontrolora" od 0-5V u "standardne" nivoe, postoji ogroman broj specijalizovanih mikro kola, na primer ADM202 za RS-232.

Serijski interfejs SPI

Naziv SPI je skraćenica za "Serial Peripheral Bus", što odražava njegovu svrhu - sabirnicu za povezivanje vanjskih uređaja. SPI sabirnica je organizovana po principu master-slave. Master sabirnice je obično mikrokontroler, ali može biti i programabilna logika, DSP kontroler ili ASIC. Uređaji povezani na master su slave. Njihovu ulogu igraju razne vrste mikrokola, uklj. uređaji za skladištenje podataka (EEPROM, Flash memorija, SRAM), sat realnog vremena (RTC), ADC/DAC, digitalni potenciometri, specijalizovani kontroleri, itd.

Glavni građevni blok SPI interfejsa je konvencionalni registar pomeranja, čija sinhronizacija i ulazni/izlazni signali bitova formiraju signale interfejsa. Stoga je ispravnije nazvati SPI protokol ne protokolom za prijenos podataka, već protokolom za razmjenu podataka između dva pomična registra, od kojih svaki istovremeno obavlja i funkciju prijemnika i predajnika. Preduslov za prenos podataka na SPI magistrali je generisanje sinhronizacionog signala magistrale. Samo vođa ima pravo generirati ovaj signal i rad roba u potpunosti ovisi o tome.

Veza.

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

Najjednostavnija veza, koja uključuje samo dva mikrokola, prikazana je na slici 7.2. Ovdje master magistrale prenosi podatke duž MOSI linije sinhrono sa SCLK signalom koji generira, a slave hvata prenesene bitove podataka na određenim rubovima primljenog signala sinhronizacije. Istovremeno, slave šalje svoj paket podataka. Predstavljeno kolo se može pojednostaviti eliminacijom MISO linije ako korišteni slave IC ne omogućava prijenos podataka odgovora ili nema potrebe za tim. Jednosmjerni prijenos podataka može se naći u čipovima kao što su DAC, digitalni potenciometri, programabilna pojačala i drajveri. Dakle, razmatrana opcija za povezivanje slave IC-a zahtijeva 3 ili 4 komunikacijske linije.

Da bi slave IC primao i prenosio podatke, osim što ima signal takta, SS linija također mora biti nisko postavljena. U suprotnom, slave IC će biti neaktivan. Kada se koristi samo jedan eksterni IC, može biti primamljivo da se eliminiše SS linija tako što će selektovani ulaz slave IC-a postaviti na teško nisko. Ovo rješenje je krajnje nepoželjno i može dovesti do kvarova ili čak nemogućnosti prijenosa podataka, jer Ulaz za odabir čipa služi za resetiranje IC-a u njegovo početno stanje i ponekad pokreće izlaz prvog bita podataka.

Ako je potrebno povezati nekoliko mikrokola na SPI sabirnicu, koristi se ili nezavisna (paralelna) veza (slika 7.3) ili kaskadna (serijska) veza (slika 7.4). Nezavisna veza je češća, jer postiže se korištenjem bilo kojeg SPI kompatibilnog čipa. Ovdje su svi signali, osim odabira mikrokola, povezani paralelno, a master sabirnice, pomjeranjem jednog ili drugog SS signala u nisko stanje, određuje s kojim slave IC će razmjenjivati ​​podatke. Glavni nedostatak takve veze je potreba za dodatnim linijama za adresiranje slave čipova (ukupan broj komunikacionih linija je 3+n, gdje je n broj slave čipova).

Ako nema dovoljno nogu mikrokontrolera, možete koristiti demultiplekserski čip. Demultiplekser povezuje jedan ulazni signal sa jednim od izlaznih signala, u zavisnosti od koda na kontrolnim pinovima. Slika 7.4 prikazuje dijagram povezivanja za demultiplekser. SS signal se dovodi na njegov ulaz, koji uzima vrijednost jednaku 0 ako je potrebno odabrati jedan od mikro krugova. Broj potrebnog mikrokola u binarnom kodu se isporučuje na Am-A0 noge. Ovo vam omogućava da smanjite broj nogu koje se koriste u mikrokontroleru na m=log 2 n. Gdje je n broj podređenih čipova. One. za povezivanje 128 uređaja potrebno je 8 pinova mikrokontrolera. Jedan za podešavanje signala za omogućavanje i 7 za podešavanje broja čipa koji će se uključiti. Treba napomenuti da mora postojati logičan na nepovezanim nogama demultipleksera. Inače se koristi pretvarač signala koji pretvara logičku nulu u logičku.

Kaskadno prebacivanje nema ovog nedostatka, jer ovdje, nekoliko čipova formira jedan veliki registar pomaka. Da bi se to postiglo, izlaz podataka za prijenos jednog IC-a je povezan s ulazom za prijem podataka drugog, kao što je prikazano na slici 3. Ulazi za odabir čipa ovdje su povezani paralelno i, na taj način, ukupan broj komunikacijskih linija ostaje jednak do 4. Međutim, upotreba kaskadne veze je moguća samo ako je njena podrška naznačena u dokumentaciji za korišćene čipove. Da biste saznali, važno je znati da se takva veza na engleskom naziva "daisy-chaining".

Protokol prijenosa

Protokol prijenosa preko SPI interfejsa je u suštini identičan logici registra pomaka (slika 7.6), koji se sastoji od izvođenja operacije pomaka i, shodno tome, bitova unosa i izlaza podataka na određenim rubovima sinkronizacijskog signala. Podešavanje podataka tokom prenosa i uzorkovanje tokom prijema se uvek vrši na suprotnim ivicama sata. Ovo je neophodno kako bi se osiguralo da su podaci uzorkovani nakon što su pouzdano utvrđeni. Ako uzmemo u obzir da prva ivica u ciklusu prenosa može biti rastuća ili opadajuća ivica, tada postoje četiri moguće logičke opcije za rad SPI interfejsa. Ove opcije se nazivaju SPI načini rada i opisuju ih dva parametra:

· CPOL - početni nivo signala sinhronizacije (ako je CPOL=0, tada linija sinhronizacije pre početka ciklusa prenosa i nakon njegovog završetka ima nizak nivo (tj. prva ivica raste, a poslednja opada), inače, ako je CPOL=1, - visoko (tj. prvi front pada, a zadnji raste));

· CPHA - faza sinhronizacije; Ovaj parametar određuje redoslijed u kojem se podaci instaliraju i preuzimaju. Ako je CPHA=0, tada će se podaci uzorkovati na rastućoj ivici ciklusa takta, a zatim će se podaci postaviti na padajućoj ivici. Ako je CPHA=1, tada će se instalacija podataka izvršiti na rastućoj ivici u ciklusu sinhronizacije, a uzorkovanje će se izvršiti na padajućoj ivici.

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

Glavni i slave čipovi koji rade u različitim SPI modovima su nekompatibilni, stoga je prije odabira slave čipova važno razjasniti koje modove podržava master magistrale. 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 povezati bilo koji slave SPI čip (odnosi se samo na nezavisnu opciju povezivanja). Osim toga, SPI protokol u bilo kojem od načina rada se lako implementira u softver.

RS-485 interfejs

RS-485 interfejs (drugo ime je EIA/TIA-485) je jedan od najčešćih standarda fizičkog komunikacionog sloja. Fizički sloj je komunikacijski kanal i metoda prijenosa signala (sloj 1 modela interkonekcije OSI otvorenih sistema).

Mreža izgrađena na RS-485 interfejsu sastoji se od primopredajnika povezanih pomoću upredene parice - dvije upredene žice. RS-485 interfejs je zasnovan na principu diferencijalnog (uravnoteženog) prenosa podataka. Njegova suština je prijenos jednog signala preko dvije žice. Štaviše, jedna žica (uslovno A) nosi originalni signal, a druga (uslovno B) nosi njegovu inverznu kopiju. Drugim riječima, ako postoji "1" na jednoj žici, onda "0" na drugoj i obrnuto. Dakle, uvijek postoji razlika potencijala između dvije žice upredene parice: na “1” je pozitivna, na “0” negativna (slika 7.9).

Ta razlika potencijala je ta koja prenosi signal. Ovaj način prijenosa pruža visoku otpornost na smetnje uobičajenog načina rada. Smetnje zajedničkog moda su smetnje koje podjednako utječu 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, onda smetnje na ovoj žici mogu izobličiti signal u odnosu na zajedničku (zemlju) koja dobro apsorbira smetnje. Osim toga, razlika potencijala zemlje će pasti preko otpora duge zajedničke žice - dodatni izvor izobličenja. A kod diferencijalnog prijenosa ne dolazi do izobličenja. U stvari, ako dvije žice leže blizu jedna drugoj, pa čak i isprepletene, onda je prijem na obje žice isti. Potencijal u obje jednako opterećene žice mijenja se podjednako, dok informativna razlika potencijala ostaje nepromijenjena.

Hardverska implementacija RS485 interfejsa.

Hardverska implementacija interfejsa - primopredajni čipovi sa diferencijalnim ulazima/izlazima (do linije) i digitalnim portovima (do UART portova kontrolera). Postoje dvije opcije za ovaj interfejs: RS-422 i RS-485.

RS-422 je full duplex interfejs. Prijem i prijenos se odvijaju preko dva odvojena para žica. Na svakom paru žica može biti samo jedan predajnik.

RS-485 je poludupleksni interfejs. Prijem i prijenos se odvijaju preko jednog para žica sa vremenskim razmakom. U mreži može biti mnogo predajnika, budući da se mogu isključiti u načinu prijema (slika 7.10).

Objašnjenje simbola na slici 7.10

D (vozač) - predajnik;
R (prijemnik) - prijemnik;
DI (driver input) - digitalni ulaz predajnika;
RO (receiver output) - digitalni izlaz prijemnika;
DE (driver enable) - dozvola za rad sa predajnikom;
RE (receiver enable) - dozvola za rad prijemnika;
A - direktni diferencijalni ulaz/izlaz;
B - inverzni diferencijalni ulaz/izlaz;
Y - direktni diferencijalni izlaz (RS-422);
Z - inverzni diferencijalni izlaz (RS-422).

Pogledajmo bliže RS-485 primopredajnik. Digitalni izlaz prijemnika (RO) povezan je sa UART portom prijemnika (RX). Digitalni ulaz predajnika (DI) na UART port predajnika (TX). Pošto su prijemnik i predajnik povezani na diferencijalnoj strani, predajnik mora biti isključen tokom prijema, a prijemnik mora biti isključen tokom prenosa. U tu svrhu se koriste kontrolni ulazi - dozvola prijemnika (RE) i dozvola odašiljača (DE). Pošto je RE ulaz inverzan, može se spojiti na DE i prebaciti prijemnik i predajnik jednim signalom sa bilo kojeg porta kontrolera. Na nivou "0" - rad za prijem, na "1" - za prenos (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 primopredajnih čipova u dokumentaciju upisuju zajamčeni raspon praga za prepoznavanje signala. Obično su ovi pragovi ±200 mV. Odnosno, kada je UAB > +200 mV - prijemnik detektuje "1" kada je UAB< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

Svi uređaji su povezani na jedan kabel upredene parice na isti način: direktni izlazi (A) na jednu žicu, inverzni izlazi (B) na drugu.

Ulazna impedansa prijemnika na strani linije (RAB) je tipično 12KΩ. Budući da snaga predajnika nije neograničena, ovo stvara ograničenje broja prijemnika povezanih na liniju. Prema RS-485 specifikaciji, uzimajući u obzir završne otpornike, predajnik može pokretati do 32 prijemnika. Međutim, postoji veliki broj mikro krugova sa povećanom ulaznom impedancijom, što vam omogućava da povežete 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 povezati više uređaja nego što nosi kapacitet predajnika, koriste se posebni repetitori.

I2C interfejs.

Ovaj interfejs je predložio Philips, koji ga je koristio za organizaciju komunikacije između čipova u svojim televizorima. I 2 C (skraćenica za Inter-Integrated Circuit) je dvosmjerna asinhrona serijska magistrala. Fizički, I 2 C sabirnica se sastoji od dvije signalne linije, od kojih je jedna (SCL) namijenjena za prijenos takt signala, a druga (SDA) za razmjenu podataka. Za upravljanje vodovima koriste se izlazni stupnjevi sa otvorenim kolektorom, pa se sabirni vodovi moraju povezati na +5 V izvor napajanja preko otpornika otpora 1...10 kOhm, u zavisnosti od fizičke dužine vodova i brzinu prenosa podataka. Dužina veznih linija u standardnom režimu može doseći 2 metra, brzina prijenosa podataka je 100 kbit/s.

Svi pretplatnici autobusa podijeljeni su u dvije klase - “Leader” i “Slave”. Glavni uređaj generiše signal takta (SCL). Može nezavisno pristupiti magistrali i adresirati bilo koji slave uređaj u svrhu prenosa ili primanja informacija. Svi slave uređaji „slušaju“ sabirnicu kako bi otkrili svoju adresu i nakon što je prepoznaju, izvode propisanu operaciju. Osim toga, moguć je i tzv. „MultiMaster“ način rada, kada je na sabirnici instalirano više master uređaja, koji ili zajednički dijele zajedničke slave uređaje, ili naizmenično djeluju kao masteri kada sami iniciraju razmjenu informacija, ili kao slave kada čekaju pristup sa drugog glavnog uređaja. "MultiMaster" mod zahtijeva stalno praćenje i prepoznavanje sukoba. S tim u vezi, ovaj način je teže implementirati (što znači softverska implementacija) i, kao rezultat toga, rjeđe se koristi u stvarnim proizvodima.

U početnom trenutku vremena - u standby modu - oba voda SCL i SDA su u jednom logičkom stanju (tranzistor izlaznog stepena otvorenog kolektora je zatvoren). U načinu prijenosa (Slika 7.12), bit podataka SDA se taktira uzlaznom ivicom SCL-a. Informacije na SDA liniji se mijenjaju kada je SCL linija u nultom stanju. Slave 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 sa prijenosom informacija.

Za sinhronizaciju paketa sabirnice I 2 C razlikuju se dva uslova - “START” i “STOP”, ograničavajući početak i kraj informacijskog paketa (slika 7.13). Za kodiranje ovih uvjeta koristi se promjena stanja SDA linije sa jednim stanjem SCL linije, što je neprihvatljivo prilikom prijenosa podataka. Uslov "START" se formira kada se na SDA liniji pojavi silazna ivica, kada je SCL linija u jednom stanju, i obrnuto, "STOP" uslov se formira kada se na SDA liniji pojavi rastući rub kada je SCL linija je u jednom stanju.

Prijenos podataka počinje na prvoj rastućoj ivici na SCL liniji, koja taktira najznačajniji bit prvog informacionog bajta. Svaki informacioni bajt (8 bitova) sadrži 9 perioda takta SCL linije. U devetom ciklusu, prijemni uređaj izdaje potvrdu (ACK) - padajući rub koji označava prijem podataka. Treba napomenuti da svaki pretplatnik sabirnice, i master i slave, može u različito vrijeme biti i odašiljač i prijemnik i, u skladu s načinom rada, mora ili primiti ili izdati ACK signal, čiji se odsustvo tumači kao greška.

Za početak operacije razmjene podataka, glavni uređaj izdaje uvjet "START" na sabirnici. Nakon uslova “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 master-a do slave-a (slika 7.14a), a 1 znači čitanje sa slave-a (slika 7.14b). Svi bitovi na I 2 C sabirnici se prenose redom od visokog ka nižem, odnosno 7. bit se prenosi prvi, 0-ti zadnji. Adresu može pratiti jedan ili više informacionih bajtova (u smjeru određenom zastavicom R/W), čije bitove taktira master na SCL magistrali.

Prilikom izvođenja operacije čitanja, domaćin mora potvrditi ACK pročitani bajt ako želi pročitati sljedeći bajt, a ne izdati ACK ako se sprema da završi čitanje paketa (vidi sliku 7.14b).

Dozvoljeno je nastavljanje adrese podređenog uređaja više puta u jednom ciklusu prenosa, odnosno prenošenje ponovljenog stanja „START“ bez prethodnog „STOP“ uslova (slika 7.14c).

Potrebno je napomenuti neke karakteristike memorijskih čipova koji rade preko I 2 C sučelja i procedure za razmjenu podataka s njima. Prvo, stalna memorija podataka ovih mikrokola je podijeljena na memorijske stranice, tako da kada se upiše bajt, cijela stranica se prvo kopira u interni RAM mikrokola, gdje se mijenja željena ćelija. Nakon toga, stara stranica se briše i na njeno mjesto se upisuje nova. Još jedna karakteristika je da četiri najznačajnija bita slave adrese moraju uvijek biti jednaka 1010. Ovaj zahtjev reguliše sam Philips.

1-Wire sabirnica koristi samo jedan provodnik za komunikaciju i napajanje. Način komunikacije je asinhroni i poludupleksni, koji striktno slijedi master-slave obrazac. Jedan ili više slave uređaja mogu biti povezani na istu magistralu u isto vrijeme. Na jednu magistralu može se povezati samo jedan glavni uređaj.

Stanje mirovanja sabirnice odgovara visokom nivou, koji se generiše pomoću pull-up otpornika. Vrijednost pull-up otpornika data je u dokumentaciji za slave IC. Svi čipovi povezani na magistralu moraju biti u stanju proizvesti niski nivo. Ako izlaz mikrokontrolera ne podržava tri stanja, tada je potrebno osigurati drajver koji ima otvoreni kolektor ili otvoreni drejn izlaz

Prijenos signala preko 1-Wire magistrale podijeljen je na vremenske intervale u trajanju od 60 µs. Samo jedan bit podataka se prenosi po vremenskom slotu. Dopušteno je da slave uređaji imaju značajne razlike u odnosu na nominalno vremensko kašnjenje. Međutim, ovo zahtijeva preciznije mjerenje vremena od strane vođe kako bi se osigurala ispravna komunikacija sa podređenima koji imaju različite vremenske baze.

Osnovni sabirni signali.

Master pokreće svaku komunikaciju na nivou bita. To znači da prijenos svakog bita, bez obzira na smjer, mora inicirati master. Ovo se postiže postavljanjem niskog nivoa magistrale, čime se sinhronizuje logika svih ostalih uređaja. Postoji 5 glavnih komandi za komunikaciju preko 1-Wire sabirnice: „Napiši dnevnik. 1”, “Pisanje dnevnika. 0”, “Pročitaj”, “Resetuj” i “Prisutnost”.

Signal „Napiši dnevnik. 1"

Signal „Napiši dnevnik. 1” je prikazano na sl. 7.15. Master postavlja niski nivo za 1...15 µs. Zatim otpušta sabirnicu za ostatak vremenskog slota.

Rice. 7.15 – Signal „Napiši dnevnik. 1"

Signal „Napiši dnevnik. 0"

Signal „Napiši dnevnik. 0” je prikazano na slici 7.16. Master generiše niski nivo za najmanje 60 µs, ali ne duže od 120 µs.

Slika 7.16 – Signal „Pisanje dnevnika. 0"

Signal za čitanje

Signal “Read” je prikazan na Sl. 7.17. Master postavlja niski nivo za 1...15 µs. Slave tada drži sabirnicu nisko ako želi prenijeti zapisnik. 0. Ako je potrebno prenijeti dnevnik. 1, onda jednostavno otpušta liniju. Skeniranje sabirnice mora se izvršiti unutar 15 µs od niskog pada sabirnice. Kada se gleda sa strane mastera, signal “Read” je, u suštini, signal “Write log”. 1". Stvarno unutrašnje stanje slave-a će biti određeno signalom “Record log”. 1" ili "Čitanje".

Slika 7.17 – Signal „Čitanje“.

Reset/signal prisutnosti

Signali “Reset” i “Presence” prikazani su na slici 7.18. Imajte na umu da su vremenski intervali impulsa različiti. Master povlači nisko za 8 vremenskih slotova (480 µs), a zatim otpušta sabirnicu. Ovaj dugi period niskog stanja naziva se signal "Reset".

Ako je slave prisutan na sabirnici, on mora, u roku od 60 µs nakon što master pusti sabirnicu, postaviti niski nivo na najmanje 60 µs. Ovaj odgovor se zove “Prisutnost”. Ako takav signal nije detektiran, master mora pretpostaviti da nema uređaja povezanih na sabirnicu i da nije moguća daljnja komunikacija.

USB (Universal serial bus) je razvijen za brzo povezivanje eksternih uređaja sa personalnim računarom i zatim pronalaženje i instaliranje potrebnog softvera. Uređaji male snage se napajaju direktno preko interfejsa.

USB standard podrazumijeva prisustvo samo jednog glavnog (host) uređaja na mreži. Štaviše, standard podržava do 127 slave uređaja na mreži. Da bi se napravila razlika između master i slave uređaja, razvijeni su različiti tipovi konektora (slika 7.19): Tip A za master i Tip B za slave. Prihvaćeno je da je napon od 5V prisutan samo na konektoru tipa A, koji je glavni konektor. Ostali uređaji se napajaju direktno iz njega.

USB standard koristi 4 zaštićene žice, od kojih dvije prenose snagu (+5v & GND) (slika 7.19 i tabela 7.2). Druga dva predstavljaju diferencijalne signale podataka upredenog para. Korištena shema kodiranja NRZI(Non Return to Zero Invert) za prijenos podataka sa poljem za sinhronizaciju za sinhronizaciju glavnog i podređenog sata.

USB 2.0 standard uveo je On-The-Go (OTG) standard, koji je uveo Host Negotiation Protocol, koji omogućava dva USB uređaja da se dogovore o tome ko će biti glavni. Ovo je predviđeno i ograničeno na pojedinačne veze od tačke do tačke, kao što je mobilni telefon sa ličnim računarom.

USB podržava „hot“ (plug’n’play) vezu sa dinamički učitanim i neučitanim drajverima. Korisnik jednostavno utakne uređaj i na taj način ga poveže na magistralu. Host detektuje vezu, provjerava novoumetnuti uređaj i učitava odgovarajući drajver, označavajući trenutak učitavanja pješčanim satom na ekranu (ako je drajver za USB uređaj već instaliran na sistemu). Krajnjeg korisnika nije briga za raskid ili IRQ(prekidi) i adrese porta, niti o ponovnom pokretanju računara (nije potrebno ponovno pokretanje). Kada korisnik završi sa USB uređajem, jednostavno ga ukloni (ili iskopča kabl), domaćin će detektovati odsustvo uređaja i automatski ukloniti drajver.

SB verzija 1.1 podržava dvije brzine - punu brzinu sa brzinom od 12 Mbits/s i low speed mod sa brzinom od 1,5 Mbits/s. Režim od 1,5 Mbits/s je sporiji i manje osjetljiv na EMI (smetnje), što smanjuje cijenu feritnih perli i smanjuje zahtjeve za kvalitetom komponenti.

Kabl sabirnice pune brzine je kabl sa upredenom paricom, zaštićen oklopom, a može se koristiti i za rad pri malim brzinama. Kabel za rad samo pri minimalnoj brzini (na primjer, za povezivanje miša) može biti bilo koji i neoklopljen.

USB 2.0 standard uvodi način rada velike brzine sa brzinom prijenosa podataka od 480 Mbits/s.

Prijenos podataka.

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

A) potpišite paket (paket tokena) opisuje tip i pravac prenosa podataka, adresu uređaja i serijski broj krajnje tačke (CT je adresabilni deo USB uređaja); Postoji nekoliko vrsta paketa funkcija: IN, OUT, SOF, POSTAVITI;

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

B) paket odobrenja (paket rukovanja) namijenjen je za izvještavanje o rezultatima prijenosa podataka; Postoji nekoliko vrsta paketa koordinacije: ACK, N.A.K., STALL.

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

Prvi paket, takozvani token, generiše glavni uređaj da opiše tip podataka koji se prenose, operaciju prenosa (čitanje ili pisanje), adresu uređaja i krajnju tačku. Sljedeći koji se obično prenosi 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 tačka zaustavljena ili nedostupna za prihvatanje podataka.

Krajnje tačke u USB standardu su izvori i ponori podataka. Svi uređaji moraju podržavati krajnju tačku 0. Ovo je krajnja tačka koja prihvata sve zahtjeve za kontrolu i status tokom nabrajanja (zahtjev za rukovanje za određivanje tipa priključenog uređaja) i sve dok uređaj ostaje operativan na magistrali.

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

Upravljački program uređaja prenosi do krajnje točke glavnog uređaja EP1. Jer Ovaj uređaj je glavni, tada podaci idu u OUT bafer EP1. U ovom slučaju, šalje se OUT token, koji pokazuje da su podaci spremni za slanje. Nakon što je primio ovaj token, slave uređaj može čitati podatke iz OUT bafera.

Ako slave uređaj treba da prenese podatke na master, on ih stavlja u IN bafer. Ovaj međuspremnik će zadržati podatke sve dok master ne pošalje IN token tražeći podatke od krajnje točke. Svi baferi krajnje tačke su imenovani u odnosu na master, tj. Izlazni bafer slave uređaja naziva se IN jer to je ulazni bafer za glavni uređaj.

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

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

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 slati bilo koju vrstu podataka kroz stream cijevi i oporaviti podatke na drugom kraju. Tokovi podataka su sekvencijalni i imaju unaprijed određen smjer - IN ili OUT. Protočne cijevi podržavaju masovni, izohron i prekidni prijenos. Protočnim cijevima se može upravljati bilo s hosta ili sa uređaja.

B) Message Pipes imaju unapred definisan USB format. Oni su pod kontrolom hosta, inicirani su zahtjevom poslanim od hosta. Podaci se šalju u željenom smjeru navedenom u zahtjevu. Prema tome, cijevi za poruke omogućavaju prijenos podataka u oba smjera, ali podržavaju samo kontrolne prijenose.

USB standard opisuje četiri vrste prijenosa podataka:

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

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

B) Prekini prosljeđivanje (iterrupt transfer) se koristi za prijenos relativno male količine informacija, za što je važan njihov pravovremeni prijenos. Ima ograničeno trajanje i veći prioritet u odnosu na druge vrste transfera.

D) Izohrono prosleđivanje (izohroni transfer) se također naziva strimovanje u realnom vremenu. Informacije koje se prenose u takvom prijenosu zahtijevaju skalu u stvarnom vremenu tokom svog kreiranja, prijenosa i prijema.

Streaming transferi karakteriziran zajamčenim prijenosom podataka bez grešaka između hosta i funkcije otkrivanjem grešaka tokom prijenosa i ponovnim zahtjevom za informacijama. Kada host postane spreman za primanje podataka iz funkcije, šalje funkciji paket zastavica IN-plasticna kesa. Kao odgovor na to, funkcija u fazi prijenosa podataka prenosi paket podataka na host ili, ako on

Sa ocjenama od 10 Ohm do 1 MOhm);

  • spojne žice (na primjer, ovo je dobar set);
  • personalni računar sa razvojnim okruženjem Arduino IDE.
  • 1 Opis serije SPI interfejs

    SPI - serijski periferni interfejs ili "serijski periferni interfejs" je sinhroni protokol za prijenos podataka za uparivanje glavni uređaj With periferni uređaji (Slave). Glavni uređaj je često mikrokontroler. Komunikacija između uređaja odvija se preko četiri žice, zbog čega se SPI ponekad naziva "četvorožičnim sučeljem". Ovo su gume:

    Postoje četiri načina prijenosa podataka ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), uzrokovano kombinacijom polariteta taktnih impulsa (radimo na VISOKOM ili NISKOM nivou), Polaritet sata, CPOL i faza taktnih impulsa (sinhronizacija na rastućoj ili silaznoj ivici impulsa takta), Faza sata, CPHA.

    Slika objašnjava ovu tabelu.

    SPI sučelje pruža nekoliko opcija za povezivanje slave uređaja: nezavisni I kaskada. Kada je povezan nezavisno na SPI magistralu, glavni uređaj pristupa svakom slave uređaju pojedinačno. Kod kaskadne veze, slave uređaji rade jedan po jedan, kao u kaskadi.


    Vrste povezivanja uređaja za rad preko SPI interfejsa: nezavisno i kaskadno

    2 Implementacija SPI interfejsa na Arduino porodičnim pločama

    U Arduinu, sabirnice SPI interfejsa se nalaze na određenim portovima. Svaka ploča ima svoj vlastiti raspored pinova. Radi praktičnosti, zaključci su duplirani i također stavljeni na zasebno ICSP konektor(U serijskom programiranju kola, programiranje uređaja uključenog u kolo pomoću serijskog protokola). Imajte na umu da ICSP konektor nema slave izbor pina - 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 Biblioteka za posao sa SPI interfejsom

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

    Da biste započeli korištenje SPI protokola, morate postaviti postavke, a zatim inicijalizirati protokol koristeći proceduru SPI.beginTransaction(). To možete učiniti pomoću jednog uputstva: 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 (najznačajniji bit), u SPI_MODE0 modu.

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

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

    Nakon transfera vraćamo SS u stanje HIGH.


    Rad sa protokolom se završava naredbom SPI.endTransaction().

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

    4 Povezivanje registra pomaka na Arduino

    Razmotrimo praktičnu primenu SPI interfejsa. Upalit ćemo LED diode kontroliranjem 8-bitnog registra pomaka preko SPI magistrale. Povežimo se na Arduino pomični registar 74HC595. Na svaki od 8 izlaza registra spojit ćemo LED s nominalnom vrijednošću od 220 Ohma preko ograničavajućeg otpornika. Dijagram je prikazan na slici.


    5 Skica za upravljanje pomačnim registrom preko SPI interfejsa

    Hajde da napišemo ovakvu skicu.

    #include const int pinSelect = 8; // registracija odabir pin void setup() ( SPI.begin(); // inicijalizacija SPI sučelja pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // odabir podređenih uređaja (registracija) SPI.transfer(0); // brisanje sadržaja registra digitalWrite(pinSelect, HIGH); // kraj prijenosa Serial.begin(9600); } void loop() ( za (int i=0; i)

    Prvo, spojimo SPI biblioteku i inicijaliziramo SPI interfejs. Definirajmo pin 8 kao pin za odabir SS slave-a. Očistimo pomakni registar tako što ćemo mu poslati vrijednost "0". Inicijalizirajte serijski port.

    Da biste upalili određenu LED diodu pomoću registra pomaka, morate primijeniti 8-bitni broj na njegov ulaz. Na primjer, da bi prva LED dioda zasvijetlila, isporučujemo binarni broj 00000001, za drugu - 00000010, za treću - 00000100, itd. Ovi binarni brojevi, kada se konvertuju u decimalni brojevni sistem, formiraju sledeći niz: 1, 2, 4, 8, 16, 32, 64, 128 i predstavljaju stepen dvojke od 0 do 7.

    Shodno tome, u ciklusu petlja() Na osnovu broja LED dioda preračunavamo od 0 do 7. Funkcija snaga (osnova, stepen) Podiže 2 na potenciju brojača petlje. Mikrokontroleri ne rade baš precizno sa brojevima tipa "double", pa koristimo funkciju zaokruživanja da konvertujemo rezultat u ceo broj okruglo (). I rezultirajući broj prenosimo u registar pomaka. Radi jasnoće, monitor serijskog porta prikazuje vrijednosti dobijene tokom ove operacije: Jedinica "trči" kroz pražnjenja - LED diode svijetle u talasu.

    6 "Running Wave" od LED dioda

    LED diode svetle jedna po jedna, a mi posmatramo trčeći „talas“ svetala. Upravljanje LED diodama se vrši pomoću pomačnog registra na koji smo se povezali preko SPI interfejsa. Kao rezultat, samo 3 Arduino pina se koriste za kontrolu 8 LED dioda. Kada bismo LED diode povezivali direktno na Arduino digitalne portove, morali bismo koristiti poseban port za svaki LED.

    Proučavali smo najjednostavniji primjer rada Arduina sa SPI magistralom. Detaljnije ćemo razmotriti rad nekoliko smjenskih registara s nezavisnim i kaskadnim vezama u posebnom članku.