Articles

Elementele de bază de Protocol de Comunicare I2C

Posted by admin

până acum, am vorbit despre elementele de bază de comunicare SPI și UART comunicare, astfel încât acum să mergem în protocolul final al acestei serii, Inter-Integrated Circuit, sau I2C.

Veți găsi, probabil, te folosind I2C dacă ai construi proiecte care folosesc ecrane OLED, senzori de presiune barometrică, sau giroscop/accelerometru module.

Introducere în comunicarea I2C

I2C combină cele mai bune caracteristici ale SPI și UARTs., Cu I2C, puteți conecta mai mulți sclavi la un singur maestru (cum ar fi SPI) și puteți avea mai mulți maeștri care controlează sclavi unici sau mai mulți. Acest lucru este foarte util atunci când doriți să aveți mai mult de un microcontroler care înregistrează date pe un singur card de memorie sau afișează text pe un singur LCD.

Ca UART comunicare, I2C folosește doar două fire pentru a transmite date între dispozitive:

SDA (Serial Data) – linia pentru master și slave pentru a trimite și primi date.

SCL (ceas Serial) – linia care poartă semnalul ceasului.,I2C este un protocol de comunicare serial, astfel încât datele sunt transferate bit cu bit de-a lungul unui singur fir (linia SDA).la fel ca SPI, I2C este Sincron, astfel încât ieșirea de biți este sincronizată cu eșantionarea de biți printr-un semnal de ceas partajat între master și slave. Semnalul ceasului este întotdeauna controlat de comandant.

Cum I2C Funcționează

Cu I2C, datele sunt transferate în mesaje. Mesajele sunt împărțite în cadre de date., Fiecare mesaj are un cadru de adresă care conține adresa binară a sclavului și unul sau mai multe cadre de date care conțin datele transmise. Mesajul include, de asemenea, porni și opri condiții, citire/scriere biți, și ACK/NACK biți între fiecare cadru de date:

Stare de Start: linia SDA trece de la o tensiune ridicată la un nivel scăzut nivel de tensiune înainte de SCL linie de switch-uri de la mare la mic.

stare de oprire: linia SDA comută de la un nivel de joasă tensiune la un nivel de înaltă tensiune după ce linia SCL comută de la scăzut la înalt.,

cadru de adrese: o secvență de 7 sau 10 biți unică pentru fiecare sclav care identifică sclavul atunci când maestrul dorește să vorbească cu acesta.

Bit de citire / scriere: un singur bit specificând dacă comandantul trimite date către slave (nivel de joasă tensiune) sau solicită date de la acesta (nivel de înaltă tensiune).

ACK / Nack Bit: fiecare cadru dintr-un mesaj este urmat de un bit de confirmare/nu de confirmare. Dacă un cadru de adresă sau un cadru de date a fost primit cu succes, un bit ACK este returnat expeditorului de pe dispozitivul de primire.,

adresarea

I2C nu are linii de selectare slave, cum ar fi SPI, deci are nevoie de un alt mod de a lăsa sclavul să știe că datele sunt trimise către el și nu un alt sclav. Ea face acest lucru prin abordarea. Cadrul de adrese este întotdeauna primul cadru după bitul de pornire într-un mesaj nou.

stăpânul trimite adresa sclavului cu care dorește să comunice fiecărui sclav conectat la acesta. Fiecare sclav compară apoi adresa trimisă de la maestru la propria sa adresă. Dacă adresa se potrivește, trimite un bit ACK de joasă tensiune înapoi la master., Dacă adresa nu se potrivește, sclavul nu face nimic și linia SDA rămâne ridicată.

bit de citire / scriere

cadrul de adrese include un singur bit la sfârșit care informează sclavul dacă comandantul dorește să scrie date sau să primească date de la acesta. Dacă comandantul dorește să trimită date sclavului, bitul de citire/scriere este un nivel de joasă tensiune. Dacă comandantul solicită date de la sclav, bitul este un nivel de înaltă tensiune.

cadrul de date

după ce maestrul detectează bitul ACK de la slave, primul cadru de date este gata de a fi trimis.,

cadrul de date are întotdeauna o lungime de 8 biți și este trimis mai întâi cu cel mai semnificativ bit. Fiecare cadru de date este urmat imediat de un bit ACK/NACK pentru a verifica dacă cadrul a fost primit cu succes. Bitul ACK trebuie să fie primit fie de master, fie de slave (în funcție de cine trimite datele) înainte ca următorul cadru de date să poată fi trimis.după ce toate cadrele de date au fost trimise, comandantul poate trimite o condiție de oprire sclavului pentru a opri transmisia., Starea de oprire este o tranziție de tensiune de la scăzut la mare pe linia SDA după o tranziție scăzută la mare pe linia SCL, linia SCL rămânând ridicată.

pașii de transmitere a datelor I2C

1. Comandantul trimite starea de pornire la fiecare slave conectat prin comutarea liniei SDA de la un nivel de înaltă tensiune la un nivel de joasă tensiune înainte de a comuta linia SCL de la mare la scăzut:

2., Maestrul trimite fiecărui sclav adresa de 7 sau 10 biți a sclavului cu care dorește să comunice, împreună cu bitul de citire/scriere:

3. Fiecare sclav compară adresa trimisă de la maestru la propria sa adresă. Dacă adresa se potrivește, sclavul returnează un bit ACK trăgând linia SDA scăzută pentru un bit. Dacă adresa de la maestru nu se potrivește cu adresa proprie a sclavului, sclavul părăsește linia SDA ridicată.

4. Comandantul trimite sau primește cadrul de date:

5., După ce fiecare cadru de date a fost transferat, dispozitivul receptor returnează un alt bit ACK expeditorului pentru a confirma primirea cu succes a cadrului:

6. Pentru a opri transmiterea datelor, master transmite un stop starea de sclav prin trecerea SCL mare înainte de trecerea SDA mare:

Master Singur cu mai Multe Sclavi

Pentru I2C utilizează abordarea, mai multe sclavii pot fi controlate de la un singur master. Cu o adresă de 7 biți, 128 (27) adresa unică sunt disponibile., Utilizarea adreselor pe 10 biți este neobișnuită, dar oferă 1,024 (210) adrese unice. Pentru a conecta mai multe sclavi la un singur maestru, sârmă le place acest lucru, cu 4,7 K Ohm rezistorilor conectați SDA și SCL linii la Vcc:

mai Multe de Masterat cu mai Multe Sclavi

mai Multe de masterat pot fi conectate la un singur sclav sau mai multe sclavi. Problema cu mai mulți maeștri din același sistem vine atunci când doi maeștri încearcă să trimită sau să primească date în același timp pe linia SDA., Pentru a rezolva această problemă, fiecare maestru trebuie să detecteze dacă linia SDA este scăzută sau ridicată înainte de a transmite un mesaj. Dacă linia SDA este scăzută, aceasta înseamnă că un alt maestru are controlul autobuzului, iar comandantul ar trebui să aștepte să trimită mesajul. Dacă linia SDA este ridicată, atunci este sigur să transmiteți mesajul. Pentru a conecta mai mulți maeștri la mai mulți sclavi, utilizați următoarea diagramă, cu 4.,utilizarea I2C pentru conectarea la un dispozitiv special:

Avantaje

  • folosește Doar două fire
  • Suporta mai multe de masterat și mai multe sclavi
  • ACK/NACK biți oferă confirmarea că fiecare cadru este transferat cu succes
  • Hardware-ul este mai puțin complicat decât cu Uart
  • Bine cunoscute și utilizate pe scară largă protocol

Dezavantaje

  • transfer de date mai rapid decât SPI
  • dimensiunea cadrului de date este limitat la 8 biți
  • Mai complicat hardware-ul necesar pentru a pune în aplicare decât SPI

vă Mulțumim pentru citirea!, Sper că ați învățat ceva din această serie de articole despre protocoalele de comunicații electronice. În cazul în care nu le-ați citit deja, prima parte acoperă protocolul de comunicare SPI, iar partea a doua acoperă comunicarea condusă de UART.

Leave A Comment