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.