Sunteți pe pagina 1din 11

1.

Descrierea interfeei

Interfaa I2C (Inter Integrated Circuits) este o interfa serie, aprut din necesitatea de a realiza
sisteme ieftine cu microcontrolere, destinate n principal conducerii proceselor industriale. Acest tip
de comunicare a fost definit de Philips n 1970 . Popular aceast interfa este cunoscut i sub numele
de comunicare pe doua fire sau two wire interface. Un astfel de sistem este constituit, de regul,
dintr-unul sau mai multe microcontrolere i o serie de echipamente periferice (de intrare/ieire,
memorie etc.). Conectarea acestora printr-o interfa serie satisface cerinele enunate. Viteza mic de
transfer, caracteristic interfeelor serie, nu constituie un neajuns pentru aplicaiile principale avute n
vedere (conducerea proceselor).
Realizarea unui sistem I2C presupune interconectarea unor circuite integrate (specializate) prin
numai trei linii: dou de semnal i una de mas. Cele dou linii de semnal sunt denumite "serial data"
(SDA) i "serial clock" (SCL). Fiecare circuit integrat are o adres unic i poate funciona fie ca
transmitor, fie ca receptor, n funcie de tipul circuitului. De exemplu, un circuit pentru comanda
unui afiaj cu cristale lichide poate fi numai receptor, n timp ce un circuit de memorie RAM poate fi
att transmitor ct i receptor (evident, nu simultan). Dintr-un alt punct de vedere, un circuit integrat
din sistem poate fi coordonator sau executant. Circuitul integrat coordonator este circuitul care iniiaz
un transfer de date i tot el genereaz semnalele de tact pentru a permite realizarea unui transfer. Orice
alt circuit integrat adresat de coordonator este subordonat. Structura I2C este o structur multi-
coordonator, adic se pot interconecta mai multe circuite care pot avea rolul de coordonator. Termenii
implicai n descrierea funcionrii interfeei I2C, precum i semnificaia acestora sunt prezentate n
tabelul 1.

Termenul Descrierea termenului


Transmitor Dispozitivul care pune datele pe magistral
Receptor Dispozitivul care preia datele de pe magistral
Coordonator Dispozitivul care iniiaz un transfer, genereaz semnalele de tact i
termin transferul
Subordonat Dispozitiv adresat de ctre coordonator
Multicoordonator Exist mai multe dispozitive care pot s cear n acelai timp funcia de
coordonator fr s vicieze mesajul aflat pe magistral
Arbitraj Procedura prin care, fr s vicieze mesajul aflat pe magistral, se declar
un singur ctigtor atunci cnd exist mai multe dispozitive care solicit
simultan funcia de coordonator
Sincronizare Procedur prin care se sincronizeaz semnalul de tact funcie de viteza de
transfer acceptat de dispozitivele implicate n transfer
Pentru a nelege mai bine noiunile prezentate, n figura 1 se prezint un exemplu de sistem
realizat pe structura I2C i se consider urmtoarele situaii :
a) microcontrolerul A dorete s transmit date microcontrolerului B;
b) microcontrolerul A dorete s recepioneze date de la microcontrolerul B. Transferul datelor
ntre cele dou microcontrolere are loc dup cum urmeaz.
n cazul a:
- microcontrolerul A (coordonator) adreseaz microcontrolerul B (subordonat);
- microcontrolerul A (emitor coordonator) transmite date microcontrolerului B (receptor
subordonat);
- microcontrolerul A ncheie transferul.
n cazul b:
- microcontrolerul A (coordonator) adreseaz microcontrolerul B (subordonat);
- microcontrolerul A (receptor coordonator) primete date de la microcontrolerul B (transmitor
subordonat);
- microcontrolerul A ncheie transferul. Se observ c n ambele cazuri microcontrolerul A
(coordonatorul) iniiaz i ncheie transferul. Totodat, el este cel care genereaz semnalele de tact n
ambele cazuri.

Figura 1 - Sistem realizat pe structura I2C


Deoarece este posibil ca ntr-un sistem s existe mai multe circuite care pot avea rolul de
coordonator, este necesar o procedur de arbitrare a cererilor de transfer care ar putea s apar
simultan. Pentru conectarea la magistrala I2C fiecare circuit integrat este prevzut cu cte un etaj de
interfa pentru fiecare linie a magistralei (figura 2). Ambele linii, SDA i SCL sunt linii
bidirecionale, conectate la plusul sursei de alimentare prin cte un rezistor (rezistor pull-up). Dac
magistrala este liber, ambele linii sunt la nivel ridicat. Etajele de ieire ale fiecrui circuit care se
conecteaz la magistrala I2C trebuie s aib o ieire de tip colector n gol sau dren n gol, pentru a
putea permite realizarea funciei I-cablat.

Figura 2 - Conectarea a dou circuite la magistrala I2C


Rata maxim de transfer pe magistral este de 100 kbit/s. Ultimile realizri de circuite integrate
destinate s funcioneze n sisteme I2C admit rate maxime de transfer de 400 kbit/s. Numrul de
circuite care se pot conecta la magistral este limitat numai de capacitatea maxim admis pentru
fiecare linie, care este de 400 pF.

2. Protocolul de transfer pe magistrala I2C

Protocolul de transfer al datelor pe magistrala I2C presupune iniierea transferului prin aducerea
magistralei ntr-o condiie de START, transferul propriu-zis i ncheierea transferului prin aducerea
magistralei ntr-o condiie de STOP. Condiia de START (S) este definit prin trecerea liniei SDA din
1 n 0, n timp ce linia SCL este meninut la nivel ridicat. Condiia de STOP (P) este definit prin
trecerea liniei SDA din 0 n 1, n timp ce linia SCL este meninut la nivel ridicat. Ambele condiii
sunt ilustrate n figura 3. Ele sunt generate ntotdeauna de ctre coordonator.

Figura 3 - Definirea condiiilor de START i STOP


Datele trebuie s fie stabile pe durata impulsurilor de tact (figura 8.4). Modificarea datelor se
poate face pe durata pauzelor dintre impulsurile de tact (figura 84).
Figura 4 - Definirea intervalelor n care datele se pot schimba i n care trebuie s fie stabile
Datele sunt transferate pe magistral sub form de octei. Dup transmiterea fiecrui octet
transmitorul trebuie s afle dac acesta a fost recepionat n bune condiii de ctre receptor. Aceasta
se face prin procedura de acceptare (figura 5). Dup transmiterea celui de-al 8-lea bit, transmitorul
las n starea sus linia de date SDA; dac recepia s-a facut corect (fiecare bit a fost preluat, s-a
verificat paritatea, cuvntul recepionat n registrul de deplasare pentru recepie a fost preluat de
registrul tampon pentru recepie), atunci receptorul trage jos linia SDA pe durata celui de-al 9-lea tact
de pe linia SCL.

Figura 5 - Procedura de acceptare a unui octet

Figura 6 - Transferul datelor pe magistrala I2C


Numrul de octei care poate fi transmis n cadrul unui transfer nu este limitat. n cadrul unui
octet, primul bit transferat este bitul cel mai semnificativ (figura 8.6). Dup primele opt impulsuri de
tact necesare transmiterii unui octet urmeaz un al noulea impuls, utilizat pentru recunoaterea
efecturii transferului (a se vedea mai sus). Dac, dup recepia unui octet, receptorul nu admite un
nou octet (pentru c, de exemplu, trateaz o ntrerupere intern), el poate menine linia SCL la nivel
cobort pentru a fora transmitorul ntr-o stare de ateptare. Transferul poate continua cnd receptorul
este gata, situaie indicat prin eliberarea liniei SCL (figura 8.6). n felul acesta se face adaptarea
vitezei de transmisie dup viteza celui mai lent participant. ntotdeauna, primul octet transmis dup
condiia de START reprezint adresa unui subordonat, mpreun cu tipul operaiei solicitate (scriere
sau citire). Primii apte bii ai acestui octet reprezint adresa. Tipul operaiei este precizat de bitul 8,
notat R/W. Astfel, dac R/W = 1, coordonatorul va citi date de la subordonatul adresat iar dac R/W =
0, coordonatorul va transmite date subordonatului adresat. Un transfer complet este ilustrat n figura 7.

Figura 7 - Transferul unui mesaj pe magistrala I2C


Utilizarea tehnicii de recunoatere a transferului este obligatorie pentru asigurarea unui transfer
corect. Impulsul de tact corespunztor fiecrui octet, denumit impuls de recunoatere, este generat de
coordonator. Transmitorul elibereaz linia SDA pe durata impulsului de recunoatere. Receptorul
trebuie s aduc linia SDA la nivel cobort i s o menin aa pe toat durata impulsului de
recunoatere, ceea ce garanteaz efectuarea corect a transferului octetului respectiv. n general, un
receptor adresat trebuie s recunoasc fiecare octet transmis. Exist i excepii, care ns nu fac
obiectul acestei tratri. Dac un receptor subordonat nu recunoate adresa care i-a fost trimis pe
magistral (de exemplu, nu poate recepiona date pentru c execut o funcie n timp real),
subordonatul trebuie s lase linia SDA la nivel ridicat. n aceast situaie, coordonatorul poate genera o
condiie de STOP pentru a abandona transferul. Dac receptorul subordonat recunoate adresa care i-a
fost trimis, dar, dup transferul unui numr oarecare de octei, nu mai poate recepiona alii, atunci
coordonatorul trebuie s abandoneze din nou transferul. Pentru aceasta, dup primul octet care nu mai
poate fi recepionat, subordonatul nu mai genereaz recunoaterea, adic las linia SDA la nivel
ridicat. n aceast situaie, coordonatorul poate genera condiia de STOP pentru a abandona transferul.
Dac circuitul coordonator este receptor i nu mai poate recepiona date, atunci el semnaleaz aceasta
transmitorului subordonat prin faptul c nu mai genereaz recunoaterea dup ultimul octet pe care l
poate recepiona. n aceast situaie, transmitorul subordonat trebuie s elibereze linia SDA pentru a
permite coordonatorului s genereze o condiie de STOP.
3.Generarea impulsurilor de tact i arbitrarea coordonatorilor
Structura I2C este, dup cum s-a precizat anterior, o structur multicoordonator, adic ntr-un
sistem interconectat prin magistrala I2C pot s existe mai multe circuite care pot avea rolul de
coordonator. n cadrul unui transfer, delimitat de condiiile de START i STOP, exist un singur
coordonator. Se poate ntmpla ns ca mai muli coordonatori s ncerce simultan s iniieze un
transfer. Prin urmare, este necesar o procedur de arbitrare n urma creia s rezulte un coordonator
unic n cadrul fiecrui transfer. Procedura de arbitrare este descris n continuare. Fiecare circuit
coordonator genereaz propriile lui impulsuri de tact. Sincronizarea acestora este absolut necesar
pentru evitarea funcionrii haotice. Sincronizarea este posibil datorit funciei logice I-cablat,
realizat prin legarea mpreun a tuturor terminalelor SCL. Sincronizarea se produce n modul descris
mai jos, cu referire la figura 8. n legtur cu aceast figur, precum i cu alte diagrame de timp ce vor
fi prezentate, se face precizarea c semnalele CLK1, CLK2 i DATA1, DATA2 sunt semnalele aduse
la intrrile etajelor de ieire corespunztoare, cuplate la liniile SCL respectiv SDA.

Figura 8 - Sincronizarea impulsurilor de tact


Prima tranziie 1 0 a unui semnal CLK este cea a semnalului CLK1. Aceasta aduce linia SCL la
nivel cobort i reseteaz CLK2. Ambii coordonatori ncep s genereze starea 0 a impulsului de tact.
La un moment dat, CLK1 trece n starea 1, ns linia SCL este meninut n continuare n starea 0
pentru c starea 0 a tactului CLK2 nc nu s-a ncheiat. Pn la ncheierea acesteia, CLK1 introduce o
stare de ateptare. n momentul n care CLK2 trece din 0 n 1, linia SCL este eliberat i ambii
coordonatori ncep generarea strii 1 a impulsului de tact. Primul semnal de tact care trece din nou din
1 n 0 aduce din nou linia SCL la nivel cobort. n acest fel se genereaz impulsuri de tact sincronizate.
Durata strii 1 este determinat de semnalul CLK cu cea mai mic durat a strii 1 iar durata strii 0
este determinat de semnalul CLK cu cea mai lung durat a strii 0. Arbitrarea coordonatorilor se
face pe linia SDA, impulsurile de tact generate de coordonatori fiind sincronizate n modul descris mai
sus. Coordonatorul care transmite un nivel ridicat pierde arbitrarea dac n acelai timp un alt
coordonator transmite un nivel cobort (figura 9). Coordonatorul care pierde arbitrarea trebuie s i
deconecteze etajul de ieire date, astfel nct s nu mai influeneze starea liniei SDA. Arbitrarea poate
continua mai muli bii. n prima etap se compar biii de adres. Dac ambii coordonatori ncearc s
adreseze acelai executant, arbitrarea continu cu compararea biilor de date. Deoarece arbitrarea
folosete biii de adres i de date, nu se pierde informaia n timpul acestui proces. Coordonatorul care
pierde arbitrarea poate continua s transmit impulsuri de tact pn la sfritul octetului n care pierde
arbitrarea. Dac un coordonator pierde arbitrarea n faza de adresare, este posibil ca acel coordonator
care o ctig s ncerce s-l adreseze. n aceast situaie, coordonatorul care pierde arbitrarea trebuie
s treac imediat n regim de executant (asculttor). Observaie. Deoarece controlul magistralei I2C
depinde numai de adresele i datele transmise de coordonatori, nu exist nici coordonator central i
nici vreo ordine de prioritate pe magistral. Procedura de sincronizare a impulsurilor de tact, descris
mai sus, se poate utiliza i pentru adaptarea vitezei de transfer fie la nivel de octet, fie la nivel de bit.

Figura 9 - Arbitrarea a doi coordonatori


La nivel de octet, este posibil ca executantul s recepioneze datele n ritmul impus de
coordonator, ns s necesite un timp mai lung pentru memorarea lor. n aceast situaie, executantul
poate menine linia SCL la nivel cobort, dup recunoaterea recepionrii unui octet, fornd
coordonatorul s introduc o stare de ateptare pn cnd executantul este gata pentru recepia unui
nou octet. La nivel de bit, executantul care nu poate recepiona datele n ritmul impus de coordonator
poate ncetini acest ritm prin extinderea strii 0 a impulsurilor de tact. n acest mod, viteza oricrui
coordonator se poate adapta la viteza oricrui executant. Formatul mesajelor ce se vehiculeaz pe
interfaa I2C sunt artate n figurile 10, 11 i 12.

Figura 10 - Coordonatorul transmite unui receptor subordonat. Direcia nu se schimb.


Figura 11 - Coordonatorul citete de la subordonat imediat dup ce a transmis adresa acestuia

Figura 12- Coordonatorul lucreaz cu doi subordonai n cadrul aceleai sesiuni


n figura 12 se arat situaia cnd coordonatorul lanseaz condiia de start, apoi adresa unui
subordonat cu care comunic. La terminarea comunicrii cu acesta vrea sa comunice cu un al 2-lea
subordonat. Pentru aceasta lanseaz o a doua condiie de start, adresa celui de-al 2-lea suburdonat cu
stabilirea sensului comunicrii i se realizeaz transferul. La sfrit, coordonatorul ncheie cu condiia
de stop. A doua condiie de start este necesar deoarece pe durata condiiei de start, circuitele cuplate
la I2C se reseteaz i ateapt s identifice adresa pe care urmeaz s o transmit coordonatorul.

4. Adresarea n sistemul I2C

n I2C se impune ca primul octet dup condiia de start s fie adresat subordonatului cu care
coordonatorul dorete s fac transfer. Adresa trebuie s urmeze dup condiia S. Excepie de la
aceast regul este situaia de adresare general la care toate elementele din sistem trebuie s
rspund i care se codific prin doi octei. Totui, exist elemente care nu rspund (nu este util s
rspund) la adresarea general. Ele vor ignora codul adresrii generale. La adresarea obinuit,
octetul ce urmeaz dup condiia S codific pe primii 7 bii mai semnificativi adresa subordonatului,
iar bitul mai puin semnificativ este bitul R/W i arat sensul transferului. Atunci cnd se transmite
adresa, fiecare dispozitiv din sistem compar adresa recepionat cu propria adres; dac constat
egalitatea, dispozitivul devine subordonat receptor sau subordonat transmitor, funcie de valoarea
bitului R/W.
Adresa unui subordonat poate avea o parte fix i o parte programabil. Partea fix definete clasa
dispozitivului (spre exemplu: memorii, dispozitive de afiare, microprocesoare, etc.) iar partea
programabil identific dispozitivul din clasa respectiv. Mrimea prii programabile depinde de
numrul de pini pentru adres pe care circuitul i are. Spre exemplu, un circuit are 4 bii de adresa fix
i 3 bii programabili; aceasta nseamn c se pot conecta la magistrala I2C 8 dispozitive de acest fel.
Comitetul de coordonare al magistralei I2C a recomandat o alocare a celor 127 de adrese prezentat n
tabelul 8.6. Exist dou grupe de cte 8 adrese: 0000xxx i 1111xxx rezervate pentru scopurile artate
n tabel. Adresele 11110xx sunt rezervate pentru adresarea cu 10 bii, folosit n sisteme I2C de mare
ntindere. Adresarea general Este o adresare pentru toate dispozitivele din sitemul I2C care au fost
prevzute s recunoasc adresarea general. Adresarea general se face pe doi octei (figura 13):
primul este 0000.0000, iar al doi-lea octet specific aciunea pe care trebuie s o relizeze subordonaii.

Figura 13 - Formatul adresrii generale


Funcie de valoarea bitului B din octetul 2 distingem cazurile:
1 Dac B = 0, al doilea octet are urmtoarele semnificaii, funcie de valoarea n cod hexazecimal:
a) 02h = scrie adresa subordonat numai soft. Elementele din sistemul I2C care obin partea
programabil a adresei lor prin program intr ntr-un regim prin care pot fi programate. Nu se face
resetul circuitului.
b) 04h = scrie adresa subordonatului numai hard. Elementele din sistemul I2C care obin partea
programabil a adresei lor prin starea unor circuite (bistabile, comutatoare) vor ncrca n registrul
intern de adres aceast parte fix de adres. Nu se face resetul circuitului.
c) 06h = reset i scrie partea programabil a adresei hard i soft Elementele din sistem
realizeaz dou operaii: se iniializeaz (revin n starea bine definit de fabricant) i i preiau adresa,
att partea fix ct i partea programabil i n ordinea stabilit de proiectantul sistemului. n figura 14
Se arat secvena de ncrcare a adreselor. Cu ABCD s-a notat partea fix a adresei.
d) 00h - acest cod nu este permis a fi utilizat ca al doilea octet ntr-o adresare general. Observaie.
Este important ca la punerea sub tensiune nici un element din sistem s nu trag jos linia SCL sau
SDA, caz n care sistemul nu poate porni.

Figura 14 - Secven de programare a adreselor de ctre coordinator


2. B = 1. n acest caz secvena de doi octei se numete adresare general din partea unui
coordonator hardware. Prin coordonator hardware se nelege orice element din sistemul I2C care nu
poate fi programat s transmit adresa unui subordonat dorit atunci cnd el trebuie s devin
coordonator. Spre exemplu: o tastatur, un scaner, etc. care trebuie s transmit date fr s
poatdesemna cui trebuie s le transmit. n aceast situaie el va genera o adresare general,
specificnd pe cmpul celui de al doilea octet propria adres. Aceasta este recunoscut de un element
inteligent din sistem (un microprocesor) care va prelua i apoi va direciona informaia (figura 8.15)

Figura 15 - Coordonatorul hard transmite date prin intermediul unui microprocesor


Exist coordonatoare hard ce au posibilitatea s ncarce ntr-un registru intern adresa unui
subordonat cu care urmeaz s ia legtura. n acest caz, coordonatorul inteligent al sistemului
furnizeaz coordonatorului hard, ntr-o prim faz a), adresa subordonatului ce comunic cu
coordonatorul hard n faza b). (figura 16).

Figura 16 - Coordonatorului hard i se specific adresa subordonatului


Un microprocesor poate fi conectat la magistrala I2C n dou moduri: fie c are nglobate circuite
suplimentare care s recunoasc mesaje de ntrerupere furnizate pe linia SDA, fie c monitorizeaz
continuu liniile SDA i SCL pentru a depista condiia de start. Monitorizarea continu a liniilor
(testarea pe fiecare impuls de ceas a condiiei de start) ia mult din timpul de lucru al microprocesorului
care astfel devine lent n executarea programelor ce-i revin. Pentru a ocupa mai puin timp
microprocesorul, monitorizarea de ctre acesta a condiiei de start intr n regimul sleep, din care se
ias numai dac pe linia SDA se transmit unul dup altul 7 bii cu valoarea 0. Dup detectarea
acestei condiii, microprocesorul monitorizeaz liniile SDA i SCL pe fiecare impuls de tact. Pentru a
fi eficient acest mod de lucru se impune ca fiecare transfer de date s fie precedat de transmisia unui
octet de START, procedura fiind urmtoarea:
1. Coordonatorul magistralei iniiaz condiia de start S,
2. Coordonatorul transmite octetul de START (0000.0001),
3. Coordonatorul transmite impulsul de tact pentru confirmare i nu ateapt s fie confirmat de
ctre cineva pri tragerea jos a liniei SDA,
4. Coordonatorul iniiaz o repetare a condiiei de start Sr i continu procedura obinuit de
transfer prin transmiterea adresei subordonatului, a bitului R/W, .a.m.d. Microprocesorul ce nu este
coordonator ias din modul sleep n faza 3), detecteaz condiia repetat de start, observ adresa
subordonatului i dac nu este a lui, poate s intre din nou n modul sleep de monitorizare a
magistralei. Magistrala I2C are posibilitatea de a transmite unui receptor din sistemul CBUS. Sistemul
CBUS are 3 linii: SDA, SCL i DLEN. Pe linia SCL nu se transmite cel de-al noulea impuls (de
confirmare), ci confirmarea se realizeaz prin intermediul liniei DLEN. Ca urmare transmitorul, ce
lucreaz n I2C, trebuie s transmit octet dup octet, s suprime bitul de confirmare i s activeze linia
suplimentar DLEN. Restul elementelor din I2C nu trebuie s rspund la un mesaj CBUS. De aceea
exist o adres special (0000.001x) pentru conectri CBUS. La transmiterea acestei adrese,
elementele I2C nu rspund i se activeaz linia DLEN. Revenirea n sistemul I2C se face dup
identificarea condiiei STOP.

S-ar putea să vă placă și