Uploaded by Alexandru Nicoara

interfata i2c

advertisement
Interfat, a I2C
Nicoară Alexandru
Departamentul de Electronică s, i Calculatoare
Universitatea ”Transilvania” din Bras, ov
Bras, ov, România
alexandru.nicoara@student.unitbv.ro
Nr. matricol: 9192
Abstract—Protocolul I2C este unul dintre cele mai puternice
protocoale folosite pentru comunicat, ia ı̂ntre dispozitive de tip
master s, i dispozitive de tip slave. Comunicat, ia este sincronă,
bidirect, ională, realizată printr-o magistrală de date numită s, i
bus I2C. La această magistrală sunt conectate toate dispozitivele
I2C folosite. Acest standard de comunicat, ie este ı̂ntr-o continuă
dezvoltare s, i perfect, ionare, ı̂n total existând cinci versiuni ale
acestuia.
Index Terms—magistrală, protocol, master, slave, clock, semnal, I2C
I. I NTRODUCERE
Unul dintre cele mai populare protocoale de comunicat, ie
este protocolul I2C, numit uneori s, i IIC care ı̂nseamnă ”InterIntegrated Circuit”. De asemenea, poate fi găsit s, i sub denumirea de I2 C. Acest standard de comunicat, ie a fost dezvoltat
la sfârs, itul anilor 1970 de către compania Philips Semiconductors, companie care acum se numes, te NXP Semiconductors.[1]. După cum se poate observa s, i din nume, acest protocol
a fost creat pentru comunicarea mai simplă ı̂ntre circuitele
integrate. Mai târziu, acest protocol a ı̂nceput să fie folosit
s, i la interconectarea diferitelor componente s, i senzori cu un
microcontroller. Înainte de aparit, ia protocolului I2C, se folosea
maparea memoriei I/O pentru a comunica ı̂ntre circuitele
integrate, fapt care ocupa o mult, ime de pini I/O.[4] Datorită
us, urint, ei cu care poate fi utilizat, acest protocol a devenit un
standard, fiind implementat ı̂n peste 1000 de circuite integrate
s, i microcontrollere apart, inând a mai mult de 50 de companii.
Pentru a putea observa simplitatea acestui tip de comunicat, ie,
ı̂n figura 1 este afis, ată o aplicat, ie I2C cu mai multe dispozitive
conectate doar prin două fire, SDA s, i SCL. [1]
II. D ESCRIEREA TERMENILOR ÎNT ÂLNIT, I LA
PROTOCOLULUI I2C
Pentru a putea ı̂nt, elege mai bine funct, ionarea protocolului
I2C se vor explica termenii folosit, i la descrierea funct, ionării.
• transmit, ătorul: este dispozitivul care trimite un mesaj.
Transmit, ătorul s, i receptorul pot să ı̂s, i inverseze rolurile
ı̂n funct, ie de necesitate.
• receptorul: dispozitivul care recept, ionează mesajul
• master sau gazdă: reprezintă dispozitivul care transmite
semnalul SCL s, i controlează transferul.
• slave: este dispozitivul controlat de către master.
• multi-master: ı̂n cazul ı̂n care apare situat, ia când două
sau mai multe dispozitive master ı̂ncearcă să controleze
magistrala ı̂n acelas, i timp fără a deteriora datele sau
mesajele care se transmit pe magistrală, dispozitivele se
numesc dispozitive Multi-master.
• arbitrare: prin această procedură se asigură faptul că, ı̂n
cazul ı̂n care mai mult de un dispozitiv master ı̂ncearcă
simultan să controleze magistrala, doar unul dintre aceste
dispozitive va avea permisiunea să o facă, astfel ı̂ncât
datele transmise nu sunt alterate.
• sincronizare: este procedura prin care se sincronizează
semnalul clock cu unul sau mai multe dispozitive.
• SDA: vine de la prescurtarea ”Serial data line” s, i
reprezintă linia sau magistrala de date prin care se
efectuează transmiterea tuturor datelor.
• SCK: prescurtare obt, inută din init, ialele cuvintelor ”Serial clock line”, pe această linie se transmite semnalul
clock folosit la sincronizarea dispozitivelor s, i a datelor
transmise. [1]
III. D ESCRIEREA FUNCT, ION ĂRII PROTOCOLULUI I2C
În sistemele de tip embedded, protocoalele de comunicare
pot fi ı̂mpărt, ite ı̂n două nivele: nivelul fizic(physical layer),
respectiv nivelul de protocol(protocol layer).
A. Nivelul fizic
Fig. 1. Exemplu de aplicat, ie I2C cu mai multe dispozitive conectate. [2]
Nivelul fizic asigură transmiterea datelor prin intermediul
mediului fizic. Fat, ă de alte protocoale de comunicat, ie, protocolul I2C necesită doar două magistrale de date, SDA
respectiv SCL, ambele fiind magistrale bidirect, ionale. Magistrala SDA asigură transmiterea datelor pe când magistrala
SCL este folosită pentru sincronizarea datelor transmise sau
recept, ionate. Atât magistrala SDA cât s, i magistrala SCL au
nevoie de o rezistent, ă de pull-up. Atunci când magistralele
sunt libere, acestea vor avea starea HIGH. În momentul ı̂n
care un dispozitiv este conectat, nivelul logic va fi LOW. La
o singură magistrală I2C se pot conecta simultan o mult, ime
de dispozitive, numărul maxim al acestora fiind 128 de dispozitive. Limitarea ı̂n ceea ce prives, te numărul maxim de
dispozitive este dată de adresarea pe 8 bit, i. Totus, i, se poate
cres, te numărul maxim de dispozitive pe o magistrală până la
1023, prin adresarea pe 10 bit, i. Cu toate acestea, adresarea pe
10 bit, i este ı̂ntâlnită destul de rar ı̂n practică. Atunci când la
magistrala I2C sunt conectate mai multe dispozitive, adresarea
se face printr-o adresă de 7 bit, i specificată de producător.
Primii 4 bit, i sunt fics, i, respectiv ultimii 3 bit, i sunt adresa
proprie a dispozitivului. Masterul este un modul logic cu o
unitate de procesare centrală(CPU) care init, ializează transferul
de date s, i generează semnalul clock fără de care transmisia
nu este posibilă. Unitatea de procesare centrală utilizează
adresa proprie a fiecărui dispozitiv pentru a i se adresa, astfel
dispozitivul adresat se numes, te slave. Protocolul I2C suportă
doar transmisie ı̂ntre master s, i mai multe dispozitive, numită
transmisie de tip ”one to many”, transmisia ”many to one”
nefiind posibilă. [3] În figura 2 se pot observa cele două
magistrale de transmisie a datelor.
•
Fig. 3. Controlul transmisiei prin semnalele start-stop.[4
•
Fig. 2. Nivelul fizic al protocolului I2C.[2]
B. Nivelul de protocol
Nivelul de protocol asigură logica de comunicare, respectiv
recept, ionarea s, i transmiterea corectă a datelor. Astfel, la
nivelul de protocol există mai multe semnale cu ajutorul cărora
informat, ia este transmisă corect, printre cele mai importante
fiind semnalele de start s, i stop, semnalul de validare a datelor,
semnalul de scriere sau citire dar s, i adresele de transmisie. În
continuare se vor descrie semnalele de la nivelul de protocol
al comunicat, iei I2C.
•
Semnalul de validare a datelor- ı̂n momentul ı̂n care se
transmit date pe magistrală ı̂n mod sincron(atunci când
fiecare bit corespunde unui semnal de clock), datele sunt
transmise bit cu bit pe linia SDA ı̂n concordant, ă cu
semnalul SCK. Cât timp semnalul SCL este ı̂n stare
HIGH, starea logică pe linia SDA trebuie să rămână
neschimbată. Starea logică pe linia SDA se poate schimba
doar pe frontul negativ al semnalului de ceas. Când
semnalul SCL este ı̂n starea HIGH, dispozitivul slave
recept, ionează primul bit de date. Pe acest principiu datele
sunt transmise până când se primes, te semnalul de stop.
Semnalele de start s, i stop: marchează ı̂nceputul respectiv
sfârs, itul transmisiei. Astfel, dacă semnalul de pe magistrala SDA se schimbă din stare logica HIGH ı̂n stare
logică LOW ı̂n timp ce nivelul logic de pe magistrala
SCL este HIGH, se marchează ı̂nceputul transmisiei.
Asemănător, dacă semnalul de pe magistrala SDA se
schimbă din stare logica LOW ı̂n stare logică HIGH, ı̂n
timp ce nivelul logic de pe magistrala SCL este HIGH,
se marchează oprirea transmisiei. Semnalele start s, i stop
se pot observa ı̂n figura 3.
Semnalele de răspuns s, i fără-răspuns: Având ı̂n vedere că
datele sunt transmise pe 8 bit, i s, i, respectiv, că semnalul
SCL se schimbă la fiecare transmisie a unui bit de
date, de fiecare dată când gazda termină de transmis
un byte aceasta cedează semnalul SDA pe durata celui
de-al nouălea puls de clock iar mai apoi as, teaptă de
la dispozitivul slave semnalul de acknowldege sau nonacknowledgement. Dacă dispozitiviul slave răspunde cu
un semnal LOW, asta ı̂nseamnă că răspunsul este valid,
indicând că dispozitivul slave a recept, ionat cu succes
ı̂ntregul byte, acest semnal fiind numit semnal de acknowldege. De asemenea, dacă răspunsul primit de la
dispozitivul slave este un semnal de stare logică HIGH,
transmisia este una es, uată, dispozitivul slave nereus, ind
să recept, ioneze ı̂ntregul byte, acest semnal se numes, te
semnal de non-acknowledgement. În cazul ı̂n care dispozitivul slave face ca semnalul SDA să fie ı̂n starea LOW
ı̂nainte de perioada negativă a celui de-al nouălea puls de
clock iar mai apoi semnalul SDA este stabil ı̂n starea
LOW pe perioada pozitivă a semnalului SCL, atunci
semnalul de acknowldege este confirmat. De asemenea,
ı̂n cazul ı̂n care gazda solicită date de la dispozitivul
slave s, i le primes, te, gazda este dispozitivul care face
solicitarea s, i astfel poate s, ti dacă a recept, ionat sau nu
ceva, nefiind nevoie să transmită dispozitivului slave
un feedback pentru a-l ı̂ns, tiint, a de acest lucru. După
ce gazda recept, ionează ultimul byte este transmis un
semnal de non-acknowledgement pentru a t, ine linia SDA
sincronizată cu semnalul de clock. Mai apoi dispozitivul
slave este ı̂ns, tiint, at să ı̂ncheie transmisia, acest lucru fiind
urmat de transmiterea unui semnal de stop de către gazdă.
În cazul ı̂n care dispozitivul master setează semnalul SDA
•
ı̂n stare HIGH ı̂n perioada LOW de dinaintea celui deal nouălea semnal de clock s, i ment, ine semnalul SDA ı̂n
stare HIGH pe perioada pozitivă a celui de-al nouălea
semnal de clock se consideră că este trimis un semnal de
non-acknowledgement.
procesul de scriere s, i citire: este procesul prin care se
scriu s, i se citesc date ı̂ntr-o aplicat, ie I2C. Pentru a se
scrie date se execută următoarea secvent, ă de act, iuni:
1) Dispozitivul gazdă init, ializează semnalul de start
după care trimite adresa I2C de 7 bit, i, as, teptând
ca dispozitivul slave să răspundă cu un semnal
ACK. Acest proces se numes, te ”adress broadcast”
ı̂n limba engleză, respectiv transmiterea adresei ı̂n
limba română.
2) Dispozitivul slave trimite gazdei un semnal de acknowledge(ACK).
3) Dispozitivul gazdă trimite adresa registrului (pe 8
bit, i), aceste date fiind datele transmise slave-ului,
după care se as, teaptă un mesaj de acknowledge de
la dispozitivul slave.
4) Dispozitivul slave transmite semnalul de acknowledge.
5) Dispozitivul gazdă transmite datele (pe 8 bit, i),
acestea fiind datele care vor fi scrise ı̂n regisrtul, as, teptând după aceea ca dispozitivul slave să
răspundă cu un semnal de acknowledge.
6) Dispozitivul slave trimite semnalul de acknowledge.
7) Procedeele 5) s, i 6) se pot repeta de mai multe ori,
scriind date succesiv ı̂n regis, tri.
8) Dispozitivul gazdă transmite un semnal de stop s, i
astfel se ı̂ncheie scrierea datelor.
4)
5)
6)
7)
8)
9)
10)
stocate, după care se as, teaptă un mesaj de acknowledge de la dispozitivul slave.
Dispozitivul slave transmite semnalul de acknowledge.
Dispozitivul gazdă transmite un al doilea semnal de
start după care trimite adresa cod I2C (pe 7 bit, i), se
pregătes, te să citească date iar mai apoi as, teaptă ca
dispozitivul slave să răspundă cu un semnal ACK.
Dispozitivul slave transmite semnalul de acknowledge.
În acest moment, dispozitivul slave transmite date
de la adresa recept, ionată anterior, astfel dispozitivul
gazdă recept, ionează un mesaj pe 8 bit, i.
Dispozitivul gazdă transmite un semnal de nonacknowledge.
Procedeele 8) s, i 9) se pot repeta de mai multe
ori, dispozitivul slave putând transmite secvent, ial
un număr de seturi de date pornind de la registrul
indicat la pasul 3). De ret, inut este faptul că, de
fiecare dată când gazda recept, ionează un byte de
date aceasta trebuie să transmită un semnal de acknowledge dispozitivului slave astfel ı̂ncât acesta că
s, tie să datele transmise anterior au fost recept, ionate
s, i astfel poate continua să trimită date noi. Acest
semnal de acknowledge nu mai trebuie transmis
doar ı̂n cazul transmiterii ultimului byte.
Gazda transmite un semnal de stop, ı̂ncheind astfel
procesul de citire. [3]
Pentru a se citi date se utilizează un format compozit
de citire-scriere. În timpul transmisiei, dispozitivul gazdă
trimite două semnale de start: prima dată când dispozitivul master găses, te dispozitivul slave prin adresa
acestuia trimite registrul intern sau adresa de memorie a
slave-ului. Când dispozitivul slave este găsit a doua oară
dispozitivul master cites, te cont, inutul adresei. Atunci când
gazda dores, te să citească datele transmise de dispozitivul
slave aceasta va ceda controlul liniei SDA dispozitivului
slave. Astfel, slave-ul va controla linia SDA iar gazda va
recept, iona datele transmise de către dispozitivul slave. În
cazul ı̂n care gazda dores, te să transmită date către dispozitivul slave, linia SDA este controlată de către master,
dispozitivul slave având sarcina de receptor. Similar cu
procesul de scriere, pentru a se citi date se execută o serie
de act, iuni:
1) Dispozitivul gazdă transmite un semnal de start
după care trimite adresa cod I2C (pe 7 bit, i)
as, teptând mai apoi ca dispozitivul slave să răspundă
cu un semnal ACK.
2) Dispozitivul slave transmite semnalul de acknowledge.
3) Dispozitivul gazdă trimite adresa registrului (pe 8
bit, i), aceste date fiind datele care trebuie citite s, i
Fig. 4. Scrierea s, i citirea datelor la protocolul I2C[2]
În Figura 4 se pot observa procedeele de scriere (Figura 3a, pentru scrierea unui singur bit, respectiv Figura 3-b pentru
scrierea a n bit, i). De asemenea, tot ı̂n Figura 3 se pot observa
procedeele parcurse pentru citirea unui singur bit(Figura 3-c)
respectiv pentru citirea a n bit, i(Figura 3-d).
IV. C UR ĂT, AREA MAGISTRALEI
În cazul ı̂n care semnalul de clock rămâne blocat ı̂n starea
LOW, procedura obis, nuită pentru a debloca magistrala este
resetarea magistralei folosind semnalul de reset al sistemului.
Dacă dispozitivele I2C nu au intrări de reset atunci se foloses, te
obligatoriu circuitul de ”Power-On Reset circuit (POR)”. În
astfel de cazuri, linia SDA va fi blocată ı̂n starea LOW, astfel
dispozitivul master va trebui să trimită nouă pulsuri de clock.
O altă variantă de curăt, are a magistralei este resetul fizic al
sistemului. [1]
V. M ODURILE DE FUNCT, IONARE ALE PROTOCOLULUI I2C
S, I PERFORMANT, ELE ACESTORA
Prima dată când a fost introdus protocolul I2C de către
Philips acesta permitea o viteză de transfer al datelor de până
la 100kbps. Această primă versiune a protocolului se numes, te
Standard mode. Cu timpul, aplicat, iile au ı̂nceput să necesite
viteze mai mari de transfer s, i astfel, ı̂n anul 1998 compania
Philips a introdus versiunea High-speed mode (prescurtat HS).
Cu timpul, acestui protocol de comunicat, ii i-au fost aduse
numeroase ı̂mbunătăt, iri, astfel, ı̂n prezent există 5 versiuni ale
acestei tehnologii care vor fi prezentate ı̂n continuare.
1) Standard mode sau Low speed mode: aceasta a fost
prima versiune a protocolului I2C, folosită ı̂ncepând
cu anul 1982. Comparativ cu următoarele versiuni are
performant, e slabe, permit, ând viteze de transfer de până
la 100kbps cu adresare pe 7 bit, i.
2) Enhanced I2C sau Fast mode: parametrii fizici ai magistralei pentru aceasta versiune a protocolului I2C sunt
asemănători cu cei ai versiunii anterioare. De asemenea,
partea de protocol, nivelurile de tensiune, sarcinile capacitive precum s, i alte caracteristici asemănătoare rămân
neschimbate. Cu toate acestea, viteza de transfer este
crescută până la 400kbps, limita fiind dată de zgomotul
care poate apărea ı̂n sistem. Pentru a se atinge aceste
performant, e, s-au făcut o serie de ı̂mbunătăt, iri la timingul magistralei(I2C bus timing, ı̂n limba engleză). Totodată cu mărirea vitezei s, i optimizarea timin-ului au fost
aduse ı̂mbunătăt, iri precum:
• Intrările dispozitivelor fast-mode au ı̂ncorporat un
sistem de atenuare a semnalelor spike cât s, i un
trigger Schimtt la intrările liniilor SDA s, i SCL.
• Bufferele de ies, ire(output buffers) au ı̂ncorporat un
sistem de control al pantei semnalului SCL s, i SDA
pe perioada de falling edge.
• În cazul ı̂n care se pierde alimentarea unui dispozitiv
I2C din sistem, pinii linilor SDA s, i SCL trebuie
să fie lăsat, i ı̂n gol pentru a nu obstruct, iona liniile
magistralei. Pentru a se atinge aceste performant, e
a fost nevoie să se mics, oreze capacităt, ile care
creează timpii cres, tere pentru semnale scăzânduse astfel valorile rezistent, elor de pull-up pentru a
cres, te curentul. De asemenea, pentru a cres, te viteza
a fost nevoie de scăderea timpilor de cres, tere s, i
descres, tere(rise time respectiv fall time), astfel sa ajuns la condit, ia ca aces, ti timpi să nu depăs, ească
300ns.
3) Fast-mode plus(FM+): Acest standard a fost introdus ı̂n
luna aprilie a anului 2004 s, i poate atinge viteze de transfer de până la 1Mbps. Dispozitivele FM+ sunt complet
compatibile cu standardele Fast-mode s, i Standard mode
pentru comunicat, ie bidirect, ională ı̂ntr-un sistem de tip
mixed-speed bus.
4) High-speed Mode(HS mode): acest standard poate
asigura viteze de transfer de până la 3,4Mbps, rămânând
ı̂n acelas, i timp compatibil s, i cu dispozitive care
funct, ionează pe standarde mai vechi. Pentru a atinge
această viteză s-au implementat o serie de modificări
precum:
• atât dispozitivul master cât s, i dispozitivul slave
trebuie sa funct, ioneze ı̂n mod high-speed
• pentru a scurta timpul de cres, tere, dispozitivele
master au un circuit ”open-drain output buffer”
pentru semnalul SDA s, i o combinat, ie ı̂ntre un circuit
”open-drain pull down” s, i un circuit ”current-source
pull up” pe ies, irea liniei SCL
• dispozitivele master care funct, ionează ı̂n modul
High speed generează un semnal de clock cu raportul de 1 la 2. Acest lucru asigură sincronizarea
pentru timpii de set-up s, i timpii de hold.
5) Ultra-fast Mode(UFm): acest standard este cel mai recent, fiind lansat ı̂n anul 2012 s, i permite viteze de
transfer de până la 5Mbps. Acest standard al protocolului
I2C este semnificativ diferit fat, ă de standardele mai
vechi printre diferent, e numărându-se următoarele:
• dispozitivele care sunt compatibile cu modul UFm
funct, ionează unidirect, ional, datele fiind transmise
doar ı̂ntr-o singură direct, ie.
• la standardul UFm liniile funct, ionează pe baza
tehnologiei push-pull.
• dispozitivele slave nu trimit bit de acknowledge.
• nu există arbitrare pentru modul multi-master.
Deocamdată, acest standard nu este foarte ı̂ntâlnit ı̂n
practică, fiind put, ine dispozitive care pot funct, iona la
acest standard. [1]
VI. E XEMPLU DE APLICAT, IE ÎN CARE PROTOCOLUL I2C
POATE PRODUCE ERORI
Chiar dacă acest standard de comunicat, ii este larg folosit ı̂n
o mult, ime de segmente ale industriei s, i s, i-a dovedit fiabilitatea,
pot exista s, i aplicat, ii ı̂n care acest tip de comunicat, ie poate
ı̂ntâmpina dificultăt, i. Spre exemplu, o astfel de aplicat, ie poate
fi un minisatelit Cubesat. În această aplicat, ie protocolul I2C
este utilizat pentru a comunica ı̂ntre modulele dispozitivului
precum senzori, calculatorul de bord, sistemul de gestionare
al energiei s, i altele. Datorită sensibilităt, ii circuitelor integrate
la radiat, ii solare, pot apărea erori ı̂n comunicat, ia I2C din
cauza lipsei de redundant, ă s, i robustet, e al acestuia. Astfel,
un singur bit inversat ı̂n regis, trii de control pot cauza o
blocare permanentă a magistralei. Astfel, această eroare face
imposibilă accesarea oricărui dispozitiv conectat la bus. [4]
VII. C ONCLUZII
Protocolul I2C este unul dintre protocoalele cele mai simple
dar totodată s, i cele mai folosite protocoale de comunicat, ie.
Principalele avantaje ale acestui protocol ı̂l reprezintă simplitatea implementării, performant, ele ridicate dar totodată s, i
numărul mare de dispozitive care pot fi conectate la un bus
I2C.
Comunicat, ia prin acest protocol se face serial, sincron, pe
8 bit, i,pe două magistrale de date, SDA s, i SCL. Dispozitivele
conectate ı̂ntr-o aplicat, ie I2C pot fi dispozitive de tip master
care pot controla mai multe dispozitive slave, respectiv dispozitive de tip slave.
O mult, ime de segmente din industrie folosesc comunicarea I2C ca standard. Astfel, pe viitor se as, teaptă ca dezvoltarea acestui protocol să continue, crescând fiabilitatea s, i
performant, ele.
[1] [3] [4] [2]
R EFERENCES
[1] D. S. Dawoud and P. Dawoud, “1 inter-integrated circuits (iic/i2c),” pp.
1–54, 2020.
[2] J. Valdez and J. Becker, “Understanding the i2c bus,” 2015, pp. 1–8.
[3] Y. Duan, “I2c data transfer program design and communication protocol
improvement,” in Lecture Notes on Wireless Networks and Communications, vol. 1, no. 1, 2018, pp. 1–16.
[4] V. Carvalho and F. L. Kastensmidt, “Enhancing i2c robustness to soft
errors,” in 2017 IEEE 8th Latin American Symposium on Circuits Systems
(LASCAS), 2017, pp. 1–4.
Download