Documente Academic
Documente Profesional
Documente Cultură
Iic Platforma Pentru Tandem
Iic Platforma Pentru Tandem
Introducere.....11
Capitolul 1. Conceptul de magistral IC................13
1.1 Beneficii ale designerului.......15
1.2 Beneficii producator...16
1.3 Introducere n conceptul de interfa I2C ....16
1.4. De ce am ales comunicarea I2C pentru aceast lucrare?..................................................................17
Capitolul 2. Conceptul de magistral I2C...........................................................................................19
2.1 Caracteristici generale....20
2.2 Transferul unui bit..21
2.3 Valabilitatea datelor ..21
2.4 Condiii de START i STOP..22
2.5. Transferul datelor..22
2.5.1 Formatul byte-ului ...22
2.5.2 Acknowledge...23
2.6 Arbitrarea i generarea clock-ului. ...24
2.6.1 Sincronizarea semnalelor de clock....24
2.6.2 Arbitrarea .24
2.7. Formatul cu adrese pe 7 bii.
..26
2.8 Adresarea pe 7 bii.28
2.9 Definirea biilor din primul octet...28
2.10 Adresa de apel general. ...30
2.11 Byte de START ...32
2.12.Extensii ale modului standard pe magistrala I2C.. .32
2.12.1 FAST-MODE ..33
2.12.2 Hs-MODE (mod de high-speed)...34
2.13 Transfer de mare vitez ..34
2.14 Formatul transferului de date serial n modul HS (high-speed). 36
2.15 Trecerea de la modul Fast/Standard la modul HS i invers.38
2.16 Dispozitive de mod High-speed la modurile de vitez mai mici....38
2.17 Moduri de vitez mixt pe un sistem de magistrala serial .39
2.18 Modul de transfer fast sau standard ntr-un sistem cu viteze mixte...............................................41
2.19 Transferul de mare vitez ntr-un sistem cu viteze mixte................................................................41
2.20 Cerine de timp pentru legtur dintr-un system cu viteze mixte....................................................42
2.21.Conexiuni electrice ale dispozitivelor I2C legate la magistral.......................................................42
2.22 .PCA9555 ........................................................................................................................................44
2.22.1. Descriere generala...............................................................................................................44
LIST ACRONIME
ACK
Acqnowledge = Confirmare;
ADC
Analog-Digital Convertor = Convertor analog-digital;
ARM
Advanced RISC Machines = Procesoare cu arhitectur RISC avansat.
CBUS
Communication Bus = Magistral de comunicare;
CLI
Comand Line Interface = Interfa de comand;
CLK
Clock = Semnal de ceas;
CMOS
Complementary metaloxidesemiconductor = Tehnologie de realizare a
dispozitivelor MOS;
DIL
Dual-in-Line = Integrate cu dou rnduri de pini;
DTMF
Dual-tone multi-frequency = Semnal generat la apsarea tastelor unui telefon.
EEPROM
Electrically Erasable Programmable Read-Only Memory = Memorie nevolatil ce
poate fi programat i tears n circuit;
GPIO
General Purpose Input/Output = Intrare/Iesire de uz general;
GVM
Generating Voltmeter = Voltmetru pentru msurri de tensiuni nalte;
HS
High-speed = Vitez mare;
I/O
Input/Output = Intrare/Ieire;
I2C
Inter-Integrated Circuit = Magistral de comunicare serial;
IC.
Integrated Circuit = Circuit Integrat;
INT
Interrupt = ntrerupere;
JTAG
Joint Test Action Group = Port folosit pentru interconectare;
LCD
Liquid Crystal Display = Afiaj cu cristale lichide;
LDO
Low Dropout Regulator = Regulator liniar de tensiune;
LED
Light Emission Diode = Dioda luminiscent;
LSB
Least Significant Bit = Cel mai puin semnificativ bit;
MSB
Most Significant Bit = Cel mai semnificativ bit;
PCB
Printed Circuit Board = Plac cu cablaj imprimat;
RAM
Random Acces Memory = Memorie cu acces aleator;
ROM
Read Only Memory = Memorie ce poate fi doar citit;
SCL
Serial Clock = Linie de ceas serial;
SCLH
Serial Clock High-speed = Linia de ceas n modul HS.
SDA
Serial Data = Linie de date serial;
SDAH
Serial Data High-speed = Linia de date serial n modul HS;
SO
Small Outline = Ocupare redus;
SRAM
Static Random Access Memory = Memorie cu acces aleator ce nu necesit
mprosptare;
USB
Universal Serial Bus = Magistral serial universal;
VSO
Very Small Outline = Ocupare foarte redus;
INTRODUCERE
11
12
Fiecare dispozitiv conectat la magistral este adresabil software de o adres unic i exist relaii
simple de master / slave; n orice moment dispozitivele master pot funciona ca master-emitoare sau
ca master-receptoare.
Este o magistral muli-master, ce include detectarea coliziunilor i impune reguli de arbitraj pentru a
preveni coruperea datelor n cazul n care dou sau mai multe dispozitive master iniiaz simultan un
transfer de date.
13
Este o magistral serial, orientat pe 8 bii, cu transfer bidirecional, ce poate fi fcut cu viteze de pn
la 100 kbit / s n modul Standard, de pn la 400 kbit / s n modul Fast, sau pn la 3.4 Mbit / s n
modul de mare vitez.
Filtrarea on-chip respinge spike-urile de pe linia de date pentru a pstra integritatea datelor de pe
magistral.
Numrul de circuite integrate care pot fi conectate la aceeai magistral este limitat doar de o
capacitate maxim de magistral de 400 pF. Dedesupt, se prezint exemple de aplicaii I2C.
14
15
Timpul de dezvoltare software poate fi redus prin crearea unei biblioteci de module software
reutilizabile.
n afar de aceste avantaje, circuitele integrate CMOS din gama circuitelor compatibile I2C ofer
designerilor caracteristici speciale, care sunt deosebit de atractive pentru echipamente portabile i
sisteme cu baterie. Ele au toate: consum de curent extrem de sczut, imunitate ridicat la zgomot ,gam
larg de tensiune de alimentare, gam de temperatur de funcionare larg.
1.2 Beneficii productor
Circuitele integrate compatibile I2C nu ajut numai designerii. Acestea dau, de asemenea, o gam
larg de beneficii pentru productorii de echipamente, deoarece:
Este o interfa simpl, cu doar 2 fire, serial, ce minimizeaz interconexiunile, astfel circuitele
integrate au mai puini pini i se reduc cablajele de pe PCB; rezultatul : PCB-uri mai mici i mai puin
costisitoare .
Complet integrat, protocolul I2C elimin necesitatea pentru decodoare de adres i alte probleme de
"logic de lipire.
Capacitatea de multi-master a interfeei I2C permite testarea rapid i folosirea echipamentelor de
utilizatorul final prin intermediul unei conexiuni externe la o linie de asamblare.
Disponibilitatea circuitelor integrate compatibile I2C n SO (contur mic), VSO (contur foarte mic),
precum i pachete DIL, reduce cerinele de spaiu chiar mai mult.
Acestea sunt doar cteva dintre beneficii. n plus, circuitele integrate compatibile I2C mresc
flexibilitatea de proiectare a sistemelor, permind variante simple de construcie a echipamentelor i
modernizarea uoar a acestora pentru a menine design-ul updatat. n acest fel, o ntreag familie de
echipamente poate fi dezvoltat n jurul unui model de baza. Upgrade-uri de echipamente noi, sau
modele viitoare mbuntite (de exemplu, memorie extins, control de la distan, etc) pot fi produse
prin simpla dezactivre a circuitelor corespunztoare de pe magistral. n cazul n care este nevoie de
un ROM mai mare, este pur i simplu o chestiune de selectare a unui microcontroller cu un ROM mai
mare dintr-o anumit gam. Cum noi circuite integrate le pot nlocui pe cele vechi, este uor de a
adaug noi caracteristici pentru echipamente sau pentru a crete performanele sale prin scoaterea
circuiteler integrate vechi de pe magistral i nlocuirea acestora cu succesoarele lor.
Pentru a produce un sistem care s satisfac aceste criterii, este nevoie de o structura de magistral
serial. Dei magistralele seriale nu au capacitatea de transfer a magistralelor paralele, ele au nevoie de
mai puine cabluri i mai puini pini de conectare a circuitelor integrate. Cu toate acestea, o magistral
nu este doar un fir de interconectare, ea ntruchipeaz toate formatele i procedurile de comunicare n
cadrul sistemului. Dispozitivele care comunic unul cu altul pe magistrala de serie trebuie s aib un
anumit protocol care s evite toate posibilitile de confuzie, pierderea de date i blocajul de informaii.
Dispozitivele rapide trebuie s fie capabile s comunice cu dispozitivele lente. Sistemul nu trebuie s
depind de dispozitivele conectate la acesta, altfel modificri sau mbuntiri ar fi imposibile. De
asemenea, trebuie conceput o precedur pentru a decide care dispozitiv va fi n controlul magistralei
de date i cnd. i, n cazul n care diferite dispozitive cu diferite viteze de ceas sunt conectate la
magistral, sursa de ceas de magistral trebuie s fie definit.Toate aceste criterii sunt implicate n
specificaiile magistralei I2C
1.4. De ce am ales comunicarea I2C pentru aceast lucrare?
Pentru lucrarea de fa aveam nevoie de o magistral simpl, o magistral care s mi reduc numrul
de interconexiuni de pe plac, astfel ca aceasta s fie ct mai mica posibil.
Cum nu am avut nevoie de o magistral foarte rapid, am ales pentru proiect o magistral serial,
bidirecional. Poate avantajul decisiv care m-a facut sa aleg aceast magistral a fost uurina cu care
voi putea s upgradez proiectul n viitor, uurin data de posibilitatea de a elimina sau aduga elemente
n circuit, posibilitate ce alte magistrale mi-o ngreunau.
17
18
Sincronizare
Descriere
Dispozitivul care trimite date pe magistral.
Dispozitivul care primete date de pe magistral.
Dispozitivul care initiaz un transfer, genereaz semnalale de ceas si
ncheie un transfer.
Dispozitivul adresat unui master.
Mai mult de un master poate ncerca s preia controlul asupra
magistralei n acelai timp, far s corupa mesajul.
Procedura care asigur ca, n cazul n care mai mult de un master
ncearc simultan s controleze magistrala. i atribuie unuia singur acest
control, trimiterea datelor nefiind astfel corupt.
Procedura de sincronizare a semnalelor de ceas a mai multor dispositive
conectate la magistral.
Magistrala I2C este o magistral muli-master, aceasta nseamnnd c mai mult de un dispozitiv capabil
s controleze magistrala de date poate fi conectat la acesta. Ca mastere sunt, de obicei,
microcontrollerele; s lum n considerare cazul unui transfer de date ntre dou microcontrolere
conectate la magistrala I2C (a se vedea figura 2.1). Acest lucru scoate n eviden relaiile master-sclav
i receptor-emitor de pe magistrala I2C. Trebuie remarcat faptul c aceste relaii nu sunt permanente,
ci depind numai de direcia de transfer de date la acel moment.
19
linii sunt ridicate (n starea de HIGH). Etapele de ieire ale dispozitivelor conectate la magistrala
trebuie s aib o drena comun sau un colector comun pentru a efectua funcia I.Datele de pe
magistrala I2C pot fi transferate la rate de pn la 100 kbit / s n modul Standard, de pn la 400 kbit / s
n modul Fast, sau pn la 3,4 Mbit / s n modul de mare vitez. Numrul de interfee conectate la
magistral depinde numai de limita de capacitate a magistralei de 400 pF.
21
2.5.2 Acknowledge
Transferul de date este obligatoriu s se fac cu confirmare. Pulsul de ceas asociat acknowledge-ului
este generat de ctre dispozitivul master. Transmitorul elibereaz linia SDA (HIGH) n timpul
pulsului de ceas acknowledge. Receptorul trebuie s trag n jos linia SDA n timpul pulsului de ceas
de confirmare, astfel nct acesta rmne LOW constant n timpul perioadei de HIGH al acestui impuls
de ceas (vezi Fig.2.6). Desigur, set-up-ul i timpii de ateptare, trebuie s fie, de asemenea, luate n
considerare.
De obicei, un receptor care a fost abordat este obligat s genereze acknowledge dup fiecare octet
primit, cu excepia cazului n care mesajul ncepe cu o adresa CBUS.
Atunci cnd un dispozitiv sclav nu recunoate adresa slave (de exemplu, este n imposibilitatea de a
primi sau de a transmite, deoarece realizeaz funcii n timp real), linia de date trebuie s fie lsat
HIGH de ctre dispozitivul sclav. Master-ul poate genera apoi fie o condiie STOP pentru a anula
transferul, fie o condiie START repetat pentru a ncepe un nou transfer.
23
n cazul n care un receptor-sclav nu recunoate adresa de sclav, dar, ceva timp mai trziu, nu mai poate
primi mai muli octeti de date, master-ul trebuie s abandoneze din nou transferul. Acest lucru este
indicat de ctre dispozitivul-sclav prin negenerarea semnalului de acknowledge nainte de primul byte
ce urmeaz. Slave-ul las linia de date pe HIGH iar dispozitivul master genereaz o condiie de
STOP sau una de START repetat.
n cazul n care un master-receptor este implicat ntr-un transfer, acesta trebuie s semnaleze sfritul
transferului la transmitorul-slave care nu genereaz acknowledge pe ultimul octet care a fost
cronometrat de sclav. Emitorul-sclav trebuie s elibereze linia de date, pentru a permite dispozitivului
master s genereze o condiie de STOP sau o condiie de START repetat.
inut n LOW de dispozitivul cu cea mai lung perioada LOW. Dispozitivele cu perioade mai scurte
de LOW introduc o ateptare de n starea HIGH n acest timp.
Atunci cnd toate dispozitivele n cauza s-au numrat pe perioada lor de LOW, linia de ceas va fi
eliberat i dus n starea HIGH. Nu va fi atunci nici o diferena ntre ceasurile dispozitivelor i starea
liniei SCL i toate dispozitivele vor ncepe numrarea perioadele lor de HIGH. Primul dispozitiv care
finalizeaz perioada de HIGH va trage din nou linia SCL n LOW. n acest fel, un ceas sincronizat este
generat pe linia CL cu perioada s de LOW determinat de dispozitivul cu cea mai lung perioada
LOW , iar perioada s de HIGH determinat de cel cu periada de HIGH cea mai scurt.
2.6.2 Arbitrarea
Un dispozitiv master poate ncepe un transfer numai n cazul n care magistrala este liber.Dou sau
mai multe dispositive master pot genera o condiie de START n timpul minim ateptare al condiiei
START, care conduce la o generare de condiie de START pe magistrala. Arbitrajul are loc pe linia
SDA, n timp ce linia SCL este n strarea HIGH, n aa fel nct master ul care transmite un nivel
ridicat, n timp ce un alt master transmite un nivel sczut va opri stadiul de ieire date, deoarece nivelul
de pe magistral nu corespunde cu nivelul sau.
Arbitrajul poate continua pentru mai multe bii. Prima etap este compararea biilor de adres. n cazul
n care dispozitivele master ncearc fiecare s se adreseze aceluiai dispozitiv, arbitrajul continu cu
compararea biilor de date, dac acestea sunt master-transmitor, sau bi de acknowledge, dac
acestea sunt master-receptor. Deoarece adresa i datele de informaii cu privire la magistrala I2C este
determinat de ctre master-ul care ctig arbitrajul, nici o informaie nu se pierde n timpul procesului
de arbitraj.
25
Un master care pierde arbitrajul poate genera impulsuri de ceas pn la sfritul octetului n care se
pierde arbitrajul.
n cazul n care un master include, de asemenea, o funcie de sclav i pierde arbitrajul n timpul etapei
de adresare, este posibil c masterul castigatoar s ncerce s-l abordeze. Prin urmare,dispozitivul
master care pierde, trebuie s comute imediat n modul de sclav. Figura 2.8 prezint procedura de
arbitraj de la doi masteri. Desigur, mai multe dispositive pot fi implicate (n funcie de ct de multe
dispositive de master sunt conectate la magistral). n momentul n care exist o diferena ntre nivelul
de date intern al masterului generarand DATA 1 i nivelul real de pe linia SDA, transferul de date este
oprit, ceea ce nseamn c un nivel ridicat de ieire este apoi conectat la magistral. Acest lucru nu va
afecta transferul de date iniiat de ctre masterul ctigator.
Deoarece controlul magistralei I2C este decis exclusiv pe adresa sau codul de master i datele sunt
transmise de dispositive master concurente, nu exist nici un master central, nici vreo ordine de
prioritate pe magistral.
O atenie special trebuie acordat n cazul n care, n timpul unui transfer serial, procedura de arbitraj
este nc n curs de desfurare n momentul n care o condiie de START repetat sau o condiie de
STOP este transmisa pe magistrala. Dac este posibil ca o astfel de situaie s apar, dispozitivele
master implicate trebuie s trimit aceast condiie de START repetat sau condiia de STOP n aceeai
poziie n cadrul format. Cu alte cuvinte,arbitrarea nu este permisa ntre:
O condiie de START repetat i un bit de date
O condiie de STOP i un bit de date
O condiie de START repetat i o condiie de STOP.
Dispozitivele slave nu sunt implicate n procedura de arbitraj.
26
27
28
Atunci cnd este trimis o adres, fiecare dispozitiv ntr-un sistem compar primii apte bii dup
condiia de START cu adresa lui. n cazul n care acestea se potrivesc, dispozitivul se consider adresat
de ctre master c un sclav-receptor sau sclav-transmitor, n funcie de bitul de R / W. O adresa de
sclav poate fi format dintr-o parte fix i o parte programabil. Deoarece este probabil s existe mai
multe dispozitive identice ntr-un sistem, partea programabil a adresei slave-ului da numrul maxim
posibil de astfel de dispositive ce pot fi conectate la magistral. Numrul de bii de adres programabil
ale unui dispozitiv depinde de numrul de pini disponibili. De exemplu, dac un dispozitiv are 4 bii de
adresa fixi i 3 bii de adres programabili, un total de opt dispozitive identice pot fi conectate la
aceeai magistral.
Comitetul de magistrala I2C coordoneaz alocarea de adrese I2C. Dou grupuri de opt adrese
(0000XXX i 1111XXX) sunt rezervate pentru scopurile indicate n tabelul 2. Combinaia de bii
11110XX a adresei slave-ului este rezervat pentru adresarea pe 10 bii.
29
Tabelul 2.
Adresa dispozitivului
SLAVE
0000 000
0000 000
0000 001
0000 010
Bit-ul de R/W
(read/write)
0
1
X
X
0000 011
0000 1XX
X
X
1111 1XX
1111 0XX
X
X
Descriere
Adres de apel general.
Byte-ul de START.
Adrese de CBUS.
Rezervat pentru diferite formate de
magistral.
Rezervat pentru dezvoltri viitoare.
Codul pentru master n modul Hs (highspeed).
Rezervata pentru desvoltri viitoare.
Adresare pe 10 biti a dispozitivelor slave.
Note:
1. Nici un dispozitiv nu trebuie s dea acknowledge la recepia unui byte de START.
2. Adresa CBUS a fost rezervat pentru a permite combinri de dispozitive compatibile CBUS i
dispositive compatibile I2C n acelai sistem. Dispozitivele compatibile I2C nu au voie s rspund la
recepia aceastei adrese.
3. Adresa rezervat pentru un alt format de magistral este inclus pentru a permite I2C i altor
protocoale s fie amestecate. Numai dispozitivele compatibile I2C care pot lucra cu astfel de formate i
protocoale pot rspunde la aceast adres.
2.10 Adresa de apel general.
Adresa de apel general este utilizat pentru a aborda fiecare dispozitiv conectat la magistrala I2C. Cu
toate acestea, n cazul n care un dispozitiv nu are nevoie de oricare din datele furnizate n cadrul
structurii de apel general, el poate ignor aceast adresa prin care neemiterea unei confirmri
(acknowledge). n cazul n care un dispozitiv are nevoie de date de la o adresa de apel general, va
confirm aceast adresa i se va comporte c un sclav-receptor. Al doilea i urmatoarii octeti vor fi
recunoscui de ctre fiecare sclav-receptor capabil de manipularea acestor date. Un sclav care nu poate
procesa unul din aceti bytes trebuie s o ignore printr-un notacknowledge. Scopul adresei de apel
general este ntotdeauna specificat n al doilea octet (vezi fig.2.14).
30
31
Cei apte bii rmai n al doilea octet conin adresa master-ului hardware. Aceast adres este
recunoscut de ctre un dispozitiv inteligent (de exemplu, un microcontroler), conectat la magistral
care va conduce apoi informaiile de la master-ul hardware. n cazul n care dispozitivul master
hardware poate aciona, de asemenea, ca un sclav, adresa de sclav este identic cu adresa de master.
n unele sisteme, o alternativ ar putea fi faptul c master-ul transmitor hardware este setat n modul
de sclav receptor dup resetarea sistemului. n acest fel, un system master configurarabil poate spune
master-ului hardware (care este acum n modul slave-receptor), crei adresa trebuie trimise datele (vezi
fig.2.16). Dup aceast procedura de programare, master-ul hardware rmne n modul mastertransmitor.
32
precedat de o procedura de pornire care este mai lung dect prodedura normal (vezi fig.2.17).
Procedura de pornire este format din:
O condiie de START (S)
Un byte START (00000001)
Un puls de ceas de acknowledge (ACK)
O condiie de START repetat (Sr).
Dup ce condiia de START (S) a fost transmis de un master care necesit acces la magistral, octetul
de START (00000001) este transmis. Prin urmare, un alt microcontroler poate folosi linia SDA la o
rat de eantionare sczut pn cnd unul dintre cele apte zerouri dinn octetul de START este
detectat. Dup detectarea acestui nivel LOW pe linia SDA, microcontrolerul poate trece la o rat de
eantionare mai mare pentru a gsi condiia de START repetat (Sr), care este apoi utilizat pentru
sincronizare.
Un receptor hardware se va reset la primirea condiiei de START repetat (Sr) i, prin urmare, va
ignor octetul de START. Un impuls de ceas acknowledge este generat dup octetul de START. Acest
lucru este prezent doar pentru a se conforma cu formatul de manipulare al octetului folosit pe
magistral. Nici unui dispozitiv nu poate s recunoasc octetul de START.
Multe dintre aplicaii de astzi au nevoie de a transfer serial cantiti mari de date i necesit rate de
bii mai mari de 100 kbit/s (Standard-mode), sau chiar 400 kbit/s (Fast-mode). C urmare a
mbuntirii continue n domeniul tehnologiilor semiconductoare, dispozitivele I2C sunt disponibile
acum cu rate de bii de pn la 3,4 Mbit / s (Hs-mode) fr creteri notabile n costul de fabricaie al
circuitului de interfa.
Pentru caa cele mai multe dintre cele 112 adresele disponibile cu sistemul de adresare pe 7 bii au fost
alocate n curnd, a devenit evident c mai multe combinaii de adrese au fost necesare pentru a preveni
probleme cu alocarea de adrese de sclavi pentru dispozitive noi. Aceast problema a fost rezolvat cu
noul sistem de adresare pe 10 bii, ceea ce a permis o cretere de aproximativ zece ori a numrului de
adrese disponibile.
Noi dispozitive slave, cu o interfa I2C Fast-mode sau Hs-mode pot avea o adresa de sclav de 7 sau
de 10-bit. Dac este posibil, o adresa de 7 bii este de preferat, deoarece aceast este cea mai ieftin
soluie hardware i astfel rezult cea mai scurt lungime a mesajului. Dispozitivele cu adrese de 7 i
de 10 bii pot fi amestecate n acelai sistem I2C, indiferent dac acesta este un system Fast-mode sau
un sistem Hs-mode.Att dispozitivele master existente ct i cele viitoare pot genera fie adrese de 7 ,
fie de 10 bii.
2.12.1 FAST-MODE
n Fast-mode, protocolul, formatul, nivelurile logice i sarcina maxim capacitiv pentru liniile SDA i
SCL menionate n specificaiile I2C n modul Standard sunt neschimbate. Noi dispozitive cu o
interfa I2C trebuie s ndeplineasc cel puin cerinele minime de Fast mode sau Hs-mode.
Dispozitive Fast-mode pot primi i transmite date cu viteze de pn la 400 kbit / s. Cerin minim este
c acestea se pot sincroniza cu un transfer de 400 kbit/s; ele pot prelungi apoi perioada LOW a
semnalului SCL pentru a ncetini transferul. Dispozitive Fast-mode sunt compatibile cu transferurile i
pot comunica cu dispozitivele de mod standard ntr-un sistem I2C cu viteze de 0 pn la 100 kbit / s. Ca
dispozitive de mod Standard, ele nu ar trebui totui s fie incluse ntr-un sistem I2C de mod Fast,
deoarece acestea nu pot urmri rata de transfer mai mare i stri imprevizibile ar avea loc.
Fast-mode are urmtoarele caracteristici suplimentare n comparaie cu modul Standard:
Rata maxim de transfer de bii este crescut la 400 kbit/s.
Sincronizarea ntre linia de date serial (SDA) i linia de ceas serial (SCL a fost adaptat. Nu este
nevoie de compatibilitate cu alte sisteme, cum ar fi magistrale CBUS deoarece acestea nu pot funciona
la creterea ratei de bii.
Intrrile dispozitivelor Fast-mode ncorporeaz suprimarea spike-rilor i un trigger Schmitt la
intrrile SDA i SCL.
Buffer-ele ieirilor dispozitivelor Fast-mode ncorporeaz controlul pantei marginilor semnalelor de
pe SDA i SCL.
n cazul n care alimentarea cu energie a unui dispozitiv Fast-mode este oprit, pinii de intrare
ieire ai liniilor SDA i SCL trebuie s fie independeni, astfel nct acestea s nu obstrucioneze liniile
de magistrala.
Dispozitivele de pull-up conectate la liniile de magistrala trebuie s fie adaptate pentru a se potrivi
celui mai scurt timp de cretere maxim permisibil admis pentru Fast-mode. Pentru sarcini de pn la
34
200 pF, dispozitivul de pull-up pentru fiecare linie de magistrala poate fi un rezistor; pentru sarcini de
magistrala ntre 200 i 400 pF pF, dispozitivul de pull-up poate fi o surs de curent (3 m max.) sau un
rezistor cu comutarea circuitelor (vezi Fig.2.18).
C o opiune, dispozitive de master de mod Hs poate avea o punte. n timpul transferului H, datele de
mare vitez (SDAH) i de ceas serial de mare vitez (SCLH) liniile de dispositive de mod Hs sunt
separate de acest pod (punte) de liniile SDA i CL ale dispozitiveloe de mod Fast sau Standard.
Acest lucru reduce sarcina capacitiv a liniilor SDAH i SCLH rezultnd timpi de cretere i de cdere.
Singur diferena dintre dispozitivele slave n modul HS i dispozitivele slave n modurile Fast i
Standard este vitez cu care acestea opereaz. Sclavii n modul Hs au tampoane de ieire drena
comun pe rezultatele SCLH i SDAH. Opional, tranzistori de pull-down de pe pnul SCLH pot fi
folosii pentru a ntinde nivelul sczut al semnalului SCLH, dei acest lucru este permis numai dup
bitul de acknowledge n transferurilor de mare virteza.
Intrrile de dispositive de mod Hs ncorporeaz suprimarea spike-urilor i un trigger Schmitt la
intrrile SDAH i SCLH.
Buffer-ele de ieire de dispozitive n modul Hs ncorporeaz controlul pantei de marginile n care se
ncadreaz semnalele SDAH i SCLH.
Figura 2.19 arat configuraia fizic I2C ntr-un sistem doar cu dispositive de mod Hs. Pinii de SDA i
SCL pe dispozitivele de master sunt utilizai numai n sistemele de transport cu magistrale mixte de
vitez i nu sunt conectate ntr-un sistem numai de mod Hs. n astfel de cazuri, aceste pini pot fi
utilizai pentru alte funcii.
Opionale sunt rezistentele de serie Rs cu scopul de a proteja etapele de intrare-ieire ale
dispozitivelor I2C de spike-urile de nalta tensiune pe liniile de magistrala i a minimiza interferenele.
Rezistentele de pull-up RP menin liniile SDAH i SCLH la un nivel ridicat n cazul n care
magistrala este liber i asigura c semnalele s fie trase de la un nivel LOW la un nivel ridicat n
timpul de cretere cerut. Pentru sarcini de magistrala capacitive mai mari (> 100 pF), rezistorii Rp
pot fi nlocuii cu surse de current de pull-up pentru a satisface cerinele de timp de cretere. Cu
excepia cazului n care este procedat de un bit de acknowledge, timpul de cretere al impulsurilor de
ceas SCLH din transferuri de mod HS este scurtat de circuitul de surs de curent de pull-up intern.
36
Masterul activ trimite apoi o condiie de START repetat (Sr), urmat de o adresa de sclav de 7 bii (sau
de 10 bii), cu un bit de R/W (read/write), i primete un bit de acqnowledge (A) de la sclavul selectat.
Dup o condiie de START repetat i dup fiecare bit de acqnowledge (A) sau bit de not-acqnowledge
(A), masterul activ dezactiveaz circuitul surs de current de pull-up. Acest lucru permite altor
dispozitive s ntrzie transferul serial prin ntinderea perioadei de LOW a semnalului SCLH.
38
Maestrul activ reactiveaz circuitul surs de curent de pull-up curent din nou, atunci cnd toate
dispozitivele au eliberat linia i semnalul SCLH ajunge la un nivel ridicat, iar astfel accelereaz ultima
parte a timpul de cretere a semnalului SCLH.
Transferul de date n continu n modul Hs dup urmtoarea condiie de START repetat (Sr), i comut
napoi la modul Fast/Standard dup o condiie STOP (P). Pentru a reduce aeriene de cod master, este
posibil c un maestru s lege o serie de transferuri de mod Hs, separate prin condiiile de START
repetat (SR).
2.15 Trecerea de la modul Fast/Standard la modul HS i invers.
Dup resetare i initializare, dispozitivele de mod Hs trebuie s fie n modul Fast. Fiecare dispozitiv de
mod Hs poate comut de la modul Fast la modul Hs i invers i este controlat de transferul serial de pe
magistrala I2C.
nainte de momentul de timp t1 din Fig.2.21, fiecare dispozitiv conectat funcioneaz n modul Fast.
ntre momentele t1 i th (acest interval de timp poate fi ntins prin orice dispozitiv), fiecare dispozitiv
conectat trebuie s recunoasc secven "S 00001XXX O" i trebuie s comute circuitul sau intern de
la setarea de mod Fast la setarea de mod Hs. ntre momentele t1 i th dispozitivele master i slave
conectate efectueaz aceast comutare prin urmtoarele aciuni. Masterul activ (ctigtor):
1. Adapteaz SDAH i filtrele de intrare SCLH n funcie de cerin de suprimare a spike-ului n modul
Hs.
2. Adapteaz set-upul i timpii de ateptare n conformitate cu cerinele modului Hs.
3. Adapteaz controlul pantei din etapele de ieire a SDAH i SCLH n conformitate cu cerinele
modului Hs.
4. Trece la rat de bit a modului Hs, care este necesar dup momentul de timp tH.
5. Activeaz circuitul surs de current de pull-up a liniei SCLH la momentul de timp th.
Masterii non-activi, sau pierztori:
1. Adaptarea liniei SDAH i filtrele de intrare ale SCLH n funcie de cerin de suprimare a spikeurilor n modul Hs.
2. Ateapt o condiie de STOP pentru a detecta cnd maistrala este din nou liber.
Toi sclavii:
1. i adapteaz linia SDAH i filtrele de intrare SCLH n funcie de cerin suprimrii spike-urilor n
modul Hs.
2. Adaptarea set-upului i a timpilor de ateptare n conformitate cu cerinele modului Hs. Aceast
cerin poate fi deja ndeplinit prin adaptarea filtrelor de intrare.
3. Adaptarea controlul pantei de ieire a liniei SDAH, dac este necesar. Pentru dispozitivele slave,
controlul pantei este aplicabil numai pentru etap de ieire SDAH i, n funcie de toleranele de
circuit, att cerinele modului Fast ct i cerinele modului HS pot fi ndeplinite fr comutare de circuit
intern.
La momentul de timp tFS n Fig.2.21, fiecare dispozitiv conectat trebuie s recunoasc condiia de
STOP (P) i comut circuitul intern de la setarea de mod Hs napoi la setarea de mod Fast nainte de
momentul de timp t1. Acest lucru trebuie s fie finalizat n timpul minim n care magistrala este liber
aa cum este specificat n tabelul 3 n conformitate cu specificaiile Fast-mode.
39
40
HS + Fast
HS + Standard
Fast + Standard
HS <-> HS
HS <-> Fast
0-3.4 Mbit/s
0-100 kbit/s
0-3.4 Mbit/s
0-400 kbit/s
0-3.4 Mbit/s
-
HS <->
Standard
Fast <->
Standard
0-100 kbit/s
0-100 kbit/s
0-100 kbit/s
0-100 kbit/s
41
Fast <->Fast
0-100 kbit/s
0-400 kbit/s
0-100 kbit/s
Standard <->
Standard
0-100 kbit/s
0-100 kbit/s
0-100 kbit/s
2.18 Modul de transfer fast sau standard ntr-un sistem cu viteze mixte.
Legtur artat n figura 2.23 interconecteaz liniile de magistrala seriale corespunztoare, formnd
un sistem de magistrala serial. Cum nici un cod master (00001XXX) nu se transmite, circuitele surs
de current de pull-up stau nchise i toate ieirile sunt deschise n drena. Toate dispozitivele, inclusiv
dispozitivele de mod Hs, comunica unul cu cellalt conform protocolului, formatului i vitezei din
specificaiile de mod Fast sau Standard.
2.19 Transferul de mare vitez ntr-un sistem cu viteze mixte.
Figura 2.24 prezint diagram de sincronizare a unui transfer complet de mod Hs, care este invocat de
ctre o condiie START, un cod master, i un bit de not-acqnowledge A (la viteze de mod fast sau
standard). Dei diagram de timp este mprit n dou pri, ar trebui s fie privit c o singur
diagram de timp, unde momentul de timp tH este un punct comun pentru ambele pri.
Codul master este recunoscut de ctre legtur n masterul activ sau non-activ (vezi Fig.2.23). Legtur
efectueaz urmtoarele aciuni:
42
1 ntre t1 i th (vezi Fig.2.24), tranzistorul TR1 se deschide pentru a separ liniile SDAH i SDA, dup
care tranzistorul TR3 se nchide pentru a trage n jos pe linia SDA la VSS.
3.
Atunci cnd ambele SCLH i SCL deven HIGH (tH n Fig.2.24), tranzistorul TR2 se deschide
pentru a separ liniile SCLH i SCL. TR2 trebuie s fie deschis nainte c SCLH s fie tras n LOW
dup condiia de START repetat (Sr).
Transferul Hs ncepe dup tH cu o condiie de START repetat (Sr). n timpul transferului Hs, linia SCL
rmne la un nivel ridicat, iar linia SDA la un nivel de starea de echilibru LOW, i astfel este pregtit
pentru transfer de o condiie STOP (P)
Dup fiecare bit de confirmare (A) sau de not-acqnowledge (A) masterul activ dezactiveaz circuitul
surs de curent de pull-up. Acest lucru permite altor dispozitive s ntrzie transferul serial prin
ntinderea perioadei de LOW a semnalului SCLH. Masteul activ re-activeaz circuitul surs de current
de pull-up din nou, atunci cnd toate dispozitivele sunt eliberate i semnalul SCLH ajunge la un nivel
ridicat, iar astfel accelereaz ultima parte a timpul de cretere a semnalului SCLH. n situaii
neregulate, dispozitivele de mod Fast/Standard pot nchide legtur (TR1 i TR2 nchis, TR3 deschis),
n orice moment, trgnd n jos linia SCL pentru cel puin 1 ms, de exemplu, pentru a recupera de la o
blocare a magistralei (ntrziere a acesteia).
Modul HS nainteaz o condiie de STOP i aduce sistemul napoi n modul Fast / Standard. Legtur
recunoate, de asemenea, aceast condiie STOP i ia urmtoarele msuri:
1 Transistor TR2 se nchide dup tFS pentru a conecta SCLH cu SCL; ambele fiind HIGH n acest
moment. Tranzistorul TR3 se deschide dup tFS, care elibereaz linia SDA i permite s fie tras n
HIGH de rezistorul RP de pull-up. Aceast este condiia de STOP pentru dispozitivele Fast / Standard.
TR3 trebuie s se deschid suficient de rapid pentru a asigura timpul liber pe magistrala ntre condiia
de STOP i cea mai veche condiie de START urmtoare, n conformitate cu specificatiilei modului
Fast.
2. n cazul n care SDA ajunge la un nivel ridicat (t2 n Fig.2.24), tranzistorul TR1 se nchide pentru a
conecta SDAH cu SDA. (Not: interconexiunile sunt realizate atunci cnd toate liniile sunt high,
prevenind astfel tulburri pe liniile de magistrala). TR1 i TR2 trebuie s fie nchise n timpul liber
minim de pe magistral n conformitate cu specificaiile modului Fast .
2.20 Cerine de timp pentru legtur dintr-un system cu viteze mixte.
Se poate observ din Fig.2.24 c aciunile legturii de la t1,tH i tFS trebuie s fie att de rapide nct
s nu afecteze liniile SDAH i SCLH. n plus, podul (legtur) trebuie s ndeplineasc cerinele de
sincronizare aferente din specificaiile modului Fast pentru SDA i linii SCL.
2.21.Conexiuni electrice ale dispozitivelor I2C legate la magistral.
Specificaiile electrice pentru intrrile i ieirile dispozitivelor I2C i caracteristicile liniilor de
magistrala la care sunt legate aceste dispositive vor fi duscutate n acest subcapitol.
Dispozitivele I2C cu nivele de intrare fixe de 1.5-3 voli pot avea alimentare de tensiune
independent.Rezistorii de pull-up trebuie conectai la o alimentare de 5V cu o toleran de 10% (figura
2.25). Dispozitivele I2C cu nivele de intrare legate la Vdd trebuie s aib o linie de alimentare comun
la care se leag de asemenea, rezistorii de pull-up. (figura 2.26).
Cnd dispozitivele cu nivele de intrare fixe sunt amestecate cu dispoztive cu nivele de intrare
commune, legate la Vdd, dispozitivele rezultate trebuie legate la o alimentare comun de 5 V +/-10% i
43
trebuie s aib rezistori de pull-up conectai la pinii lor de SDA i SCL, aa cum evideniaz figura
2.27.
Nivelele de intrare sunt definite astfel nct nivelul de zgomot a nivelului de LOW s fie 0.2*Vdd iar
nivelul zgomotului al nivelului de HIGH s fie 0.2*Vdd.
44
2.22 .PCA9555
2.22.1. Descriere generala
PCA9555 este un dispozitiv CMOS cu 24 de pini care ofer 16 bii de expansiune de uz general de
intrare sau ieire paralela (GPIO) pentru aplicaii I2C i a fost dezvoltat de firma NXP
Semiconductors. mbunatirile includ toleran de 5V I/O, curent de alimentare mai mic, pini de I/O
configurabili individual i dimendiuni mai mici. I/O expanderele reprezint o soluie simpl atunci
cnd sunt necesari pini de intrare/ieire adiionali pentru switch-uri, senzori, butoane, LEDuri,
ventilatoare, etc.
PCA9555 are doua configuraii de cate 8 bii (selecie intrare/iesire). Master-ul sistemului poate activa
pinii de I/O ca i intrri sau ca i ieiri prin scrierea biilor de configurare.Datele de intrare sau ieire
sunt pstrate n regitrii de intrare sau ieire corespunztori.Polaritatea registrului de citire poate fi
schimbat cu registrul de schimbare de polaritate.Toti regitrii pot fi citii de master-ul sistemului.
Ieirea PCA9555 este activat atunci cand orice stare de intrare variaz de la starea registrului de
intrare corespunzator portului i este folosit s indice master-ului sistemului c starea de intrare s-a
schimbat.Reset-ul de alimentare (reset-ul activat atunci cand tensiunea de alimentare este prezent)
seteaz regitrii la valorile lor predefinite i iniializeaz starea dispozitivului.
3 pini hardware (A0,A1 si A2) variaz adresa I2C a dispozitivului i astfel 8 dispozitive pot mparti
aceeasi magistral I2C.
2.22.2 Specificaii.
Tensiune de alimentare de operare: 2.3-5.5 V.
Registru de polaritate inversa.
ntrerupere activ la LOW pe iesire.
Curent de standby mic.
Filtru de zgomot pe intrarile SDA i SCL.
45
Configuraia pinilor este prezentat n figura 2.29, iar adresa dispozitivului este prezentat n figura
2.30.
46
n acest proiect PCA9555 s-a folosit pentru a lega tastatura cu 12 butoane pe magistrala
sistemului.Aceasta s-a legat folosind pinii adiionali oferii de expansiunea pinilor de uz
general.(vezi figura 2.32)
2.23 PCA9553
2.23.1 Descriere general.
LED Blinker-ul PCA9553 aprinde intermittent leduri n aplicaii I2C atunci cnd este necesar s se
limiteze traficul de pe magistral sau s se elibereze master-ul I2C (microprocesorul). Unicitatea
acestui dispozitiv const n oscilatorul sau intern cu dou rate de clipire programabile. Pentru a aprinde
47
intermitent nite leduri cu legate la un I/O expander, master-ul de pe magistrala trebuie s transmit
repetat comenzi de aprindere respective stingere a ladului. Aceste comenzi ngreuneaz traficul de pe
magistrala (l aglomereaz) i folosete un timer al master-ului. PCA9553 necesit doar comand
iniial prin care se seteaz cele dou rate de clipire (frecvena i perioada de clipire). Din aces
moment, este necesar doar o comand de la master-ul de pe magistrala pentru a aprinde sau stinge
individual ledurile. Astfel orice pini de uz general folosii pentru a aprinde intermittent acele leduri vor
fi folosii pentru alte funcii.
Reset-ul de alimentare initializeaza registrii la starea lor predefinit (toi 0), astfel toate ledurile vor fi
stinse.
De asemenea, pinii folosii pentru a aprinde intermittent ledurile sunt pini de uz general, deci ei pot fi
folosii i pentru alte funcii, dar nu este o variant foarte eficient deoarece sunt doar 4 pini, mult mai
puini dect ofer un I/O expander.
2.23.2 Specificaii.
48
Configuraia pinilor este prezentata n figura 2.34, iar adresa dispozitivului este prezentata n figura
2.35.
49
Aplicaia n care s-a folosit PCA9553 n aces proiect const n legarea unor leduri la acest
dispozitiv.Acest lucru s-a vrut pentru a elibera magistrala I2C de transiterea comenzilor de
aprindere i stingere repetate. Configuraia aplicaiei este ilustrat n figura 2.36.
50
Procesorul folosit (master-ul I2C) este un procesor K10DX256 de la Freescale, un procesor relativ nou
i performant. Acesta are o frecven de ceas de 72 MHz (megahertz), memorie flash programabil de
256 KB (kilobytes) i o memorie SRAM de 64 KB (kilobytes). Este un procesor pe 32 de bii, ce
51
ncorporeaza o arhitectur ARM versiunea a 7-a. Am ales acest procesor deoarece este foarte fiabil, are
performane bune, ce asigura posibilitatea dezvoltrii viitoare a sistemului.
Legarea procesorului n sistem este detaliat n figura 3.2.
52
Montajul este alimentat la 12 voli sau prin USB la 5 voli. Circuitul LM7805 este un regulator, un
stabilizator de tensiune ce coboar tensiunea de la 12 voli ct este pe intrare, la 5 voli, ct este nevoie
pe liniile SDA si SCL. Stabilizatorul scoate acea tensiune de 5 voli. Urmeaza un filtru LC ce
stabilizeaz semnalul i l cura, iar cele 2 PCA-uri (I/O expander-ul si aprinztorul intermitent de
leduri) sunt legate la liniile SDA si SCL folosind rezistori de pull-up de 10 kiloohmi, aa cum este
recomandat n foile de catalog ale acestora.
La I/O expander (PCA9555) s-a legat tastatura de 4x3 butoane, iar la PCA9553 s-au legat 4 leduri,
folosindu-se pentru protecia lor rezistene de 2 kiloohmi.
Tot la 5 voli se alimenteaz i circuitul 74HC74, un circuit de tip flip-flop, un bistabil n esena, ce
numr la ieirea lui tranziiile din 1 n 0 i din 0 n 1 care s-au produs. Astfel totat partea de circuit
legat la integratul 74HC74 const ntr-un counter.
Descrierea detaliat a legrii tastaturii la PCA9555 i legarea ledurilor la PCA9553 sunt descrise n
figurile 3.4 i 3.5.
53
Alimentarea, aa cum am precizat i mai sus, se poate face att printr-o alimentare de 12 voli, ct i
prin USB, la 5 voli. Alimentarea prin USB ofera un potenial de +5 voli i un curent maxim de 500
mA (miliamperi).
Comunicarea ntre plac i calculator se face serial, aa c este nevoie de un convertor USB-serial,
conversie asigurat n cazul meu de FT232R. Comunicarea este descris n figura 3.6.
54
Sub-amnsamblul D4 este un circuit pentru protecia dispozitivului conectat (n cazul meu, plcua) la
fluctuaii ale tensiunii i curentului date de calculator sau de cablu.
Pentru dezvoltri ulterioare, pe placu s-a pus i o referin de tensiune de 2.5 voli (figura 3.7).
Placua ce conine toate aceste elemente a fost realizat n 2 straturi i este ilustrat n figura 3.8.
55
56
57
58
Codul compilat este uploadat pe microcontroller prin portul JTAG cu ajutorul unui programator, o
interfa de cumunicare, debug i programare USB Multilink Universal de la firma PE Micro care
permite calculatorului s comunice cu procesorul printr-un port USB. Modul de conectare este ilustrat
n figura 46.
Incrcarea programului pe processor se face doar cnd se face conexiunea placuei cu programator prin
JTAG, programatorul este conectat la calculator prin USB, iar placua este alimentat.
59
60
Pentru linia SDA se repet procedeul de la linia SCL, singura diferena fiind faptul ca PTB1
(corespunzator liniei SDA la processor) este corespunztor bitului 4 din regitrii. Astfel, pentru ca n
registrul PDDR s se configureze o ieire, se face bitul 4 1 iar toi ceilali 0, rezultnd valoarea
0x10. Pentru a define valoarea de LOW, n registrul PCOR se scrie valoarea 0 iar pentru a se define
starea de HIGH, registrul se configureaz ca orice n afar de ieire, acesta lund valoarea predefinit,
adic HIGH.
De asemenea, se definesc 2 indicatori de stare ce au rolul de a citi starea liniilor SDA i SCL. Acetia se
definesc prin citirea biilor corespunztori liniilor SDA i SCL (4 respectiv 5). Citirea se face prin
registrul PDIR (port data input register), prin operaia logic I a valorii registrului + valoarea 0x10
pentru SDA i 0x20 pentru SCL. Pentru a se citi doar valoarea bitului corespunztor liniei (4 respectiv
5), se face shiftarea (deplasarea) cu 4 respectiv 5 bii spre stnga.
4.2 Funcia de delay (ntarziere)
//Delay function
void Delay_us(uint16 delay){
uint32 i,wait;
wait = 16 * delay; //ceasul rureaz la 72Mhz ; 72 = 4 * 16 => 1 us delay
i = 0;
while(i<wait){
i++;
}
}
Funcia de delay are ca parametru un ntreg ce va da mrimea (durata) ntrzierii. Practic, funcia este
parcurs pn cnd variabila I va devein egal cu variabila wait, adic 16*delay (mrimea ntarzierii).
4.3 Funcia de iniializarre a magistralei.
/****************************************************************************
; Funcie de iniializare IICbus
*********************************************************/
void local_iic_init(void){
SDA_HIGH(); // SDA-high
SCL_HIGH(); // SCL-high
}
Iniializarea sistemului const n tragerea liniilor SDA i SCL n starea HIGH.
4.4 Funcia de trimitere a unui byte (octet).
/********************************************************
; Master-ul IICbus trimite un byte
2 - error
1 - nack
0 - ok
*********************************************************/
uint8 iic_send_byte(uint8 byte){
uint8 temp,counter;
temp = byte;
counter = 8;
while(counter != 0){
if((temp & 0x80)!=0){
61
SDA_HIGH();
} else {
SDA_LOW();
}
Delay_us(15);
SCL_HIGH();
temp = (temp << 1);
counter--;
Delay_us(15);
if(waitSCLrise())return 2;
SCL_LOW();
}
// ACK
SDA_HIGH();
Delay_us(15);
SCL_HIGH();
Delay_us(15);
if(waitSCLrise())return 2;
temp = 0;
if(SDA!=0) temp = 1; // Not acknoledge
SCL_LOW();
Delay_us(45);
return temp;
}
Funcia de tremitere a unui byte are ca parametru chiar byte-ul ce trebuie trimis. Acesta se stocheaz
ntr-o variabil temp. Se parcurge apoi byte-ul pe bii ( prin bucla while care decrementeaz variabila
counter, iniializat cu 8 la fiecare pas). Se determin apoi valoarea MSB-ului (most significant bit)
prin operaia I ntre byte-ul stocat n temp i 0x80 (1000 0000). Daca rezultatul operaiei este 1
atunci SDA este trecut n HIGH. Altfel, SDA se trece n LOW. Procedeul se repet pentru toi biii
byte-ului, prin shiftarea byte-ului la fiecare pas spre dreapta.
In finalul buclei while se verific dac linia SCL s-a ridicat (a trecut n starea HIGH). Dac trec mai
mult de 3ms (milisecunde) pana SCL trece n HIGH, atunci se ntoarce un mesaj de eroare.
La finalul transmiterii byte-ului se verific prezena bitului de acqnowledge. Daca acesta exist, atunci
se intoarce mesajul OK.
Paii funciei de trimitere a unui byte sunt:
1) In temp se memoreaz byte-ul ce urmeaz a fi trimis;
2) Se creaz o bucl while cu un numar de 8 pai (numarul de bii dintr-un byte);
2.1) Se testeaz bitul 7 (MSB-ul);
2.2) Dac bitul este 1, atunci linia SDA trece n HIGH, altfel n LOW;
2.3) La fiecare pas temp se shifteaz la dreapta cu 1, iar counter (iniial=8) se
decrementeaz;
3) Se verific prezena bitului de acqnowlodge.
Organigrama funciei este prezentat n figura de mai jos.
62
Funcia waitSCLrise folosit n corpul funciei de trimitere a unui byte are strucura:
/******************************************************************************
; maste-ul IICbus ateapt linia scl sa se ridice
0 - scl high
1 - error : scl nu s-a ridcat (nu a trecut n starea HIGH) n 3 ms
***************************************************************************/
uint8 waitSCLrise(void){
uint16 counter;
counter = 0;
while(SCL!=1){
counter++;
if(counter<18){//mai puin de 3ms au trecut
Delay_us(counter*20);
}else return 1;//error
}
return 0;
}
63
Ct timp linia SCL este n starea LOW (=0), o variabila iniializat cu 0 se incrementeaz. Pentru a
trece 3 ms (milisecunde) este necesar o ntarziere de maxim (17 * 20 pai de ceas).
Dac trec mai mult de 3 ms, atunci se ntoarce un mesaj de eroare.
4.5 Funcia de primire a unui byte.
/******************************************************************************
; master-ul IIC primete un byte
2 - error
1 - nack
0 - ok
*********************************************************/
uint8 iic_receive_byte(uint8 *byte,uint8 ack){
uint8 temp,counter;
counter = 8;
temp=0;
while(counter != 0){
temp = (temp << 1);
SCL_HIGH();
Delay_us(15);
if(waitSCLrise())return 2;
if(SDA==1) temp++;
SCL_LOW();
Delay_us(15);
counter--;
}
*byte = temp;
if(ack){
// ACK
SDA_LOW();
} else SDA_HIGH();
SCL_HIGH();
Delay_us(15);
if(waitSCLrise())return 2;
SCL_LOW();
SDA_HIGH();
Delay_us(45);
return 0;
}
Funcia de recepie a unui byte are ca parametrii adresa unde este stocat byte-ul primit i o variabil
ack care indic prezenta bitului de acqnowlwdge dupa primirea byte-ului.
Se intr ntr-o bucl while ce tine 8 pai (numarul de bii dintr-un byte). In aceast bucl, la fiecare pas
liniei SCL ii se aplic o tranziie din HIGH n LOW, i tot la fiecare pas se verific starea liniei SDA.
Dac linia SDA este n HIGH atunci byte-ul temp (iniializat cu 0) se incrementeaz. Deci, biii de 1
din byte-ul primit vor corespunde unor bii de 1 n byte-ul temp. Aadar byte-ul primit va fi stocat n
temp, cei 2 fiind identici.
64
La final se verific prezena bitului de acqnowledge. Dac acesta nu apare n mai puin de 3 ms
(milisecunde) atunci se ntoarce un mesaj de eroare.
Paii funciei de primire a unu byte sunt:
1) Se iniializeaza o variabil counter cu 8 i o variabil temp cu 0;
2) Se intr ntr-o bucl while de 8 pai;
2.1) La fiecare pas se verific starea liniei SDA.
2.2) Dac linia SDA este 1 atunci n temp se va scrie valoarea 1, altfel 0. Astfel se construiete
temp;
2.3) La fiecare pas se decrementeaz counter i se shifteaz temp spre dreapta cu 1;
3) Se verific prezena bitului de acqnowledge.
Organigrama funciei este prezentat n figura de mai jos.
; funcia de scriere
*********************************************************/
uint8 local_iic_write(uint8 *buf, uint8 len){
uint8 nack;
uint8 i;
nack = 0;
Delay_us(15);
if(SDA==0 || SCL==0) local_iic_restart();
if(SDA==0 || SCL==0) return 2;
// magistrala este ocupat
// ************** start****************
SDA_LOW();
Delay_us(15);
SCL_LOW();
Delay_us(15);
// ------------ data ----------------for(i=0;i<len;i++){
nack = iic_send_byte(buf[i]);
if(nack) break;
}
// condiie de STOP
SDA_LOW();
Delay_us(15);
SCL_HIGH();
Delay_us(15);
SDA_HIGH();
return nack;
}
Funcia de scriere are ca parametrii adresa I2C la care se va scrie byte-ul si lungimea acestuia (daca
vrem s scriem 2 bytes atunci lumgimea va fi de 16). Inceputul funciei const ntr-o verificare dac
magistrala este liber sau nu. Dac aceasta nu este liber, se ncearc un restart de magistral, o
resetare a acesteia, prin funcia local_i2c_restart. Corpul aceste funcii este:
/****************************************************************************
Funcie de restart a magistralei IIC
*********************************************************/
void local_iic_restart(void){
uint8 c;
for(c=0;c<9;c++){
// condiie de STOP
SCL_LOW();
Delay_us(15);
SDA_LOW();
Delay_us(15);
SCL_HIGH();
Delay_us(15);
waitSCLrise();
66
SDA_HIGH();
Delay_us(15);
}
}
Funcia de restart a magistralei const n incercarea de forare a trecerii liniilor SDA i SCL din LOW
n HIGH.
Dac nici n urma ncercrii de restart, SDA i SCL sunt tot n starea 0, atunci se ntoarece un semnal
de eroare. In orice alt caz n afar de cel prezentat mai sus, atunci scrierea poate ncepe, deci se d o
condiie de START.
Pentru scrierea efectiv se scrie n nack valoarea byteului trimis din buf[i]. Dac nack ramne 0
atunci se iese din operaia de scriere. Funcia este finalizat cu o condiie de STOP.
Paii functiei de scriere sunt:
1) Verificarea magistralei (dac aceasta este liber sau ocupat);
2) Dac nu este ocupat, se d condiia de START;
3) Se transmite fiecare byte cu ajuorul funciei de trimitere a unui byte descris mai sus;
4) Dac s-a scris ceva, atunci se d o condiie de STOP;
Organigrama funciei de scriere este:
67
// condiie de STOP
SDA_LOW();
Delay_us(15);
SCL_HIGH();
Delay_us(15);
SDA_HIGH();
return nack;
}
Funcia de citire are ca parametrii: adresa datei ce va fi scris n registrul ce urmeaz a fi citit, numarul
de bytes citii (lungimea datelor), adresa datei ce va fi citit i lungimea datei ce va fi citit.
Iniial se verifica dac magistrala este liber, adic SDA i SCL s nu fie 0. n cazul n care ambele
sunt 0, atunci se ncearc un restart de magistral i se verifica din nou starea acesteia. Dac
magistrala continua sa fie ocupat, se ntoarce un mesaj de eroare. Dac magistrala este liber atunci se
d condiia de START.
Dup condiia de START, n nack (iniializat cu 0) se scrie byte-ul. Se verific nack; dac acesta
ramne 0, atunci se ncheie pricesul de citire (nu s-a scris nimic, deci nu are ce s se citeasc).Dac n
nack s-a scris ceva, atuci datele din acesta trebuie citite. Pentru asta, este necesar o condiie de start
repetat (un restart).
Pentru nceperea procesului de citire, este necesar retrimiterea adresei I2C. Din nou se verific dac
adresa s-a trimis, iar n caz negativ, procesul se ntrerupe.
Din foaia de catalog se observ c PCA9555 are 2 regitrii port de intrare (input port register 0 i input
port register 1). Se intr ntr-o bucl for cu un numr de pai egal cu numrul de bytes (octei)
transmii. Se rein datele citite att din registrul de intrare 0, ct si din registrul de intrare 1. Dac
aceast operaiune s-a efectuat cu succes, adic n nack s-a scris ceva i astfel este diferit de 0,
atunci procesul de citire se ncheie , i se d o condiie de STOP.
Paii functiei de citire sunt:
1) Verificarea magistralei (dac aceasta este liber sau ocupat);
2) Dac nu este ocupat, se d condiia de START;
3) Se scrie byte-ul ce urmeaz a fi citit;
4) Se da o condiie de start repetat i se retrimite adresa I2C;
5) Se primete n ambii regitrii de intrare octeii ce au fost citii, cu ajutorul funciei de primire a
unui byte;
6) Dac n nack (unde au fost stocai octeii citii) este scris ceva, atunci se d condiia de STOP.
Organigrama funciei de citire este:
69
char olddata[2];
char readdata[2];
char writedata[2];
short counter=0;
void main(void)
{
sysinit();
writedata[0] = 0x40;
writedata[1] = 0;
olddata[0] = 0xFF;
olddata[1]=0xFF;
for(;;) {
RS232_CLI_Process();
if (counter>=1000) {
counter=0;
local_iic_read (writedata, 2,readdata , 2);
if (olddata[0]!= readdata[0]) {
70
0x01)==0)){
0x02)==0)){
0x04)==0)){
0x08)==0)){
if (olddata[1]!= readdata[1]) {
if(((olddata[1] & 0x01)!=0)&& ((readdata[1]& 0x01)==0)){
RS232TXStr ((unsigned char *)"\r\n Key=9");
}
if(((olddata[1] & 0x02)!=0)&& ((readdata[1]& 0x02)==0)){
RS232TXStr ((unsigned char *)"\r\n Key=0");
}
if(((olddata[1] & 0x04)!=0)&& ((readdata[1]& 0x04)==0)){
RS232TXStr ((unsigned char *)"\r\n Key=*");
}
if(((olddata[1] & 0x08)!=0)&& ((readdata[1]& 0x08)==0)){
RS232TXStr ((unsigned char *)"\r\n Key=#");
}
olddata[1] = readdata[1];
}
}
counter++;
71
}
}
72
Concluzii
n electronica modern se ncearc pe ct posibil miniaturizarea componentelor, a sistemelor i
simplificarea comunicrii ntre ele pe ct posibil. Magistrala I2C realizeaz, pe ct posibil, aceast
miniaturizare, prin reducerea la minimum a firelor de comunicaie, prin implementarea de protocoalelor
de arbitraj de magistral, prin implementarea de software reutilizabil.
Pentru aceast lucrare am folosit un microcontroller de la Freescale K10DX256 i dou periferice
compatibile I2C de care am legat o tastatur i nite leduri, urmnd ca pe viitor s se adauge i alte
periferice.
Aadar, alegerea magistralei I2C pentru aplicaia mea a fost una oportuna, ea respectnd cerinele de
sistem i de comunicare. S-a dovedit a fi o magistral simpl, mi-a uurat munca din punct de vedere al
PCB-ului (a simplificat interconexiunile) i lasa loc pentru dezvoltri importante n viitor, dat fiind
simplitatea eliminrii sau adugarii de noi dispozitive compatibile pe aceasta.
ntru ct platforma funcioneaz bine, pe viitor se va ncerca conectarea la magistral a unui display,
un PanelPilot SGD35M i a unui encoder, prin a crui rotire s se fixeze mai uor o tensiune de
referin. Se va apela la modurile de vitez ale magistralei, i este posibil chiar s se adauge nc un
master pentru performane sporite.
De asemenea, dac circuitul de ansamblu (simulatorul din figura 3.10) se va comporta conform
ateptrilor, se va ncerca ncapsularea acestuia prin realizarea unei plci similare cu cea programat n
acest proiect, plac ce va realiza funciile simulatorului. Acea plac va comunica cu componentele
ataate tot prin I2C, i va folosi, cel mai probabil, tot un microcontroller din familia K10, datorit
performanelor sale dovedite.
Acesta (simulatorul) va fi folosit n viitor pentru simularea stabilizrii naltei tensiuni de pe
acceleratorul Tandem de la Institutul de Fizic i Inginerie Nuclear Horia Hulubei, pentru ca, dac
testele o vor permite, acesta s nlocuiasc sistemele de stailizare actuale.
73
74
Bibliografie
[1]http://paginas.fe.up.pt/~ee00013/microPCI/files/I2C/Philips%20Semiconductors%20I2C
%20Handbook.pdf accesat la 1.12.2013;
[2] THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000
http://i2c2p.twibright.com/spec/i2c.pdf accesat la 1.1.2014;
[3] PCA9555 datasheet
http://www.nxp.com/documents/data_sheet/PCA9555.pdf accesat la 1.03.2014;
[4] PCA 9553 datasheet
http://www.nxp.com/documents/data_sheet/PCA9553.pdf accesat la 1.03.2014;
[5] http://mcuoneclipse.com/2012/11/07/jtagswd-debugging-with-the-frdm-kl25z-board/ accesat la
23.06.2014;
[6] D.V.Mosu, D.G.Ghita, S.Dobrescu, T.Sava, Gh.Cata-Danil, A new slit stabilization system for the
beam energy at the Bucharest tandem Van de Graaff accelerator, 2012;
[7] http://en.wikipedia.org/wiki/I%C2%B2C accesat la data 1.03.2014;
[8] http://www.i2c-bus.org/ accesat la data 1.04.2014;
[9] http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html accesat la data 1.02.2014;
[10] http://www.nxp.com/documents/application_note/AN10216.pdf accesat la data 1.03.2014;
[11] http://www.nxp.com/documents/user_manual/UM10204.pdf accesat la data 1.12.2013.
75