I2C magistralė — priskyrimas, įrenginys, duomenų perdavimas, adresavimas
Kurdami elektroninę grandinę, daugelis kūrėjų susiduria su būtinybe naudoti daugybę tarpinių lustų, kad būtų suderinti, imami ir adresuojami atskiri blokai. Siekdama sumažinti papildomų lustų skaičių, „Philips“ dar devintajame dešimtmetyje pasiūlė dviejų laidų dvikryptį I2C nuoseklųjį tinklo sąsają, sukurtą specialiai valdyti kelis lustus viename įrenginyje.
Šiandien vien „Philips“ gamina daugiau nei šimtą su I2C suderinamų įrenginių, skirtų elektroninei įrangai, kurios paskirtis yra pati įvairiausia: atmintis, vaizdo procesorių sistemos, analoginiai-skaitmeniniai ir skaitmeniniai-analoginiai keitikliai, ekrano tvarkyklės ir kt.
I2C magistralė yra nuosekliojo duomenų mainų protokolo modifikacija, galinti perduoti nuosekliuosius 8 bitų duomenis įprastu „greitu“ režimu 100–400 kbps greičiu. Duomenų mainų procesas čia įgyvendinamas tik dviem laidais (neskaičiuojant bendro laido): SDA linijos duomenims ir SCL linijos sinchronizavimui.
Magistralė tampa dvikryptė dėl to, kad prie magistralės prijungtų įrenginių išėjimų kaskados turi atvirus kolektorius arba kanalus, taip atkartojant IR laidus. Dėl to magistralė sumažina jungčių tarp lustų skaičių, todėl plokštėje lieka mažiau reikalingų kaiščių ir pėdsakų. Dėl to pati plokštė pasirodo paprastesnė, kompaktiškesnė ir technologiškai pažangesnė gamyboje.
Šis protokolas leidžia išjungti adresų dekoderius ir kitą išorinę derybų logiką. Lustų, galinčių vienu metu veikti I2C magistralėje, skaičių riboja jos talpa – ne daugiau kaip 400 pF.
Su I2C suderinami IC turi aparatinės įrangos triukšmo slopinimo algoritmą, užtikrinantį duomenų vientisumą net ir esant dideliems trukdžiams. Tokie įrenginiai turi sąsają, leidžiančią mikrograndoms tarpusavyje susisiekti net tada, kai jų maitinimo įtampa skiriasi. Žemiau esančiame paveikslėlyje galite susipažinti su kelių mikroschemų sujungimo per bendrą magistralę principu.
Kiekvienas iš prietaisų, prijungtų prie magistralės, turi savo unikalų adresą, jį nustato ir pagal įrenginio paskirtį gali veikti kaip imtuvas arba kaip siųstuvas. Perduodant duomenis, šie įrenginiai gali būti valdantysis (master) arba vergas (pavaldys). Pagrindinis yra įrenginys, kuris inicijuoja duomenų perdavimą ir generuoja laikrodžio signalus SCL linijoje. Vergas, palyginti su pagrindiniu įrenginiu, yra paskirties įrenginys.
Bet kuriuo I2C magistralės veikimo momentu tik vienas įrenginys gali veikti kaip pagrindinis; jis generuoja signalą SCL linijoje.Pagrindinis siųstuvas gali būti pagrindinis imtuvas arba pagrindinis siųstuvas.
Iš esmės magistralė leidžia kelis skirtingus valdiklius, tačiau nustato apribojimus valdymo signalų formavimo ir magistralės būsenos stebėjimo charakteristikoms; tai reiškia, kad vienu metu gali pradėti siuntimą keli masteriai, tačiau tokio pobūdžio konfliktai pašalinami arbitražo dėka, ty tai, kaip valdovas elgiasi, kai nustato, kad magistralę užima kitas valdiklis.
Įrenginių poros sinchronizavimą užtikrina tai, kad visi įrenginiai yra prijungti prie magistralės, suformuojant "IR" laidus. Iš pradžių SDA ir SCL signalai yra aukšti.
START ir STOP
Keitimasis prasideda pagrindiniam įrenginiui generuojant „START“ būseną: SDA linijoje signalas pereina iš aukštos į žemą būseną, o SCL linija turi stabilų aukštą lygį. Visi prie magistralės prijungti įrenginiai šią situaciją suvokia kaip komandą pradėti mainus.
Kiekvienas valdiklis generuoja individualų laikrodžio signalą SCL linijoje, kai perduoda duomenis magistrale.
Keitimasis baigiasi pagrindiniam valdikliui suformavus STOP būseną: SDA linijoje signalas keičiasi iš žemo į aukštą, o SCL linija turi stabilų aukštą lygį.
Vairuotojas visada veikia kaip START ir STOP signalų šaltinis. Kai tik „START“ signalas užsifiksuoja, tai reiškia, kad linija užimta. Linija yra laisva, kai aptinkamas STOP signalas.
Iš karto po START būsenos paskelbimo pagrindinis valdiklis perjungia SCL eilutę žemai ir siunčia reikšmingiausią pirmojo pranešimo baito bitą į SDA eilutę. Baitų skaičius žinutėje neribojamas.SDA linijos pakeitimai įjungiami tik tada, kai signalo lygis SCL linijoje yra žemas. Duomenys galioja ir neturėtų būti keičiami tik tada, kai sinchronizavimo impulsas yra didelis.
Patvirtinimas, kad pagalbinis imtuvas gavo pagrindinio siųstuvo baitą, atliekamas nustatant specialų patvirtinimo bitą SDA eilutėje po aštuntojo duomenų bito priėmimo.
PATVIRTINIMAS
Taigi, 8 bitų duomenų siuntimas iš siųstuvo į imtuvą baigiasi papildomu impulsu SCL linijoje, kai priimančiojo įrenginio SDA linija sumažėja, o tai rodo, kad jis gavo visą baitą.
Patvirtinimas yra neatsiejama duomenų perdavimo proceso dalis. Valdytojas generuoja sinchronizavimo impulsą. Siųstuvas siunčia žemą būseną į SDA, kai aktyvus patvirtinimo laikrodis. Kol sinchronizavimo impulsas yra didelis, imtuvas turi išlaikyti žemą SDA.
Jei paskirties pavaldinys nepripažįsta savo adreso, pavyzdžiui, dėl to, kad šiuo metu yra užimtas, duomenų linija turi būti palaikoma aukštai. Tada kapitonas gali duoti STOP signalą, kad nutrauktų siuntimą.
Jei priėmimą vykdo pagrindinis imtuvas, jis privalo informuoti pavaldinį siųstuvą po perdavimo pabaigos, o ne patvirtindamas paskutinį baitą. Pagalbinis siųstuvas atleidžia duomenų liniją, kad pagrindinis siųstuvas galėtų duoti STOP signalą arba pasikartojantį START signalą.
Įrenginių sinchronizavimą užtikrina tai, kad sujungimai su SCL linija atliekami „AND“ principu.
Meistras neturi vienintelės teisės kontroliuoti SCL linijos perėjimą iš žemos į aukštą.Jei vergui reikia daugiau laiko apdoroti gautam bitui, jis gali savarankiškai išlaikyti žemą SCL, kol bus pasirengęs priimti kitą duomenų bitą. SCL linija tokioje situacijoje bus žema ilgiausią žemo lygio sinchronizavimo impulsą.
Įrenginiai su žemiausiu nuolatiniu žemu lygiu neveikia tol, kol pasibaigs ilgas laikotarpis. Kai visi įrenginiai baigs žemo sinchronizavimo laikotarpį, SCL pakils.
Visi įrenginiai pradės veikti aukštai, o pirmasis įrenginys, kuris baigs savo laikotarpį, pirmasis nustatys žemą SCL liniją. Dėl to žemos SCL būsenos trukmę lems ilgiausia žema vieno iš įrenginių sinchronizavimo impulso būsena, o aukštos būsenos trukmę – trumpiausias vieno iš įrenginių sinchronizavimo laikotarpis. prietaisai.
Sinchronizavimo signalus imtuvai gali naudoti kaip duomenų perdavimo valdymo bitų ir baitų lygiu priemonę.
Jei įrenginys gali priimti baitus dideliu greičiu, bet užtrunka tam tikrą laiko tarpą, kad būtų išsaugotas gautas baitas arba pasiruošimas priimti kitą baitą, gavęs ir patvirtinęs baitą jis gali ir toliau išlaikyti žemą SCL, o tai privers siųstuvas į budėjimo būseną.
Mikrovaldiklis be įmontuotų techninės įrangos grandinių, pavyzdžiui, bitų lygyje, gali sulėtinti laikrodžio greitį, padidindamas savo žemos būsenos trukmę, todėl pagrindinio įrenginio perdavimo spartą lems jo sparta. lėtesnis įrenginys.
KREIPTIS
Kiekvienas įrenginys, prijungtas prie I2C magistralės, turi unikalų programos adresą, kuriuo adresas jį adresuoja, siųsdamas konkrečią komandą. To paties tipo mikroschemoms būdingas adreso parinkiklis, įgyvendinamas arba skaitmeninių selektorių įėjimų pavidalu, arba analogine forma. Adresai skirstomi į prie magistralės prijungtų įrenginių adresų erdvę.
Įprastu režimu naudojamas septynių bitų adresas. Adresavimas veikia taip: po komandos «START» pagrindinis kompiuteris siunčia pirmąjį baitą, kuris nustato, kuris pagalbinis įrenginys reikalingas ryšiui su pagrindiniu įrenginiu. Taip pat yra bendras skambučio adresas, kuris apibrėžia visus magistralėje esančius įrenginius, visi įrenginiai (teoriškai) į jį atsako patvirtinimu, tačiau praktiškai tai pasitaiko retai.
Taigi pirmieji septyni pirmojo baito bitai yra vergo adresas. Mažiausiai reikšmingas bitas – aštuntasis – nurodo duomenų siuntimo kryptį. Jei yra «0», informacija bus parašyta iš šeimininko šiam vergui. Jei „1“, informaciją iš šio vergo nuskaitys pagrindinis valdiklis.
Kai pagrindinis kompiuteris baigia siųsti adreso baitą, kiekvienas pavaldinys lygina savo adresą su juo. Kiekvienas, turintis tą patį adresą, yra vergas ir yra apibrėžiamas kaip pagalbinis siųstuvas arba pagalbinis imtuvas, atsižvelgiant į mažiausiai reikšmingo adreso baito bito reikšmę.
Slave adresas gali apimti fiksuotas ir programuojamas dalis. Gana dažnai vienoje sistemoje dirba daug to paties tipo įrenginių, tuomet programuojama adreso dalis leidžia magistralėje naudoti daugiausiai to paties tipo įrenginius. Kiek bitų adreso baite galima programuoti, priklauso nuo lusto laisvų kontaktų skaičiaus.
Kartais pakanka kaiščio su analoginiu programuojamo adresų diapazono nustatymu, pavyzdžiui, SAA1064 - LED indikatoriaus tvarkyklė, kuri turi būtent tokį įgyvendinimą. Konkretaus kaiščio potencialas lemia lusto adresų erdvės poslinkį, kad to paties tipo lustai neprieštarautų toje pačioje magistralėje. Visi lustai, palaikantys I2C magistralę, turi adresų rinkinį, kurį gamintojas nurodo dokumentacijoje.
„11110XX“ derinys yra skirtas 10 bitų adresui. Jei įsivaizduosime keitimąsi duomenimis iš komandos «START» į komandą «STOP», tai atrodys taip:
Čia leidžiami paprasti ir kombinuoti duomenų mainų formatai. Kombinuotas formatas reiškia, kad tarp «START» ir «STOP» pagrindinis ir pavaldinys gali veikti kaip imtuvai ir siųstuvai, tai naudinga, pavyzdžiui, nuosekliosios atminties valdymui.
Tegul pirmasis duomenų baitas perduoda atminties adresą. Tada, pakartojant komandą «START» ir nuskaitant pavaldinį adresą, atminties duomenys veiks. Sprendimus automatiškai padidinti arba sumažinti anksčiau pasiektą adresą priima įrenginio kūrėjas, prieš tai išnagrinėjęs lusto dokumentaciją. Vienaip ar kitaip, gavę START komandą visi įrenginiai turi atkurti savo logiką ir pasiruošti tam, kad dabar adresas bus pavadintas.