Tutorial protocol I2C autobuz, interfață cu aplicații

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În prezent protocoalele joacă un rol esențial în proiectarea sistemului încorporat . Fără a merge la protocoale, dacă doriți să extindeți caracteristicile periferice ale microcontrolerului, complexitatea și consumul de energie vor crește. Există diferite tipuri de protocoale de magistrală disponibile, cum ar fi USART, SPI, CAN, Protocolul autobuzului I2C , etc., care sunt utilizate pentru transferul de date între două sisteme.

Protocolul I2C

Ce este autobuzul I2C?




Transmiterea și primirea informațiilor între două sau mai multe dispozitive necesită o cale de comunicație numită sistem de magistrală. O magistrală I2C este o magistrală serial bidirecțională cu două fire care este utilizată pentru transportul datelor între circuite integrate. I2C înseamnă „Circuit integrat inter”. A fost introdus pentru prima dată de semiconductorii Philips în 1982. Autobuzul I2C constă din trei viteze de transfer de date, cum ar fi modul standard, modul rapid și modul de mare viteză. Autobuzul I2C acceptă dispozitiv de spațiu de adrese pe 7 biți și 10 biți și funcționarea sa diferă cu tensiuni reduse.

Protocolul I2c Bus

Protocolul I2c Bus



Linii de semnal I2C

Linii de semnal I2C

Linii de semnal I2C

I2C este un protocol de magistrală serială format din două linii de semnal, cum ar fi liniile SCL și SDL, care sunt utilizate pentru a comunica cu dispozitivele. SCL reprezintă o „linie de ceas serial” și acest semnal este acționat întotdeauna de „dispozitivul principal”. SDL reprezintă „linia de date seriale”, iar acest semnal este acționat fie de perifericele master, fie de cele periferice I2C. Ambele linii SCL și SDL sunt în stare open-drain atunci când nu există transfer între perifericele I2C.

Ieșiri Open-Drain


Golul deschis este concept pentru tranzistorul FET în care terminalul de scurgere al tranzistorului este deschis. Pinii SDL și SCL ai dispozitivului master sunt proiectați cu tranzistoarele în stare deschisă, astfel încât transferul de date este posibil numai atunci când sunt efectuate aceste tranzistoare. Prin urmare, aceste linii sau terminale de scurgere sunt conectate cu rezistențe de tracțiune complete la VCC pentru modul de conducție.

Interfețe I2C

Mulți dispozitivele slave sunt interfațate la microcontroler cu ajutorul magistralei I2C prin intermediul schimbătorului de nivel I2C IC pentru transferul informațiilor între ele. Protocolul I2C utilizat pentru a conecta maximum 128 de dispozitive care sunt toate conectate pentru a comunica cu liniile SCL și SDL ale unității master, precum și cu dispozitivele slave. Suportă comunicarea Multimaster, ceea ce înseamnă că sunt folosiți doi master pentru a comunica dispozitivele externe.

Tarife de transfer de date I2C

Protocolul I2C operează trei moduri, cum ar fi: modul rapid, modul de mare viteză și modul standard în care viteza datelor din modul standard variază de la 0Hz la 100Hz, iar datele din modul rapid se pot transfera cu viteza de la 0Hz la 400 KHz și modul de viteză mare cu 10 KHz la 100KHz. Datele de 9 biți sunt trimise pentru fiecare transfer în care 8 biți sunt trimiși de transmițătorul MSB către LSB, iar cel de-al 9-lea bit este un bit de confirmare trimis de receptor.

Tarife de transfer de date I2C

Tarife de transfer de date I2C

Comunicare I2C

Protocolul de magistrală I2C este cel mai frecvent utilizat în comunicarea master și slave în care masterul este numit „microcontroler”, iar slave-ul este numit alte dispozitive precum ADC, EEPROM, DAC și dispozitive similare din sistemul încorporat. Numărul de dispozitive slave este conectat la dispozitivul master cu ajutorul magistralei I2C, în care fiecare slave constă dintr-o adresă unică pentru al comunica. Următorii pași sunt utilizați pentru a comunica dispozitivul principal către sclav:

Pasul 1: În primul rând, dispozitivul master emite o condiție de pornire pentru a informa toate dispozitivele slave, astfel încât acestea să asculte pe linia de date seriale.

Pasul 2: Dispozitivul master trimite adresa dispozitivului slave țintă, care este comparată cu toate adresele dispozitivelor slave, conectate la liniile SCL și SDL. Dacă adresa cuiva se potrivește, dispozitivul respectiv este selectat, iar celelalte dispozitive rămase sunt deconectate de la liniile SCL și SDL.

Pasul 3: Dispozitivul sclav cu o adresă potrivită primită de la comandant, răspunde cu o confirmare către comandant, ulterior, comunicarea se stabilește atât între dispozitivele master, cât și dispozitivele slave pe magistrala de date.

Pasul 4: Atât stăpânul, cât și sclavul primesc și transmit datele în funcție de comunicarea citită sau scrisă.

Pasul 5: Apoi, masterul poate transmite 8 biți de date către receptor, care răspunde cu o confirmare de 1 biți.

Tutorial I2C

Transmiterea și primirea informațiilor pas cu pas în serie în ceea ce privește impulsurile de ceas se numește protocol I2C. Este un protocol inter-sistem și pe distanțe scurte, ceea ce înseamnă că este utilizat în cadrul plăcii de circuite pentru a comunica dispozitivele master și slave.

Bazele protocolului I2C

În general, sistemul de magistrală I2C constă din două fire care sunt utilizate cu ușurință pentru a extinde caracteristicile periferice de intrare și ieșire, cum ar fi ADC, EEROM și RTC și alte componente de bază pentru a crea un sistem a cărui complexitate este foarte mică.

Exemplu: Întrucât microcontrolerul 8051 nu are ADC încorporat - deci, dacă dorim să interfațăm senzori analogici cu microcontrolerul 8051 - trebuie să folosim dispozitive ADC precum ADC0804-1 ADC canal, ADC0808- ADC 8 canale etc. Prin utilizarea acestor ADC, putem interfața senzorii analogici cu microcontrolerul.

Fără a utiliza protocolul pentru a extinde caracteristicile I / O ale oricărui microcontroler sau procesor, putem merge la dispozitivul 8255 ICit cu 8 pini. Microcontrolerul 8051 este un microcontroler cu 40 de pini utilizând 8255 IC, putem extinde porturile 3-I / O cu 8 pini în fiecare port. Prin utilizarea tuturor dispozitivelor precum RTC, ADC, EEPROM, cronometre etc. - pentru extinderea circuitelor periferice - complexitatea, costul, consumul de energie și dimensiunea produsului sunt, de asemenea, crescute.

Pentru a depăși această problemă, conceptul de protocol vine în imagine pentru a reduce complexitatea hardware și consumul de energie. Putem extinde mai multe funcții, cum ar fi periferice I / 0, ADC-uri, T / C și dispozitive de memorie până la 128 de dispozitive utilizând acest protocol I2C.
Terminologie utilizată în protocoalele I2C

Transmiţător: Dispozitivul care trimite date către magistrală se numește transmițător.

Receptor: Dispozitivul care primește date de la magistrală se numește receptor.

Maestru: Dispozitivul care inițiază transferuri pentru a genera un semnal de ceas și a termina un transfer se numește master.

Sclav: Dispozitivul adresat de un maestru se numește sclav.

Multimaster: Mai mult de un master poate încerca să controleze autobuzul în același timp, fără a corupe mesajul, se numește Multimaster.

Arbitraj: Procedură pentru a se asigura că, dacă mai mulți master încearcă simultan să controleze autobuzul - numai unul este autorizat să facă acest lucru, mesajul câștigător nu este corupt.

Sincronizare: Procedura de sincronizare a ceasurilor de două sau mai multe dispozitive se numește sincronizare.

I2C Secvența comenzilor de bază

  1. Start Bit Condition
  2. Opriți starea bitului
  3. Condiție de recunoaștere
  4. Operație de scriere master to slave
  5. Citiți Operațiunea Slave to Master

Start și Stop Bit Condition

Când masterul (microcontrolerul) dorește să vorbească cu un dispozitiv slave (de exemplu ADC), acesta începe comunicarea prin emiterea unei condiții de pornire pe magistrala I2C și apoi emite o condiție de oprire. Nivelurile logice de pornire și oprire I2C sunt prezentate în figură.

Condiția de pornire I2C se definește ca o tranziție ridicată la scăzută a liniei SDA, în timp ce linia SCL este ridicată. O condiție de oprire I2C apare atunci când linia SDA comută de la scăzut la înalt în timp ce linia SCL este ridicată.

Masterul I2C generează întotdeauna condițiile S și P. Odată ce masterul I2C inițiază o condiție START, magistrala I2c este considerată ca fiind în stare ocupată.

Start și Stop Bit Condition

Start și Stop Bit Condition

Programare:

START Condiție:

sbit SDA = P1 ^ 7 // inițializează pinii SDA și SCL ai microcontrolerului //
sbit SCL = P1 ^ 6
întârziere nulă (int semnat)
void main ()
{
SDA = 1 // prelucrarea datelor //
SCL = 1 // ceasul este mare //
întârziere()
SDA = 0 // a trimis datele //
întârziere()
SCL = 0 // semnalul ceasului este scăzut //
}
Întârziere nulă (int p)
{
unsignedinta, b
Pentru (a = 0a<255a++) //delay function//
Pentru (b = 0b}

STOP STARE:

void main ()
{
SDA = 0 // Opriți procesarea datelor //
SCL = 1 // ceasul este mare //
întârziere()
SDA = 1 // Oprit //
întârziere()
SCL = 0 // semnalul ceasului este scăzut //
}
Întârziere nulă (int p)
{
unsignedinta, b
Pentru (a = 0a<255a++) //delay function//
Pentru (b = 0b}

Condiție de confirmare (ACK) și Fără confirmare (NCK)

Fiecare octet transmis prin magistrala I2C este urmat de o condiție de confirmare de la receptor, ceea ce înseamnă că, după ce masterul trage SCL jos pentru a finaliza transmisia de 8 biți, SDA va fi tras de către receptor către master. Dacă, după ce transmisia receptorului nu trage, linia SDA LOW este considerată a fi o condiție NCK.

Recunoaștere (ACK)

Recunoaștere (ACK)

Programare

Confirmare
void main ()
{
SDA = 0 // Linia SDA merge la minim //
SCL = 1 // ceasul este mare la mic //
întârziere (100)
SCL = 0
}
Fără recunoaștere:
void main ()
{
SDA = 1 // Linia SDA merge la mare //
SCL = 1 // ceasul este mare la mic //
întârziere (100)
SCL = 0
}

Operațiunea Master to Slave scrie

Protocolul I2C transferă datele sub formă de pachete sau octeți. Fiecare octet este urmat de un bit de confirmare.

Format de transfer de date

Format de transfer de date

Format de transfer de date

Start: În primul rând, secvența de transfer de date inițiată de master generând condiția de pornire.

Adresă pe 7 biți: După aceea, masterul trimite adresa slave în două formate de 8 biți în loc de o singură adresă de 16 biți.

R / W: Dacă bitul de citire și scriere este ridicat, atunci se efectuează operația de scriere.

VAI: Dacă operația de scriere se efectuează pe dispozitivul slave, atunci receptorul trimite ACK-ul de 1 bit la microcontroler.

Stop: După finalizarea operației de scriere în dispozitivul slave, microcontrolerul trimite starea de oprire dispozitivului slave.

Programare

Operațiune de scriere

voidwrite (caractere nesemnate d)
{
Char nesemnat k, j = 0x80
Pentru (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
întârziere (4)
SCL = 0
}
SDA = 1
SCL = 1
întârziere (2)
c = SDA
întârziere (2)
SCL = 0
}

Operațiunea Master to Slave Read

Datele sunt citite înapoi de pe dispozitivul slave sub formă de biți sau octeți - citiți mai întâi cel mai semnificativ bit și citiți ultimul bit cel mai puțin semnificativ.

Formatul de citire a datelor

Format citire date

Format citire date

Start: În principal, secvența de transfer de date este inițiată de masterul care generează condiția de pornire.

Adresă pe 7 biți: După aceea, masterul trimite adresa slave în două formate de 8 biți în loc de o singură adresă de 16 biți.

R / W: Dacă bitul de citire și scriere este scăzut, atunci se efectuează operația de citire.

VAI: Dacă operația de scriere se efectuează pe dispozitivul slave, atunci receptorul trimite ACK-ul de 1 bit la microcontroler.

Stop: După finalizarea operației de scriere în dispozitivul slave, microcontrolerul trimite starea de oprire dispozitivului slave.

Programare

Citire nulă ()
{
Char nesemnat j, z = 0x00, q = 0x80
SDA = 1
pentru (j = 0j<8j++)
{
SCL = 1
întârziere (100)
flag = SDA
if (flag == 1)
q)
q = q >> 1
întârziere (100)
SCL = 0

Exemplu practic de interfațare ADC cu microcontrolerul 8051

ADC este un dispozitiv care este utilizat pentru a converti datele analogice sub formă de digital și digital în analog. Microcontrolerul 8051 nu are un ADC încorporat, deci trebuie să adăugăm extern prin protocolul I2C. PCF8591 este bazat pe I2C analogic la digital și convertorul digital la analog. Acest dispozitiv poate suporta maximum 4 canale de intrare analogice, împreună cu tensiuni de 2,5 până la 6v.

Ieșiri analogice

Ieșirile analogice vin sub formă de tensiuni. De exemplu, senzorul analogic de 5v oferă logică de ieșire de la 0,01v la 5v.
Valoarea digitală maximă de 5v este = 256.
Valoarea de 2,5v este = 123 în funcție de valoarea tensiunii maxime.

Formula ieșirii analogice este:

Formula ieșirilor digitale:

Interfață ADC cu microcontrolerul 8051

Interfață ADC cu microcontrolerul 8051

Figura de mai sus arată transferul de date folosind protocolul I2C de la dispozitivul ADC la microcontrolerul 8051. Pinii ADC ai SCL și SDA sunt conectați la pinii 1.7 și 1.6 ai microcontrolerului pentru stabilirea comunicării între ei. Când senzorul oferă valori analogice ADC, acesta se convertește în digital și transferă date către microcontroler prin protocolul I2C.

Este vorba despre tutorialul de protocol I2C bus cu programe adecvate. Sperăm că conținutul dat vă oferă un concept practic de interfață a mai multor dispozitive cu microcontrolere folosind comunicația I2C. Dacă aveți vreo îndoială cu privire la procedura de interfață a acestui protocol, ne puteți contacta comentând mai jos.