Arduino I2C protokolas
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. Dažniausiai naudojamos įtampos yra: 5v, 3.3V. žemiau pateiktoje iliustracijoje pavaizduotas valdantysis įrenginys (angl Master) ir keli valdomi įrenginiai (angl. Slave). Visi įrenginiai sujungiami nuosekliai prie duomenų (SDA) ir laiko linijos (SCL).
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 linijos duomenų perdavimui.
Pranešimo protokolai
I²C apibrėžia pagrindinių tipų pranešimus, kurių kiekvienas prasideda pradžios ir baigiasi STOP:
- Viena žinutė, kur valdantysis įrenginys įrašo duomenis į valdomąjį.
- Viena žinutė, kur valdantysis įrenginys nuskaito duomenis iš valdomo.
- Kombinuoti pranešimai, kur valdantysis įrenginys bent du nuskaito 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 SMB’us grupiniu protokolu, todėl kelios tokios SMBus struktūros turi būti siunčiami į vieną pranešimą. Baigiamasis pabaigos (STOP) bitas rodo kada sugrupuoti 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-asis bitas, valdantysis įrenginys perduoda linijos valdymą valdomajam prietaisui, kuris savo ruožtu gali pats pakeisti SDA linijos lygį į žemą. Jei i 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ų linijos (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štas(B1). Toliau viskas kartojasi kol SCL yra žemas SDA duomenis perduodami, kai SCL žemas duomenys nuskaitomi(B2, Bn). Pabaigos (STOP) bitas perduodamas, kai SDA pasikeičia į aukštą lygi kol SCL dar yra aukšto lygio.