Sunteți pe pagina 1din 10

4.5.

Gestionarea interfeei I2C pentru circuite fr interfa I2C integrat n cip

4.5.1. Arhitectura memoriilor RAM i ROM pentru familia 8xCxxx


(NU SE CERE LA EXAMEN)
Se prezint structura intern a unitii centrale a microcontrolerelor, pentru a arta modul de utilizare
a locaiilor de memorie pentru programele de aplicaie. Aceast structur a rezultat practic din structura lui
80C51, respectiv 80C52, avnd RAM intern de 256 octei.
Arhitectura memoriei de date i a memoriei program sunt prezentate n figurile 4.21 respectiv 4.22.

Figura 4.21. Structura memoriei de date.

Figura 4.22. Structura memoriei program.

Familia 80C51 are o magistral de date de 8 bii i este capabil s adreseze un spaiu de memorie
corespunztor pentru 2 x 64KO, adic adresare dubl pe 16 bii. Aceast adresare a fost conceput astfel
nct memoria de date (RAM) i memoria program (ROM) au adrese suprapuse. Pe de alt parte s-au
mprit cei 8 bii mai semnificativi ai magistralei de adrese (portul 2) i cei 8 bii mai puin semnificativi
(portul 0), multiplexnd n timp partea de adresare de la portul 0 cu datele (figura 4.23).
Va trebui utilizat deci un registru extern pe 8 bii pentru memorarea adresei de la portul 0. Pentru
aceast demultiplexare este nevoie de semnalul ALE (Address Lach Enable) i R/W (Read/Write) care fac
alegerea ntre memoria de date i memoria program.

Figura 4.23. Exemplu pentru semnalele disponibile la pinii unui microcontroler


din familia 8xCxxx (80C552).

Memoria de date este divizat n mai multe pri, fiecare parte cu particularitile ei. n cazul lui
80C552 avem 128 + 128 + 128 octei, plus o memorie extern de 64KO. n memoria RAM intern exist 4
grupri (bancuri) de regitri, fiecare coninnd cte 8 regitri, notai R0 - R7, cu adresele:
- grupul 1: 00 h - 07 h
- grupul 2: 08 h - 0F h
- grupul 3: 10 h - 17 h
- grupul 4: 18 h - 1F h.
Urmtoarea zon, ntre 20 h i 30 h este adresabil pe bit. De la 80 h i pn la FF h sunt plasai
regitrii speciali, SFR, care sunt fie adresabili pe octet fie adresabili pe bit (adrese care se termin n 00 sau
08). Exist mult spaiu liber pentru extensii ulterioare corespunztoare unor microcontrolere mai
performante.
n spaiul comun de suprapunere de adrese (de la 80 h la FF h), dup cum se face adresarea, se
ajunge fie n memoria de date normal, fie n zona SFR-urilor.
Figura 4.24. Adresarea n spaiul memoriei de date.

Exemple de adresare:
- direct
MOV 80H, #0AAH
nscrie valoarea AAH n Portul 0 (SFR)
- indirect
MOV R0, #80
MOV @R0, #0BBH
nscrie valoarea BBH n locaia aflat la adresa 80H din RAM.

4.5.2. Programe pentru comunicarea pe interfaa serial I2C pentru microcontrolere fr interfa
hardware I2C

Acest paragraf are drept scop descrierea implementrii unui program simplu care s permit
comunicarea conform protocolului pe I2C, uor de readaptat pentru un alt tip de microcontroler.
Programul este scris pentru un microcontroler din familia 80C51. Aspectele temporale pe care
trebuie s le asigurm au fost prezentate n figurile 4.18 i 4.19. Trebuie avut n vedere n special
generarea tactului, a crui durat HIGH este de minim 4 s, iar durata LOW este de minim 4,7 s.
Programul de emisie de date spre o component cu interfa I2C este constituit din mai multe
subrutine aflate la diferite adrese n memoria program. Parametrii iniiali ai programului sunt:
- adresa componentei I2C este coninut n locaia din memoria RAM avnd adresa 3000 h;
- numrul de octei de trimis se afl nscris la adresa 3001 h;
- datele de trimis sunt stocate ncepnd de la locaia 3002 h.
Pentru toate aceste date se folosete o memorie RAM extern.
Arhitectura global de organizare a memoriei program externe este prezentat n figura 4.25.
Programul pentru transmiterea datelor spre un circuit slave I2C trebuie s cuprind urmtoarele
funcii:
- iniializarea diferitelor valori (eticheta reset),
- ncrcarea n registrul DPTR a diferitelor adrese la care se afl octeii de transmis,
- ncrcarea acumulatorului cu coninutul adresei indicat de DPTR i aceasta doar dac circuitul
receptor nu impune ntreruperea transmisiei prin negenerarea acceptrii (ACK).
Legturile pentru liniile SDA i SCL vor fi cablate la dou dintre liniile portului P1 i anume:

- SDA este cablat la pinul 7 al portului P1 (97 h)


- SCL este cablat la pinul 6 al portului P1 (96 h)
- TRIG = semnalul de declanare pentru numrtorul 2 (valabil doar la 8032) este cablat la port P1 pin 1 (91
h).
Figura 4.25. Amplasarea la diferite adrese n memoria program a subrutinelor.

Figura 4.26. Schema logic pentru subrutina de emisie.


START

INITIALIZARE

INCARCA IN DPTR ADRESA PENTRU


ADRESA I2C

PUNE IN ACC. ADRESA PENTRU I2C

GENEREAZA CONDITIE DE START

TRANSMITE OCTET ADRESA

RECEPTIE ACK

DA
ACK = 1 ?? STOP RET

NU
INCARCA IN DPTR -- ACC -- R1
NR. DE OCTETI DE TRANSMIS

INCARCA IN DPTR ADRESA PT.


OCTETUL DE DATE DE TRS.

INCARCA ACC. CU DATA DE TRS.

TRIMITE OCTET ( SUBRUTINA OCTET)

DA
ACK = 1 ?? STOP RET

DECREMENTEAZA R1

NU DA
R1 = 0 ?? STOP RET

Figura 4.26 bis. Schema logic detaliat.

Conform organizrii prezentate n figura 4.25, subrutina de emisie ncepe la adresa BD00. Schema
logic pentru aceast subrutin este prezentat n figura 4.26 i 4.26.bis. Utilizm urmtoarele iniializri:
0097 sda = 0x97
0096 scl = 0x96
0091 trig = 0x91
Programul care cuprinde:
- adresele locaiilor de memorie (ex. BD00),
- etichetele la care ncep diferite subrutine (ex. reset),
- instruciunile scrise n limbaj de asamblare (ex. setb trig),
- codurile instruciunilor scrise n hexazecimal,
se va prezenta n continuare.
Pentru o bun nelegere a instruciunilor din program i a amplasrii codurilor corespunztoare n
memorie, au fost prezentate att adresele la care se afl aceste comenzi n memorie ct i codurile lor n
format hexazecimal. Principalele funcii pe care trebuie s le ndeplineasc programul sunt urmtoarele:
- gestionarea datelor,
- trimiterea de octei (bit cu bit) pe linia desemnat a fi SDA,
- generarea tactului pe linia desemnat a fi SCL,
- recepionarea i interpretarea bitului de ACK,
- generarea condiiilor de start i stop.
Prima subrutin care ncepe la adresa BD00 este urmtoarea:

BD00 D291 reset: setb trig


BD02 D297 setb sda
BD04 D296 setb scl
BD06 C291 clr trig
BD08 903000 scriere: mov dptr, #0x3000
BD0B E0 movx a, @dptr
BD0C 12BD30 lcall start
BD0F 400C jc end
BD11 A3 inc dptr
BD12 E0 movx a, @dptr
BD13 F9 mov r1, a
BD14 A3 trans : inc dptr
BD15 E0 movx a, @dptr
BD16 12BD38 lcall octet
BD19 4002 jc end
BD1B D9F7 djnz r1, trans
BD1D 12BD70 end : lcall stop
BD20 22 ret

Subrutina de emisie-recepie este urmtoarea:

BD30 C297 start: clr bsda


BD31 00 nop
BD32 00 nop
BD32 00 nop
BD34 00 nop
BD35 00 nop
BD36 C296 clr bscl
BD38 7A08 octet: mov r2, #0x08
BD3A 00 nop
BD3B 33 bit: rlc a
BD3C 9297 mov bsda, c
BD3E D296 setb bscl
BD40 00 nop
BD41 00 nop
BD42 00 nop
BD43 00 nop
BD44 00 nop
BD45 C296 clr bscl
BD47 00 nop
BD48 DAF1 djnz r2, bit
BD4A D297 setb bsda
BD4C 00 nop
BD4D 00 nop
BD4E D296 setb bscl
BD50 00 nop
BD51 A297 mov c, bsda
BD53 00 nop
BD54 00 nop
BD55 C296 clr bscl
BD57 22 ret

Subrutina de generare a condiiei de stop este urmtoarea:

BD70 903FFE stop: mov dptr, #3FFE


BD73 E4 clr a
BD74 33 rlc a
BD75 F0 movx &dptr, a
BD76 C297 clr bsda
BD78 D296 setb bscl
BD7A 00 nop
BD7B 00 nop
BD7C 00 nop
BD7D 00 nop
BD7E 00 nop
BD7F D297 setb bsda
BD81 22 ret

Gestionarea datelor se realizeaz prin stabilirea n prealabil a locaiilor de memorie la care pot fi gsite
datele:
- adresa componentei I2C este coninut n locaia din memoria RAM avnd adresa 3000 h;
- numrul de octei de trimis se afl nscris la adresa 3001 h;
- datele de trimis sunt stocate ncepnd de la locaia 3002 h.
Emisia biilor se realizeaz prin:
- ncrcarea octetului de transmis n acumulator,
- rotirea acumulatorului spre stnga prin bitul de Carry
- punerea coninutului bitului Carry pe linia SDA.
Generarea tactului se realizeaz prin:
- setarea pe 1 logic a liniei de port desemnat a fi SCL,
- temporizarea necesar pentru a realiza limea de minim 4 s care este durata minim a tactului n starea
HIGH i durata de 4,7 s care este durata minim a tactului n starea LOW,
- setarea pe 0 logic a liniei de port desemnat a fi SCL.
Recepionarea i interpretarea bitului de ACK se realizeaz prin intermediul bitului de Carry n care
se nscrie informaia primit pe linia SDA de la corespondentul de pe I2C.
Generarea condiiilor de start i stop se execut prin crearea fronturilor pe linia SDA cnd linia SCL
este pe 1 logic i a palierelor, de durat corespunztoare (prin utilizarea de nop uri), pentru ndeplinirea
condiiilor de temporizare mai sus menionate.

4.6. Bus-ul I2C n mod rapid


4.6.1. Etajele de ieire
Specificaiile I2C n mod rapid au devenit oficiale din 1.01.92. Propunerea standardizat aparine tot
lui Philips. Noua vitez = 400 Kbps.
Acest fapt este posibil datorit existenei pe pia a C care pot lucra la o frecven de 20 MHz, 24
MHz, 30 MHz etc.
Pentru a nu perturba componentele din jurul bus-ului I 2C etajele de ieire pentru SDA i SCL au fost
echipate cu dispozitive ce permit controlul fronturilor de ridicare i de coborre.

n figur sunt prezentate exemple de realizare a unor astfel de dispozitive conform tehnologiilor
utilizate la concepia circuitelor integrate (CMOS sau bipolare).
Panta fronturilor descendente este definit, n mare msur, prin valorile componentelor C1 i R1 i
mai puin prin Cb i Rp. n schimb acestea din urm vor avea o influen hotrtoare asupra timpului de
ridicare al semnalelor de pe bus.
Valoarea minim a lui Rp este determinat de tensiunea de alimentare V DD i de valoarea VOLmax
(valoarea maxim a tensiunii de ieire n starea LOW).
Ex: VDD = 5V10%, VOlmax = 0,4V la 3mA => R = (5,5V - 0,4V):3 10-3 = 1,7K.
Durata timpului de ridicare, tr = 1s.
Avnd o reea RC, tensiunea este dat de binecunoscuta relaie:
v = VO(1 e-t/ ).
0,1 VDD = VDD (1 - e-t1/) => e-t1/ = 0,1 => t1=ln 0,1
-t2/
0,9 VDD= VDD (1 e ) => e-t2/ = 0,9 => t2=ln 0,9
ntre 0,1VDD i 0,9VDD => tr = 2,2RC => 1s = 2,2 1,7K C =>
C = 300pF
n cazul n care avem o capacitate mai mare C b se poate utiliza o metod de comutare suplimentar a
unei rezistene Rp.

Rezistena suplimentar Rp2 va fi comutat funcie de nivelele existente pe liniile SDA i SCL.
Rezistenele Rs sunt opionale i sunt prevzute n scopul protejrii etajelor de ieire a bus-ului I 2C
mpotriva unor valori accidentale mai mari de tensiune (high votage spikes).

4.6.2. Noul cmp de adrese


Pentru bus-ul I2C n mod standard erau disponibile maximum 112 adrese i a aprut necesitatea
schimbrii protocolului pentru un cmp de adrese pe 10 bii. Astfel codul 1 1 1 1 0 X X a fost alocat pentru
aceste adresri extinse.
Pentru un receptor cu adres pe 10 bii structura formatului este urmtoarea:
S Adr.S.I.byte 0 ACK Adr. Slave, ACK DATE A/A P
1111 0xx al 2-lea byte
(W)
Se poate ntlni i urmtorul caz:
S Adr. S. I- R/W ACK Adr. Slave ACK DATE A/A
byte al 2-lea

Sr Adr. Slave 7 R/W ACK DATE ACK DATE ACK P


biti

Codul 1111 1XX este n continuare rezervat.


Se poate observa o compatibilitate perfect cu I 2C n mod standard deoarece se consider c orice
adres care nu ncepe cu F(H) este codat pe 7 bii. Mai mult, se poate considera c toate echipamentele cu
adres pe 7 bii pot funciona doar n mod standard.
n codul 1111 0XX ultimii doi bii reprezint cei doi bii mai semnificativi din adresa de 10 bii. Al 8
lea bit din I byte arat sensul transferului (0=write ; 1=read).

4.6.3. Extensii ale bus-ului I2C


Acest bus este asimetric fa de mas i avem doi parametrii, din punct de vedere hard, care trebuie
avui n vedere n cazul extinderii bus-ului:
1. ncarcarea maxim n curent a etajului de ieire (3 mA).
2. Timpul de ridicare a semnalelor vehiculate pe bus (1s n mod standard).
Mai exist i o necesitate din punct de vedere soft care impune ca bus-ul s fie bidirecional:
semnalul de ACK trimis de receptor emitorului.
n cazurile n care distana este prea mare, pentru a pstra timpul de urcare, va trebui s micorm
impedana sursei care alimenteaz linia I 2C. Exist o soluie realizat cu circuite logice dar cea preferat este
urmtoarea:

Avem repetoare pe emitor care au drept sarcin 75. n repaus pentru SDA i SCL , T 1 i T2 sunt
bolcate i avem +5V. Dac Echipamentul 1 este master, emitorul lui T 1 va urmri informaia la ieire a liniei
SDA. n acelai fel se va modifica i baza lui T2 datorit rezistenei de 820.
Din punct de vedere al nivelelor electrice, pentru nivelul LOW impus de 1,5V. (V Ilmax = 1,5V), n cel
mai ru caz avem:
VOLmax+Vbe max=0,4+0,8=1,2V.
Pentru nivelul HIGH nu apar modificri. Singurul dezavantaj este scderea imunitii la zgomot dar
care va fi compensat prin scderea impedanei liniei.*
Astfel impedanele tipice sunt n plaja 50-100 . Tranzistoarele montate n repetor pe emitor pot
furniza un curent de 100mA ceea ce impune rezistoare de 75 la fiecare capt al liniei.
Distana maxim este limitat astfel doar de timpul de propagare disponibil determinat la rndul lui
de timpul maxim pe care-l poate atepta emitorul pentru a recepiona semnalul de ACK de la receptor.
Timpul minim pentru starea HIGH a tactului este de 4,03s. Va trebui ca suma total a timpului de
propagare a semnalului de la C (al 9-lea tact) i a timpului de ntoarcere a semnalului ACK s fie inferioar
acestei valori.
Liniile de transmisie au de obicei un timp de propagare de ordinul
5 ns/m sau o vitez de 200m/s. Avem la o distan de 400m un timp dus-ntors de 2+2=4s. Dar n acest
caz sunt recomandate fire de legtur cu diametru mare pentru a reduce pierderile pe linie.
Pentru bufferizare exist i un circuit integrat dedicat P82B715. n cazul utilizrii lui rezistenele de
pull-up existente pe ieirile standard vor fi scoase pentru a fi amplasate direct pe ieirile buferului. Circuitul
P82B715 conine dou ci de semnal identice care au scopul de a amplifica (bufferiza) fr modificarea
nivelului bidirecionalitii pentru SDA i SCL (cu un curent de 30mA n loc de 3mA pentru fiecare iesire).

Pentru capaciti parazite mai mari de 400pF se mai utilizeaz i surse de curent n locul rezistenei de
pull-up.

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