I2C siini protokolli õpetus, liides rakendustega

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Tänapäeval mängivad protokollides olulist rolli protokollid sisseehitatud süsteemi kujundus . Protokollide juurde minemata suureneb mikrokontrolleri perifeersete funktsioonide laiendamine, keerukus ja energiatarve. Saadaval on erinevat tüüpi siini protokollid, nagu USART, SPI, CAN, I2C siini protokoll jne., mida kasutatakse andmete edastamiseks kahe süsteemi vahel.

I2C protokoll

Mis on I2C buss?




Teabe edastamine ja vastuvõtmine kahe või enama kui kahe seadme vahel eeldab siiniteeks kutsutavat sidetee. I2C siin on kahesuunaline kahesuunaline jadasiin, mida kasutatakse andmete edastamiseks integraallülituste vahel. I2C tähistab Inter-integreeritud vooluahelat. Esimest korda võtsid selle kasutusele Philipsi pooljuhid 1982. aastal. I2C-siin koosneb kolmest andmeedastuskiirusest, nagu tavaline, kiire režiim ja kiire režiim. I2C-siin toetab 7- ja 10-bitist aadressiruumiseadet ning selle töö erineb madalast pingest.

I2c siini protokoll

I2c siini protokoll



I2C signaaliliinid

I2C signaaliliinid

I2C signaaliliinid

I2C on jadasiiniprotokoll, mis koosneb kahest signaaliliinist, näiteks SCL- ja SDL-liinidest, mida kasutatakse seadmetega suhtlemiseks. SCL tähistab jadakella liini ja seda signaali juhib alati põhiseade. SDL tähistab jadaandmeliini ja seda signaali juhib kas põhi- või I2C-välisseadmed. Mõlemad SCL- ja SDL-liinid on avatud äravoolu olekus, kui I2C välisseadmete vahel ei toimu ülekannet.

Avatud äravoolu väljundid


Avatud äravool on FET-transistori kontseptsioon kus transistori äravooluklemm on avatud olekus. Põhiseadme SDL- ja SCL-tihvtid on kavandatud transistoridega avatud olekus, seega on andmeedastus võimalik ainult siis, kui neid transistore juhitakse. Seega on need liinid või äravooluklemmid ühendatud juhtivrežiimi jaoks VCC-ga põhjalikud tõmbetakistid.

I2C liidesed

Palju orja seadmed on liidetud mikrokontrolleriga I2C siini abil I2C taseme vahetaja IC kaudu teabe edastamiseks nende vahel. Protokolli I2C kasutati maksimaalselt 128 seadme ühendamiseks, mis on ühendatud nii põhiseadme SCL- ja SDL-liinide kui ka alamseadmetega suhtlemiseks. See toetab Multimasteri sidet, mis tähendab, et välisseadmete edastamiseks kasutatakse kahte masterit.

I2C andmeedastuskiirused

I2C protokollil on kolm režiimi, näiteks: kiire režiim, kiire režiim ja standardrežiim, kus tavarežiimis on andmeedastuskiirus vahemikus 0Hz kuni 100Hz ja kiirrežiimi andmeid saab edastada kiirusega 0Hz kuni 400 KHz ja kiirrežiimi 10 KHz kuni 100KHz. 9-bitised andmed saadetakse iga ülekande kohta, kusjuures saatja MSB saadab 8-bitised andmed LSB-le ja 9. bit on vastuvõtja saadetud kinnitusbitt.

I2C andmeedastuskiirused

I2C andmeedastuskiirused

I2C kommunikatsioon

I2C siiniprotokolli kasutatakse kõige sagedamini ülema ja alamside suhtluses, kus põhimeistrit nimetatakse mikrokontrolleriks, ja alluvat nimetatakse muudeks seadmeteks, nagu ADC, EEPROM, DAC ja sarnased seadmed manustatud süsteemis. Alamseadmete arv on ühendatud põhiseadmega I2C siini abil, kusjuures iga alam koosneb selle edastamiseks unikaalsest aadressist. Järgmisi samme kasutatakse põhiseadme alluvaga edastamiseks:

Samm 1: Esiteks väljastab põhiseade käivitustingimuse, et teavitada kõiki alamseadmeid, et nad kuulaksid seerianumbriliinil.

2. samm: Põhiseade saadab sihtseadme aadressi, mida võrreldakse kõigi alamseadmete aadressidega, mis on ühendatud SCL- ja SDL-liinidega. Kui keegi aadress vastab, valitakse see seade ja ülejäänud kõik seadmed ühendatakse SCL- ja SDL-liinidega.

3. samm: Alamseade, mille kaptenilt on saadud sobitatud aadress, vastab masterile kinnitusega, seejärel luuakse side nii andmesiinil oleva ülema kui ka alamseadmete vahel.

4. samm: Nii ülem kui ka alluv võtavad ja edastavad andmeid sõltuvalt sellest, kas suhtlust loetakse või kirjutatakse.

5. samm: Seejärel saab juht edastada vastuvõtjale 8-bitised andmed, mis vastavad 1-bitise kinnitusega.

I2C õpetus

Teabe järkjärgulist edastamist ja vastuvõtmist kellaimpulsside suhtes nimetatakse I2C-protokolliks. See on süsteemidevaheline ja lühikese vahemaa protokoll, mis tähendab, et seda kasutatakse trükkplaadil põhi- ja alamseadmete edastamiseks.

I2C protokolli põhitõed

Üldiselt koosneb I2C siinisüsteem kahest juhtmest, mida saab hõlpsalt laiendada sisendi ja väljundi perifeersete funktsioonide laiendamiseks, näiteks ADC, EEROM ja RTC, ja muud põhikomponendid teha süsteem, mille keerukus on väga väike.

Näide: Kuna 8051 mikrokontrolleril pole sisseehitatud ADC-d - nii et kui tahame 8051 mikrokontrolleriga ühendada mis tahes analoogandurid, peame kasutama selliseid ADC-seadmeid nagu ADC0804-1 kanaliga ADC, ADC0808-8 kanaliga ADC jne. Nende ADC-de abil saame ühendada analoogandurid mikrokontrolleriga.

Ilma ühegi mikrokontrolleri või protsessori sisend- / väljundfunktsioonide laiendamiseks protokolli kasutamata võime minna 8255 ICit 8-kontaktilise seadme juurde. The 8051 mikrokontroller on 40-kontaktiline mikrokontroller 8255 IC abil saame laiendada 3-sisend- / väljundporte 8-tihvtidega igas pordis. Kasutades kõiki seadmeid, näiteks RTC, ADC, EEPROM, taimereid jms - perifeersete vooluringide laiendamiseks - suurendatakse ka keerukust, kulusid, energiatarbimist ja toote suurust.

Selle probleemi ületamiseks tuleb riistvara keerukuse ja energiatarbimise vähendamiseks pilti protokolli kontseptsioon. Selle I2C protokolli abil saame laiendada rohkemate funktsioonide arvu, nagu I / 0 välisseadmed, ADC-d, T / C ja mäluseadmed.
I2C protokollides kasutatav terminoloogia

Saatja: Seadet, mis saadab siinile andmeid, nimetatakse saatjaks.

Vastuvõtja: Seadet, mis võtab siinilt andmeid vastu, nimetatakse vastuvõtjaks.

Meister: Seadet, mis algatab ülekande kellasignaalide genereerimiseks ja ülekande lõpetamiseks, nimetatakse masteriks.

Ori: Meistri poolt adresseeritud seadet nimetatakse orjaks.

Multimeister: Rohkem kui üks kapten võib proovida bussi korraga juhtida, rikkumata sõnumit nimetatakse Multimasteriks.

Vahekohus: Menetlus selle tagamiseks, et kui siinit üritab korraga juhtida rohkem kui üks juht - seda lubatakse ainult ühel, võidutsõnum ei rikutud.

Sünkroonimine: Kahe või enama seadme kellade singlite sünkroonimise protseduuri nimetatakse sünkroonimiseks.

I2C põhikäskude järjestus

  1. Start-bitiseisund
  2. Peatusbiti seisund
  3. Tunnustamise tingimus
  4. Isand kirjutamise operatsioon
  5. Lugege operatsiooni Peremees ori

Alustamis- ja peatamisbiti seisund

Kui juht (mikrokontroller) soovib rääkida alamseadmega (näiteks ADC), alustab ta sidet I2C-siini käivitamistingimuse väljastamisega ja väljastab seejärel peatamistingimuse. I2C algus- ja peatusloogika tasemed on näidatud joonisel.

I2C starditingimus määratletakse kui SDA liini üleminek madalast madalale, samas kui SCL liin on kõrge. I2C seiskamistingimus tekib siis, kui SDA liin lülitub madalalt kõrgele, kui SCL-liin on kõrge.

I2C master genereerib alati S- ja P-tingimused. Kui I2C master käivitab tingimuse START, loetakse I2c buss hõivatud olekuks.

Alustamis- ja peatamisbiti seisund

Alustamis- ja peatamisbiti seisund

Programmeerimine:

Alusta tingimust:

sbit SDA = P1 ^ 7 // lähtestage mikrokontrolleri SDA ja SCL tihvtid //
sbit SCL = P1 ^ 6
tühine viivitus (allkirjastamata int)
tühine main ()
{
SDA = 1 // andmete töötlemine //
SCL = 1 // kell on kõrge //
viivitus ()
SDA = 0 // saatis andmed //
viivitus ()
SCL = 0 // kella signaal on madal //
}
Tühine viivitus (int p)
{
allkirjastamata, sünd
Sest (a = 0a<255a++) //delay function//
Sest (b = 0b}

STOP-tingimus:

tühine main ()
{
SDA = 0 // Lõpeta andmete töötlemine //
SCL = 1 // kell on kõrge //
viivitus ()
SDA = 1 // Peatatud //
viivitus ()
SCL = 0 // kella signaal on madal //
}
Tühine viivitus (int p)
{
allkirjastamata, sünd
Sest (a = 0a<255a++) //delay function//
Sest (b = 0b}

Kinnituse (ACK) ja kinnituse puudumise (NCK) tingimus

Igale I2C-siini kaudu edastatud baidile järgneb vastuvõtja poolt kinnitusseisund, mis tähendab, et pärast seda, kui master tõmbab SCL-i madalale, et 8-bitine edastamine lõpule viia, tõmbab vastuvõtja SDA-le madalale masterile. Kui pärast vastuvõtja ülekannet ei tõmba, peetakse SDA joont LOW NCK tingimuseks.

Tunnustus (ACK)

Tunnustus (ACK)

Programmeerimine

Tunnustus
tühine main ()
{
SDA = 0 // SDA joon läheb madalale //
SCL = 1 // kell on madalast madalamani //
viivitus (100)
SCL = 0
}
Ei kinnitust:
tühine main ()
{
SDA = 1 // SDA rida läheb kõrgele //
SCL = 1 // kell on madalast madalamani //
viivitus (100)
SCL = 0
}

Meister orjale kirjutab operatsiooni

I2C protokoll edastab andmed pakettide või baitide kujul. Igale baidile järgneb kinnitusbitt.

Andmeedastusformaat

Andmeedastusformaat

Andmeedastusformaat

Algus: Eelkõige andmeedastusjärjestus, mille algataja on algtingimuse genereeriv master.

7-bitine aadress: Pärast seda saadab juht orja aadressi kahes 8-bitises vormingus ühe 16-bitise aadressi asemel.

R / W: Kui lugemis- ja kirjutamisbitt on kõrge, tehakse kirjutamisoperatsioon.

ALAS: Kui kirjutustoiming viiakse läbi alamseadmes, saadab vastuvõtja 1-bitise ACK mikrokontrollerile.

Peatus: Pärast alamseadmes kirjutamistoimingu lõpetamist saadab mikrokontroller seiskamistingimuse alamseadmele.

Programmeerimine

Kirjutamise operatsioon

voidwrite (märkimata märk d)
{
Allkirjastamata täht k, j = 0x80
For (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
viivitus (4)
SCL = 0
}
SDA = 1
SCL = 1
viivitus (2)
c = SDA
viivitus (2)
SCL = 0
}

Operatsioon isandalt orjale

Andmed loetakse orjaseadmest tagasi bittide või baitide kujul - loe kõigepealt kõige olulisem ja kõige vähem kõige olulisem.

Andmete lugemise vorming

Andmete lugemise vorming

Andmete lugemise vorming

Algus: Esmalt algatab andmeedastusjärjestuse algtingimuse genereeriv juht.

7-bitine aadress: Pärast seda saadab juht orja aadressi kahes 8-bitises vormingus ühe 16-bitise aadressi asemel.

R / W: Kui lugemis- ja kirjutamisbit on vähe, viiakse läbi lugemisoperatsioon.

ALAS: Kui kirjutustoiming viiakse läbi alamseadmes, saadab vastuvõtja 1-bitise ACK mikrokontrollerile.

Peatus: Pärast alamseadmes kirjutamistoimingu lõpetamist saadab mikrokontroller seiskamistingimuse alamseadmele.

Programmeerimine

Tühine lugeda ()
{
Allkirjastamata täht j, z = 0x00, q = 0x80
SDA = 1
jaoks (j = 0j<8j++)
{
SCL = 1
viivitus (100)
lipp = SDA
kui (lipp == 1)
q)
q = q >> 1
viivitus (100)
SCL = 0

Praktiline näide ADC liidestamisest mikrokontrolleriga 8051

ADC on seade, mida kasutatakse analoogandmete teisendamiseks digitaalseks ja digitaalseks analoogiks. 8051 mikrokontrolleril pole sisseehitatud ADC-d, seega peame lisama I2C-protokolli kaudu väliselt. PCF8591 põhineb I2C-l analoog digitaalsele ja digitaal-analoogmuundur. See seade toetab maksimaalselt 4-analoogset sisendkanalit koos 2,5–6 V pingega.

Analoogväljundid

Analoogväljundid on pinged. Näiteks annab 5v analoogandur väljundloogika 0,01v kuni 5v.
Maksimaalne digitaalne väärtus 5v on = 256.
2.5v väärtus on = 123 vastavalt maksimaalsele pinge väärtusele.

Analoogväljundi valem on:

Digitaalsete väljundite valem:

ADC liidestamine mikrokontrolleriga 8051

ADC liidestamine mikrokontrolleriga 8051

Ülaltoodud joonis näitab I2C-protokolli abil andmete edastamist ADC-seadmest mikrokontrollerile 8051. SCL ja SDA ADC tihvtid on omavahel ühendatud side loomiseks ühendatud mikrokontrolleri tihvtidega 1.7 ja 1.6. Kui andur annab analoogväärtused ADC-le, teisendab see digitaalseks ja edastab andmed mikrokontrollerile I2C-protokolli kaudu.

See räägib I2C siini protokolli õpetusest koos vastavate programmidega. Loodame, et antud sisu annab teile praktilise kontseptsiooni mitme seadme liidestamiseks mikrokontrolleritega, kasutades I2C-sidet. Kui teil on selle protokolli liidestamisprotseduuris kahtlusi, võite meiega ühendust võtta allpool kommenteerides.