Mikrovaldiklių sąsajos I2C, SPI, USART

Mikrovaldiklių sąsajos I2C, SPI, USART

Turinys

1 I2C 1

Pranešimo protokolai  2

2 USART 5

USART galimybės 6

Duomenų perdavimas 7

3 SPI 8

Duomenų perdavimas 8

Protokolų palyginimas 9

Išvados 10

Literatūros sąrašas 11

1 I2C

I2C angliškai (Inter-integrated Circuit). Šis protokolas leidžia sujungti mažesnės spartos mikroptocesorius ir kontrolerius nedideliais atstumais. Šio protokolo komunikacijai tarp įrenginių reikalingos dvi bekryptės linijos pav.1[1] . Dažniausiai naudojamos įtampos yra: 5v, 3.3V. Pav1 pavaizduotas valdantysis įrenginys (angl Master) ir keli valdomi įrenginiai (angl. Slave). Visi įrenginiai sujungiami nuosekliai prie duomenų (SDA) ir laiko linijos (SCL).

"http://www.cs.fsu.edu/~baker/devices/notes/graphics/i2cbus3.gif

Pav.1 paprastoji I2c jungimo schema.[2]

Pajungimas

I2C sudaro dvi signalų linijos: SCL (Serial Clock Line) ir SDA (Serial Data Line). SCL yra laikrodžio signalas, o SDA yra duomenų signalas. SCL visada generuojamas valdančiojo prietaiso. Kai kurie valdantieji įtaisai gali priverstinai pakeisti SCL lygį į žemą taip pristabdydami valdančiojo prietaiso duomenų siuntimą. Tačiau nėra įmanoma tokia situacija, kai vienas prietaisas stengiasi linijos lygį pakeisti į aukštą, o kitas tuo pat metu – į žemą, kas galėtų sukelti įrangos gedimus, pažeidimus ar maitinimo šaltinio problemas. Kiekviena linija turi rezistorių, prijungtą prie aukšto lygio (angl. pull-up) , todėl ji visad yra loginiame vienete, jei joks prietaisas nenaudoja (pav.1) linijos duomenų perdavimui.

Pranešimo protokolai

I²C apibrėžia pagrindinių tipų pranešims, kurių kiekvienas prasideda pradžios ir baigiasi STOP:

Viena žinutė, kur valdantysis įrenginys įrašo duomenis į valdomajį;

Viena žinutė, kur valdantysis įrenginys nuskaito duomenis iš valdomo;

Kombinuoti pranešimai, kur valdantysis įrenginys bent du nskaito ir, arba įrašo į vieną ar daugiau valdomų įrenginių.

Kombinuotoje žinutėje kiekviena pranešimas nuskaitymo ar įrašymo prasideda pradžios (START) sąlyga ir valdomo įrenginio adresu. Po pirmojo pražios bito kombinuotose žinutėse siunčiamas pasikartojantis pradžios bitas. Pasikartojantis pradžios bitas nėra valdomas pabaigos (STOP) sąlyga. Taip valdantysis įrenginys supranta, jog tai yra tos pačios žinutės dalis.

I²C sistemos palaiko sutartinę pranešimų struktūrą. SMBus yra apribota iki devynių šių struktūrų, pavyzdžiui, skaityti teksto N  ir parašyti žodį N. PMBus tęsiasi su SMBus grupiniu protokolu, todėl kelios tokios SMBus struktūros turi būti siunčiami į vieną pranešimą. Baigiamasis pabaigos (STOP) bitas rodo kada sugrpuoti veiksmai turi įsigalioti. Pavyzdžiui, vienas PMBus operacija gali konfigūruoti iš naujo tris maitinimo šaltiniai (naudojant tris skirtingus I2C valdomo įrenginio adresus), o jų naujos konfigūracijos turi įsigalioti tuo pačiu metu, kai jie gauna pabaigos bitą.

Adreso dalis visuomet siunčiama pirmiausia. Tradiciškai naudojamas 7 bitų adresavimas. Pirmiausias siunčiamas reikšmingiausias adreso bitas (angl. most significant bit MSB), o aštuntasis bitas, priklausomai nuo jo vertės, reiškia, ar duomenys bus įrašomi (vertė 0), ar nuskaitomi (vertė 1).

Devintasis bitas yra patvirtinimo bitas. Jis naudojamas prie visų pranešimo dalių (ir prie adresavimo, ir prie duomenų). Kuomet perduodamas paskutinis 8-tasis bitas, valdantysis įrenginys perduoda linijos valdymą valdomajam prietaisui, kuris savo ruožtu gali pats pakeisti SDA linijos lygį į žemą. Jei taip nėra padaroma, tuomet laikoma, kad siuntimas nepavyko, duomenys nebuvo gauti arba valdomasis įtaisas jų nesuprato. Tokiu atveju komunikacija yra nutraukiama.

Po adresavimo dalies siunčiami duomenys. Valdantysis prietaisais toliau generuoja laikrodžio impulsus pastoviais intervalais, o duomenys keliauja SDA linija. Jų kryptis priklauso nuo to, ar vykdomas įrašymo, ar nuskaitymo operacija. Duomenų keikis yra laisvai pasirenkamas dydis bei dauguma valdomųjų prietaisų jų skaitymo (ir įrašymo) metu automatiškai padidina registrų žymeklio padėtį po kiekvieno veiksmo. Laikoma, kad sekantys nuskaitymo/įrašymo veiksmai bus skirti sekančiam registrui.

Laiko schema perduodant duomenys suformuojamas pradžios bitas (S) kai duomenų linios (SDA) lygis pakeičiamas į žemą o laiko (SCL) išlieka aukštas. Toliau suformuojamas pirmas duomenų bitas kol SCL žemas. Toliau duomenys yra nuskaitomi kai SCL bito lygis yra aukšas(B1). Toliau viskas kartojasi kol SCL yra žemas SDA duomenis perduodami, kai SCL žemas duomenys nuskaitomi(B2, Bn). Pabaigos (STOP) bitas perdodamas, kai SDA pasikeičia į aukštą lygi kol SCL dar yra aukšto lygio (Pav2)

"Data

 

Pav.2 I2C linijos loginiai lygiai perduodant duomenis

2 USART

USART modulis (angl. Universal Sincronous Asynchronous Receiver Transmitter). Šis modulis yra skirtas perduoti duomenis ne tik asinchroninėmis sąsajomis, bet ir sinchroninėmis. Modulis naudoja atskirą liniją sinchronizavimo singnalui. Taigi šis modulis yra pranašesnis už UART moduli, kuris perduoda duomenis tik asinchroniniu budu. Pagrindiniai skirtumai:

Sinchroninis režimas reikalauja duomenų ir laikrodžio. Asinchroninis režimas reikalauja tik duomenų.

Sinchroninio režimo metu duomenys peruodami fiksuotu greiciu. Asinchroniniu režimu duomenys neturi būti perduodami fiksuotai.

Sinchroniniu budu duomenys perduodami blokais, tuo tarpu asinchroniniu režimu duomenys perduodami po baitą.

Sinchroninis režimas leidžia tureti didesne DTR (duomenų perdavimo sparta) ne asinchroninis režimas.

USART galimybės

USART modulis asinchroninėje veikloje vienu metu gali tiek priimti,tiek išsiųsti duomenis. Duomenų siuntimui yra naudojama asinchroninį (UART) režimą. USART bendrauja su kitais prietaisais, naudojant du signalus: perduoti (TDX) ir gauti (RDX).  Sinchroniniu režimu, USART bendrauja su kitais prietaisais, naudojant tris signalus: perduoti (TDX), gauti (RDX) ir laikrodiniu (CKX). Duomenų bitai perduodami sinchroniškai su CKX signalu. Srauto kontrolė yra prieinama tiek asinchroniniu ir sinchroninių režimų per RTS / CTS prievadus. Pav. 3[3]

 

 

"http://www.ip-extreme.com/images/products/USART_486px.jpg

 

Pav.3 USART pajungimo schema [3]

Duomenų perdavimas

USART duomenų baitą perduoda siųsdama bitą po bito, iš eilės. Kitame gale kitas USART prietaisas priima šią bitų seką ir sujungia juos visus į vieną baitą. Kiekvienas USART turiu poslinkio (angl. shift) registrą, kuris yra pagrindas komponentas verčiant duomenis iš lygiagrečiųjų į nuosekliuosius ir atvirkščiai. Dar vienas tokios komunikacijos pliusas yra tai, kad duomenys vaikšto viena linija ir tai reikalauja mažiau resursų nei lygiagrečiame duomenų perdavime, kai kiekvienas bitas turi savo atskirą liniją.

Laukimo būsenoje loginis perdavimo linijos lygis visad būna aukštas. Tai labiau istorinis dalykas, išlikęs iš telegrafo laikų, kai aukštas lygis leisdavo identifikuoti, kad ryšio linija nėra pažeista. Kiekvieno baito siuntimas pradedamas START bito siuntimu, kurio loginis lygis yra žemas. Po jo seka duomenų bitų perdavimas. Bitų skaičius gali svyruoti nuo 5 iki 8. Aukštas lygis atitinka vienetą, žemas – nulį. Taip pat gali būti naudojamas lyginis bitas (angl. parity bit), kuris padeda identifikuoti klaidas duomenų perdavime. Pirmiausia perduodamas žemiausias bitas (LSB, angl. least significant bit), nors ne visi laikosi šio standarto. Paskutiniai bitai yra vienas arba du STOP bitai (aukštas lygis). Duomenų priėmime pirmiausia užfiksuojamas žemas START bito lygis. Toliau priimami duomenų bitai. Tada lyginis bitas ir STOP bitai. Pastarieji naudojami todėl, kad būtų bent du loginiai signalo lygio pasikeitimai tarp dviejų vienas po kito perduodamų baitų. Pav.4[4].

 

"http://www.binaryupdates.com/wp-content/uploads/FRAME-DATABITS-USART.jpg

Pav. 4 USART loginiai lygiai [4]

3 SPI

SPI yra paprasčiausia sinchroninė nuoseklaus duomenų perdavimo sąsaja, skirta keistis duomenimis tarp dviejų įrenginių, kurių vienas yra valdantysis (angl. Master), kitas – valdomasis (angl. Slave). Duomenys gali būti siunčiami iš karto dviem kryptimis, tačiau nėra įrenginių adresavimo. Jei yra daugiau nei vienas vedamasis, tenka panaudoti papildomus mikrovaldiklio prievadus (CS) ir papildomai numatyti kelių vedamųjų valdymą programoje. SPI sąsajoje nenumatytas patvirtinimas, kad duomenys gauti. SPI sąsaja nenumato, kad duomenis gaunantis įrenginys gali nespėti priimti duomenų ir reikia palaukti. Prisireikus aukščiau išvardintų funkcijų, kurių nėra SPI sąsajoje, tenka konstruoti aukštesnio lygio protokolą.

Naudojant logini signalų analizatoriu galime matyti SPI loginius signalus. Pirmiausia atsiradus iėjime įtampai invertuotas įrenginio pasirinkimo signalas (CS) igauna loginio 0 vertę. Tuomet magistrale sinchronizuojasi ir pradedami siūsti duomenys. Taip pat kuomet SCLK igyje loginio 0 vertę tuomet DIN pakeičia savo būseną. Pav. 5.[5]

Pav. 5 SPI signalai

Duomenų perdavimas

Norėdamas pradėti komunikaciją, valdantysis įrenginys sukonfigūruoja savo vidinį laikrodį. Naudojamas dažnais dažnai būna MHz eilės. Tada pasirenkamas valdomasis įrenginys, su kuriuo bus bendraujama. Tai padaroma atitinkamą SS liniją perjungus iš aukšto loginio lygio į žemą. Per kiekvieną SPI komunikacijos ciklą vyksta dvipusis duomenų perdavimas. Valdantysis įtaisas MOSI linija perduoda duomenis, o valdomasis juos priima ir atsako naudodamas MISO liniją. SPI dirba kitaip nei USART. Kadangi laikrodžio signalo linija yra atskirta nuo duomenų linijos, tai leidžia lengvai sinchronizuoti valdantįjį ir valdomąjį įrenginius. Laikrodžio signalas įgalina tiksliai pasakyti (linijos frontui kylant arba leidžiantis), kuomet reikia nuskaityti duomenų signalo vertes.

Protokolų palyginimas

USART duomenų perdavimo atveju abiejų prietaisų laikrodžiai turi veikti tuo pačiu dažniu ir būti suderinti. Tam tikslui pasiekti reikalinga sudėtingesnė įranga. Taip pat naudojami specialūs START ir STOP bitai. Taigi, norint perduoti 8 bitus duomenų, iš viso reikia išsiųsti mažiausiai 10 bitų. Tai pertekliniai duomenys. USART leidžia komunikuoti tik tarp dviejų prietaisų. Taip pat dėl naudojamos sudėtingos įrangos stipriai ribojamas maksimalus duomenų perdavimo greitis.

Pagrindinis SPI trūkumas yra komunikacijai naudojamų išvadų skaičius. Pajungimas reikalauja mažiausiai keturių kontaktų. Tačiau jei norime komunikuoti daugiau nei su vienu prietaisu, kiekvienam naujam prietaisui reikalinga papildoma SS linija. Taip pat SPI leidžia turėti tik vieną valdantį prietaisą linijoje. I2C reikalauja tik dviejų linijų ir palaiko iki 1008 valdomųjų įrenginių. Taip pat leidžia turėti daugiau nei vieną valdantįjį prietaisą. I2C greitis yra didesnis nei USART, bet mažesnis nei SPI. Taip pat kiekvieno duomenų baito perdavimo metu yra siunčiama papildomas patvirtinimo bitas. Aparatiniai I2C reikalavimai yra sudėtingesni nei SPI, tačiau paprastesni nei USART. I2C gali būti nesunkiai realizuojamas vien programiniame lygmenyje.

Išvados

Tarp šių sąsajų tinkamiausia naudoti yra I2C ir SPI. Šios sąsajos yra labiausiai paplitusios todėl yra patogiausios keičiant modulių tipą bei poreikį. Tačiau USART yra geriausias perduodant duomenis didesniu atstumu. Pagrindinis USART trūkumas yra duomenų perdavimo greitis. USART labiausiai naudojamas tokiuose komunikacijos standartuose kaip RS232, RS485. Taigi galime teigti jog kiekvieną sąsaja turi savo pritaikymą. Tad norėdami panaudoti sąsają pirmiausia reikia išsianalizuoti kokie reikalingi parametrai. Tuomet galime rinktis kokia sąsaja galime naudoti atsižvelgiant į sąsajų galimybes. Tokiu atveju galime tiketis stabilumo bei tikslumo.

Literatūros sąrašas

[1] http://www.i2c-bus.org/

[2] http://www.cs.fsu.edu/~baker/devices/notes/i2c.html#(3)

[3] http://www.ip-extreme.com/IP/usart.shtml

[4] http://www.binaryupdates.com/usart-in-avr-atmega32a-microcontroller/

[5] http://www.eeherald.com/section/design-guide/esmod12.html