în acest articol, vom afla despre ce este protocolul de comunicare I2C, hardware-ul său, modul în care sunt transferate datele și diferitele configurații în care funcționează.
schiță
Introducere în comunicarea I2C
comunicarea I2C este forma scurtă pentru circuitele inter-integrate., Acesta este un protocol de comunicare dezvoltat de Philips Semiconductors pentru transferul de date între un procesor central și mai multe ICs pe același circuit folosind doar două comune fire.
Datorită simplității sale, este adoptat pe scară largă pentru comunicare între microcontrolere și matrice de senzori, display-uri, dispozitive IoT, Eeprom etc.
acesta este un tip de protocol de comunicare serială sincronă. Aceasta înseamnă că biții de date sunt transferați unul câte unul la intervale regulate de timp stabilite de o linie de ceas de referință.,
caracteristici
următoarele sunt câteva dintre caracteristicile importante ale Protocolului de comunicare I2C:
- doar două linii de autobuz comune (fire) sunt necesare pentru a controla orice dispozitiv/IC din rețeaua I2C
- nu este nevoie de un acord prealabil cu privire la rata de transfer de date ca în comunicarea UART. Deci, viteza de transfer de date poate fi ajustată ori de câte ori este necesar
- mecanism simplu de validare a datelor transferate
- utilizează un sistem de adresare pe 7 biți pentru a viza un anumit dispozitiv/IC pe magistrala I2C
- rețelele I2C sunt ușor de scalat., Noile dispozitive pot fi pur și simplu conectate la cele două linii comune de autobuz I2C
Hardware
magistrala fizică I2C
magistrala I2C (fire de interfață) este formată din doar două fire și sunt denumite linie de ceas Serial (SCL) și linie de date seriale (SDA). Datele care trebuie transferate sunt trimise prin firul SDA și sunt sincronizate cu semnalul de ceas de la SCL. Toate dispozitivele/ICs pe I2C de rețea sunt conectate la aceeași SCL și SDA linii așa cum se arată mai jos:
Ambele I2C linii de autobuz (SDA, SCL) sunt operate ca de scurgere deschise drivere., Înseamnă că orice dispozitiv / IC din rețeaua I2C poate conduce SDA și SCL scăzut, dar nu le poate conduce ridicat. Deci, un rezistor de tracțiune este utilizat pentru fiecare linie de autobuz, pentru a le menține în mod implicit (la tensiune pozitivă).
motivul pentru utilizarea unui sistem de scurgere deschisă este că nu vor exista șanse de scurtcircuit, ceea ce se poate întâmpla atunci când un dispozitiv încearcă să tragă linia înaltă și un alt dispozitiv încearcă să tragă linia joasă.
dispozitive Master și Slave
dispozitivele conectate la magistrala I2C sunt clasificate fie ca maeștri, fie ca sclavi., În orice moment de timp, doar un singur maestru rămâne activ pe autobuzul I2C. Acesta controlează linia de ceas SCL și decide ce operație trebuie făcută pe linia de date SDA.toate dispozitivele care răspund la instrucțiunile de la acest dispozitiv principal sunt sclavi. Pentru diferențierea între mai multe dispozitive slave conectate la aceeași magistrală I2C, fiecărui dispozitiv slave I se atribuie fizic o adresă permanentă pe 7 biți.
când un dispozitiv master dorește să transfere date către sau de la un dispozitiv slave, specifică această adresă particulară a dispozitivului slave pe linia SDA și apoi continuă cu transferul., Deci, comunicarea eficientă are loc între dispozitivul principal și un anumit dispozitiv slave.toate celelalte dispozitive slave nu răspund decât dacă adresa lor este specificată de dispozitivul principal pe linia SDA.
protocol de Transfer de date
următorul protocol (set de reguli) este urmat de dispozitive master și slave pentru transferul de date între ele.
datele sunt transferate între dispozitivul principal și dispozitivele slave printr-o singură linie de date SDA, prin secvențe modelate de 0 și 1 (biți)., Fiecare secvență de 0 și 1 este numit ca o tranzacție și datele din fiecare tranzacție este structurat ca mai jos:
Stare de Start
ori de câte ori un dispozitiv master/IC decide să înceapă o tranzacție, se trece linia SDA de la înaltă tensiune la un nivel scăzut nivel de tensiune înainte de SCL linie de switch-uri de la mare la mic.odată ce o condiție de pornire este trimisă de dispozitivul principal, toate dispozitivele slave devin active chiar dacă sunt în modul de repaus și așteaptă biții de adresă.,
Adresa Bloc
Acesta cuprinde de 7 biți și sunt umplute cu adresa de slave device de la/la care dispozitivul master are nevoie de a trimite/primi date. Toate dispozitivele slave de pe magistrala I2C compară acești biți de adresă cu adresa lor.
Citire / Scriere Bit
acest bit specifică direcția de transfer de date. Dacă dispozitivul principal / IC trebuie să trimită date către un dispozitiv slave, acest bit este setat la „0”. Dacă IC-ul principal trebuie să primească date de la dispozitivul slave, acesta este setat la „1”.,
ACK/NACK Pic
reprezintă Recunoscut/Nu-a Recunoscut pic. Dacă adresa fizică a oricărui dispozitiv slave coincide cu adresa difuzată de dispozitivul principal, valoarea acestui bit este setată la ” 0 ” de dispozitivul slave. În caz contrar, rămâne la logica ” 1 ” (implicit).
Bloc de date
acesta cuprinde 8 biți și sunt setate de expeditor, cu biții de date de care are nevoie pentru a transfera la receptor., Acest bloc este urmat de un bit ACK/NACK și este setat la ” 0 ” de către receptor dacă primește cu succes date. În caz contrar, rămâne la logica „1”.această combinație de bloc de date urmată de ACK / Nack bit se repetă până când datele sunt transferate complet.
stare de oprire
după ce blocurile de date necesare sunt transferate prin linia SDA, dispozitivul principal comută linia SDA de la nivelul de joasă tensiune la nivelul de înaltă tensiune înainte ca linia SCL să comute de la înalt la scăzut.,
notă: logica ” 0 „sau setarea unui pic la” 0 ” este echivalentă cu aplicarea de joasă tensiune pe linia SDA și invers.
cum funcționează practic comunicarea I2C?
o comunicare/tranzacție I2C este inițiată de un dispozitiv master, fie pentru a trimite date către un dispozitiv slave, fie pentru a primi date de la acesta. Să învățăm despre lucrul ambelor scenarii în detaliu.,
Trimiterea de Date de la un Dispozitiv Slave
următoarea secvență de operații au loc atunci când un dispozitiv master încearcă pentru a trimite date la un anumit sclav dispozitiv prin magistrala I2C:
- dispozitivul master trimite stare de start
- dispozitivul master trimite 7 bitii care corespunde cu dispozitivul slave să fie direcționate
- dispozitivul master seturi de Citire/Scriere pic la „0”, ceea ce semnifică o scrie
- Acum două scenarii sunt posibile:
- Dacă nu sclav dispozitivul se potrivește cu adresa trimisă de către comandantul de dispozitiv, următoarea ACK/NACK pic stă la ‘1’ (implicit)., Aceasta semnalează dispozitivului principal că identificarea dispozitivului slave nu reușește. Master ceas se va încheia tranzacția curentă prin trimiterea unui Stop condiție sau o nouă stare de Start
- Dacă un dispozitiv slave există cu aceeași adresă ca cel specificat de dispozitiv master, dispozitivul slave stabilește ACK/NACK pic la „0”, care semnalează dispozitiv master ca un sclav dispozitiv este vizat cu succes
- Dacă un sclav cu succes a dispozitivului vizat, dispozitivul master trimite acum 8 biți de date care este luată în considerare numai și primite de către vizate sclav dispozitiv., dispozitivul care controlează fiecare dintre ele:
Citirea Datelor de pe un Dispozitiv Sclav
secvența de operații rămân aceleași ca și în anii scenariu cu excepția următoarelor:
- dispozitivul master seturi de Citire/Scriere pic la ” 1 „în loc de” 0 ” care semnalele vizate sclav dispozitiv care dispozitivul master se așteaptă date de la ea
- 8 biți corespunzătoare bloc de date sunt trimise către dispozitivul slave și ACK/NACK bit este setat prin dispozitivul master
- Odată ce datele necesare sunt primite de către dispozitivul master, trimite un NACK pic., Apoi dispozitivul slave nu mai trimite date și eliberează linia SDA
dacă dispozitivul principal citește date din locația internă specifică a unui dispozitiv slave, trimite mai întâi datele de locație către dispozitivul slave folosind pașii din scenariul anterior. Apoi începe procesul de citire a datelor cu o condiție de pornire repetată.,
figura De mai jos reprezintă datele generale de biți a trimis pe linia SDA și dispozitivul care controlează fiecare dintre ele:
Conceptul de ceas se întinde
Să spunem dispozitivul master început o tranzacție și a trimis adresa de biți dintr-un anumit sclav dispozitiv urmat de Citit un pic de ‘1’. Dispozitivul slave specific trebuie să trimită un bit ACK, urmat imediat de date.dar dacă dispozitivul slave are nevoie de ceva timp pentru a prelua și trimite date către dispozitivul master, în timpul acestui decalaj, dispozitivul master va crede că dispozitivul slave trimite unele date.,pentru a preveni acest lucru, dispozitivul slave menține linia ceasului SCL scăzută până când este gata să transfere biți de date. Procedând astfel, dispozitivul slave semnalează dispozitivului principal să aștepte biți de date până când linia de ceas este eliberată.
asta este pentru acest articol. Aruncați o privire la proiectele de mai jos pentru a vă face o idee despre modul în care comunicarea I2C este practic implementată, între microcontrolere/Arduinos și diferiți senzori:
sistem de parcare bazat pe RFID
interfațarea Arduino cu o unitate de procesor de mișcare
interfațarea Arduino cu ceas în timp real