„I2C“ magistralės protokolo pamoka, sąsaja su programomis

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiuo metu protokolai vaidina svarbų vaidmenį programoje įdėtosios sistemos dizainas . Nesileidžiant į protokolus, jei norite išplėsti mikrovaldiklio periferines savybes, padidės sudėtingumas ir energijos suvartojimas. Yra įvairių tipų magistralės protokolų, tokių kaip USART, SPI, CAN, I2C magistralės protokolas ir kt., kurie naudojami duomenims perduoti tarp dviejų sistemų.

I2C protokolas

Kas yra „I2C Bus“?




Norint perduoti ir priimti informaciją tarp dviejų ar daugiau nei dviejų įrenginių, reikalingas ryšio kelias, vadinamas magistralės sistema. „I2C“ magistralė yra dvikryptė dviejų laidų nuoseklioji magistralė, naudojama duomenims perduoti tarp integrinių grandynų. I2C reiškia „Inter Integrated Circuit“. Pirmą kartą „Philips“ puslaidininkiai ją pristatė 1982 m. „I2C“ magistralę sudaro trys duomenų perdavimo greičiai, tokie kaip standartinis, greitasis režimas ir greitasis režimas. „I2C“ magistralė palaiko 7 ir 10 bitų adresų erdvės įrenginius, o jo veikimas skiriasi esant žemai įtampai.

I2c magistralės protokolas

I2c magistralės protokolas



I2C signalo linijos

I2C signalo linijos

I2C signalo linijos

I2C yra nuosekliosios magistralės protokolas, susidedantis iš dviejų signalo linijų, tokių kaip SCL ir SDL linijos, naudojamos ryšiui su įrenginiais. SCL reiškia „nuosekliojo laikrodžio liniją“, o šį signalą visada valdo „pagrindinis įrenginys“. SDL reiškia „nuosekliąją duomenų liniją“, o šį signalą valdo pagrindinis arba I2C periferiniai įrenginiai. Abi šios SCL ir SDL linijos yra atviro nutekėjimo būsenoje, kai nėra perdavimo tarp I2C periferinių įrenginių.

„Open-Drain“ išėjimai


Atviras kanalizacija yra FET tranzistoriaus koncepcija kur tranzistoriaus nutekėjimo gnybtas yra atviros būsenos. Pagrindinio įrenginio SDL ir SCL kaiščiai yra suprojektuoti taip, kad tranzistoriai yra atviros būsenos, todėl duomenų perdavimas galimas tik tada, kai šie tranzistoriai yra valdomi. Vadinasi, šios linijos arba išleidimo gnybtai yra prijungti prie įtampos pritraukimo rezistorių prie VCC laidumo režimui.

„I2C“ sąsajos

Daug vergų prietaisai yra susieti su mikrovaldikliu I2C magistralės pagalba per I2C lygio perjungiklį IC perduoti informaciją tarp jų. „I2C“ protokolas naudojamas prijungti daugiausiai 128 įrenginius, kurie visi yra prijungti, kad galėtų bendrauti su pagrindinio įrenginio SCL ir SDL linijomis, taip pat su „slave“ įrenginiais. Jis palaiko „Multimaster“ ryšį, o tai reiškia, kad išoriniams įrenginiams perduoti naudojami du meistrai.

„I2C“ duomenų perdavimo normos

„I2C“ protokolas veikia trimis režimais, tokiais kaip: greitasis režimas, didelės spartos režimas ir standartinis režimas, kai standartinio režimo duomenų greitis svyruoja nuo 0Hz iki 100Hz, o greito režimo duomenys gali būti perduodami nuo 0Hz iki 400 KHz greičiu ir didelio greičio režimas su 10 KHz iki 100KHz. 9 bitų duomenys siunčiami kiekvienam perdavimui, kai siųstuvas MSB siunčia 8 bitus LSB, o 9-asis bitas yra patvirtinimo bitas, kurį siunčia imtuvas.

„I2C“ duomenų perdavimo normos

„I2C“ duomenų perdavimo normos

I2C komunikacija

I2C magistralės protokolas dažniausiai naudojamas pagrindiniame ir pavaldiniame ryšyje, kur pagrindinis yra vadinamas „mikrovaldikliu“, o vergas vadinamas kitais įtaisais, tokiais kaip ADC, EEPROM, DAC ir panašiais įterptosios sistemos įrenginiais. „I2C“ magistralės pagalba prie pagrindinio įrenginio prijungiamas vergų įrenginių skaičius, kuriame kiekvienas vergas susideda iš unikalaus adreso, kuriuo jam pranešama. Šie veiksmai naudojami norint perduoti pagrindinį įrenginį vergui:

1 žingsnis: Pirma, pagrindinis įrenginys išleidžia paleidimo sąlygą, kad informuotų visus vergo įrenginius, kad jie klausytųsi nuoseklios duomenų linijos.

2 žingsnis: Pagrindinis prietaisas siunčia tikslinio vergo įrenginio adresą, kuris lyginamas su visais vergo įrenginių adresais, prijungtais prie SCL ir SDL linijų. Jei kas nors adresas sutampa, pasirenkamas tas įrenginys, o visi kiti įrenginiai atjungiami nuo SCL ir SDL linijų.

3 žingsnis: Vergo įrenginys su suderintu adresu, gautu iš magistro, atsako patvirtindamas pagrindinį įrenginį, po to duomenų magistralėje užmezgamas ryšys tarp pagrindinio ir pavaldžių įrenginių.

4 žingsnis: Ir pagrindinis, ir vergas priima ir perduoda duomenis, priklausomai nuo to, ar komunikacija skaitoma, ar rašoma.

5 žingsnis: Tada pagrindinis aparatas gali perduoti 8 bitų duomenis imtuvui, kuris atsako pateikdamas 1 bitų patvirtinimą.

„I2C“ pamoka

Informacijos perdavimas ir priėmimas nuosekliai nuosekliai laikrodžio impulsų atžvilgiu vadinamas I2C protokolu. Tai yra tarpsisteminis ir mažo atstumo protokolas, o tai reiškia, kad jis naudojamas grandinės plokštėje bendraujant su pagrindiniu ir pavaldžiaisiais įrenginiais.

I2C protokolo pagrindai

Apskritai „I2C“ magistralės sistemą sudaro du laidai, kurie lengvai naudojami išplėsti įvesties ir išvesties periferines funkcijas, pvz., ADC, EEROM ir RTC, ir kiti pagrindiniai komponentai sukurti sistemą, kurios sudėtingumas yra labai mažas.

Pavyzdys: Kadangi 8051 mikrovaldiklyje nėra integruoto ADC, taigi, jei norime susieti bet kokius analoginius jutiklius su 8051 mikrovaldikliu, turime naudoti tokius ADC įrenginius kaip ADC0804-1 kanalų ADC, ADC0808-8 kanalų ADC ir kt. Naudodami šiuos ADC, galime susieti analoginius jutiklius su mikrovaldikliu.

Nenaudodami protokolo išplėsdami bet kurio mikrovaldiklio ar procesoriaus įvesties / išvesties ypatybes, galime pereiti prie 8255 ICit 8 kontaktų įrenginio. The 8051 mikrovaldiklis yra 40 kontaktų mikrovaldiklis naudodami 8255 IC, mes galime išplėsti 3-I / O prievadus su 8 kaiščiais kiekviename prievade. Naudojant visus prietaisus, tokius kaip RTC, ADC, EEPROM, „Timers“ ir kt., Periferinei grandinei išplėsti, taip pat padidėja sudėtingumas, išlaidos, energijos suvartojimas ir produkto dydis.

Norint įveikti šią problemą, vaizduojama protokolo koncepcija, skirta sumažinti aparatūros sudėtingumą ir energijos suvartojimą. Naudodami šį I2C protokolą galime išplėsti daugiau funkcijų, tokių kaip I / 0 išoriniai įrenginiai, ADC, T / C ir atminties įrenginiai, iki 128 įrenginių.
I2C protokoluose vartojama terminologija

Siųstuvas: Įrenginys, kuris siunčia duomenis į magistralę, vadinamas siųstuvu.

Imtuvas: Įrenginys, kuris gauna duomenis iš magistralės, vadinamas imtuvu.

Meistras: Įrenginys, kuris inicijuoja perdavimą, kad sugeneruotų laikrodžio signalus ir nutrauktų perdavimą, vadinamas pagrindiniu.

Vergas: Prietaisas, į kurį kreipiasi meistras, vadinamas vergu.

„Multimaster“: Daugiau nei vienas meistras gali bandyti vienu metu valdyti magistralę, nesugadindamas pranešimo, vadinamas „Multimaster“.

Arbitražas: Procedūra, užtikrinanti, kad jei magistralę vienu metu bando valdyti daugiau nei vienas meistras, tai daryti leidžiama tik vienam. Laimėjęs pranešimas nebus sugadintas.

Sinchronizavimas: Dviejų ar daugiau įrenginių laikrodžio singlų sinchronizavimo procedūra vadinama sinchronizavimu.

„I2C“ pagrindinių komandų seka

  1. Pradžios bitų sąlyga
  2. „Stop Bit“ sąlyga
  3. Pripažinimo sąlyga
  4. Šeimininkas vergui Rašymo operacija
  5. Perskaitykite operaciją „Valdovo vergas“

Pradėti ir sustabdyti bitų būklę

Kai šeimininkas (mikrovaldiklis) nori kalbėti su vergo įrenginiu (pvz., ADC), jis pradeda ryšį I2C magistralėje išduodamas pradžios sąlygą ir tada pateikia sustabdymo sąlygą. I2C pradžios ir pabaigos logikos lygiai parodyti paveiksle.

I2C paleidimo sąlyga apibrėžiama kaip didelis į mažą SDA linijos perėjimą, o SCL linija yra aukšta. „I2C“ sustabdymo būsena atsiranda, kai SDA linija persijungia iš žemos į aukštą, o SCL linija yra aukšta.

I2C meistras visada sukuria S ir P sąlygas. Kai I2C magistras inicijuoja START sąlygą, laikoma, kad I2c magistralė yra užimta.

Pradėti ir sustabdyti bitų būklę

Pradėti ir sustabdyti bitų būklę

Programavimas:

PRADĖTI Sąlygą:

sbit SDA = P1 ^ 7 // inicializuokite mikrovaldiklio SDA ir SCL kaiščius //
sbit SCL = P1 ^ 6
negaliojantis uždelsimas (nepasirašytas int)
negaliojantis pagrindinis ()
{
SDA = 1 // duomenų apdorojimas //
SCL = 1 // laikrodis yra aukštas //
delsimas()
SDA = 0 // atsiuntė duomenis //
delsimas()
SCL = 0 // laikrodžio signalas mažas //
}
Tuščias vėlavimas (int p)
{
nepasirašęs, gim
Už (a = 0a<255a++) //delay function//
Už (b = 0b}

STOP sąlyga:

negaliojantis pagrindinis ()
{
SDA = 0 // Nutraukti duomenų apdorojimą //
SCL = 1 // laikrodis yra aukštas //
delsimas()
SDA = 1 // Sustabdyta //
delsimas()
SCL = 0 // laikrodžio signalas mažas //
}
Tuščias vėlavimas (int p)
{
nepasirašęs, gim
Už (a = 0a<255a++) //delay function//
Už (b = 0b}

Sąlyga „Patvirtinimas“ (ACK) ir „Nėra patvirtinimo“ (NCK)

Kiekvienam baitui, perduotam per I2C magistralę, seka patvirtinimo sąlyga iš imtuvo, o tai reiškia, kad magistraliui ištraukus žemą SCL, kad būtų baigtas 8 bitų perdavimas, imtuvas žemai ištrauks SDA. Jei po imtuvo perdavimo netraukia, SDA linija LOW laikoma NCK sąlyga.

Patvirtinimas (ACK)

Patvirtinimas (ACK)

Programavimas

Pripažinimas
negaliojantis pagrindinis ()
{
SDA = 0 // SDA eilutė eina į žemą //
SCL = 1 // laikrodis yra nuo mažo iki mažiausio //
vėlavimas (100)
SCL = 0
}
Nėra patvirtinimo:
negaliojantis pagrindinis ()
{
SDA = 1 // SDA eilutė eina į aukštą //
SCL = 1 // laikrodis yra nuo mažo iki mažiausio //
vėlavimas (100)
SCL = 0
}

„Meistras vergui“ rašo operaciją

I2C protokolas perduoda duomenis paketų ar baitų pavidalu. Po kiekvieno baito yra patvirtinimo bitas.

Duomenų perdavimo formatas

Duomenų perdavimo formatas

Duomenų perdavimo formatas

Pradžia: Visų pirma, duomenų perdavimo seka, kurią inicijavo magistras, generuojantis pradžios sąlygą.

7 bitų adresas: Po to pagrindinis serveris siunčia vergo adresą dviem 8 bitų formatais, o ne vienu 16 bitų adresu.

R / W: Jei skaitymo ir rašymo bitai yra dideli, tada atliekama rašymo operacija.

ALAS: Jei įrašymo operacija atliekama vergo įrenginyje, imtuvas siunčia 1 bitų ACK į mikrovaldiklį.

Sustabdyti: Baigęs rašymo operaciją vergo įrenginyje, mikrovaldiklis siunčia sustabdymo sąlygą vergo įrenginiui.

Programavimas

Rašymo operacija

negaliojantis (nepasirašyta char d)
{
Nepasirašytas char k, j = 0x80
Už (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
vėlavimas (4)
SCL = 0
}
SDA = 1
SCL = 1
vėlavimas (2)
c = SDA
vėlavimas (2)
SCL = 0
}

„Master to Vergo“ skaitymo operacija

Duomenys yra nuskaitomi iš vergo įrenginio bitų ar baitų pavidalu - pirmiausia perskaitykite reikšmingiausią ir paskutinį - mažiausiai reikšmingą.

Duomenų skaitymo formatas

Duomenų skaitymo formatas

Duomenų skaitymo formatas

Pradžia: Pirmiausia duomenų perdavimo seką inicijuoja pagrindinis generuojantis pradžios sąlygą.

7 bitų adresas: Po to pagrindinis serveris siunčia vergo adresą dviem 8 bitų formatais, o ne vienu 16 bitų adresu.

R / W: Jei skaitymo ir rašymo bitų yra nedaug, atliekama skaitymo operacija.

ALAS: Jei įrašymo operacija atliekama vergo įrenginyje, imtuvas siunčia 1 bitų ACK į mikrovaldiklį.

Sustabdyti: Baigęs rašymo operaciją vergo įrenginyje, mikrovaldiklis siunčia sustabdymo sąlygą vergo įrenginiui.

Programavimas

Negalima skaityti ()
{
Nepasirašyta char j, z = 0x00, q = 0x80
SDA = 1
už (j = 0j<8j++)
{
SCL = 1
vėlavimas (100)
vėliava = SDA
jei (vėliava == 1)
q)
q = q >> 1
vėlavimas (100)
SCL = 0

Praktinis ADC sąsajos su mikrovaldikliu 8051 pavyzdys

ADC yra įtaisas, naudojamas konvertuoti analoginius duomenis į skaitmeninius ir skaitmeninius į analoginius. 8051 mikrovaldiklis neturi integruoto ADC, todėl mes turime pridėti išoriškai per I2C protokolą. PCF8591 yra I2C pagrindu analogiškas skaitmeniniam ir skaitmeninis į analoginį keitiklį. Šis prietaisas gali palaikyti ne daugiau kaip 4 analoginius įvesties kanalus kartu su 2,5–6 V įtampa.

Analoginiai išėjimai

Analoginiai išėjimai yra įtampos formos. Pavyzdžiui, 5v analoginis jutiklis suteikia išėjimo logiką nuo 0,01v iki 5v.
Didžiausia skaitmeninė 5v reikšmė yra = 256.
2.5v vertė yra = 123 pagal didžiausią įtampos vertę.

Analoginio išėjimo formulė yra:

Skaitmeninių išėjimų formulė:

ADC sąsaja su mikrovaldikliu 8051

ADC sąsaja su mikrovaldikliu 8051

Aukščiau pateiktame paveikslėlyje parodytas duomenų perdavimas naudojant I2C protokolą iš ADC įrenginio į mikrovaldiklį 8051. ADC kaiščiai SCL ir SDA yra prijungti prie mikrokontrolerio kaiščių 1.7 ir 1.6, kad būtų galima užmegzti ryšį tarp jų. Kai jutiklis pateikia analogines vertes ADC, jis konvertuojasi į skaitmeninį ir per I2C protokolą perduoda duomenis į mikrovaldiklį.

Tai apie „I2C“ magistralės protokolo pamoką su atitinkamomis programomis. Tikimės, kad pateiktas turinys suteiks jums praktinę idėją susieti kelis įrenginius su mikrovaldikliais naudojant I2C ryšį. Jei kyla abejonių dėl šio protokolo sąsajos procedūros, galite susisiekti su mumis komentuodami toliau.