Sie sind auf Seite 1von 17

Bus I2C

LE BUS I2C

Inter Integrated Circuit

Introduction





Bus/rseau local dvelopp au dbut des annes 80 par


Philips Semiconductor afin de relier les diffrents
lments dun tlviseur au microcontrleur
Utilis actuellement dans beaucoup dapplications
domotiques
Les informations sont transmises la suite sur un seul
fil, une donne par coup dhorloge. Cest une
communication srie synchrone
Dbit de 100 kbits/s 400 kbits/s

Ivan FRANCOIS

Bus I2C

Caractristiques technologiques

Le but est de faire communiquer entre eux


des composants lectroniques grace 3 fils:

Signal de donnes: SDA serial data


Signal dhorloge: SCL serial clock
Signal de rfrence: masse GND

Chaque abonn dispose dune adresse


code sur 7 bits. On peut donc connecter
simultanment 128 abonns.

Le support physique utilis

Les transistors sont des bipolaires ou


des MOS

Ivan FRANCOIS

Bus I2C

Le support physique utilis






Au repos, SCL et SDA sont 1


Sorties collecteur ouvert (ou drain ouvert
pour des circuits CMOS)
Si une ou plusieurs sorties tentent d'imposer
un niveau bas sur une ligne, le ou les
transistors associs vont conduire, ce qui
entrane un niveau bas sur la ligne
correspondante (ce qui est conforme au
rsultat de la fonction ET )

Le protocole IC





Matre: Circuit qui prend l'initiative d'un


transfert d'information, qui gnre le signal
d'horloge et qui termine le transfert.
Esclave: Circuit qui participe au transfert sur
demande du circuit matre.
Attention: ne pas confondre circuit-matre et
circuit-esclave avec circuit-metteur et
circuit-rcepteur.

Ivan FRANCOIS

Bus I2C

Le protocole IC





Pour transmettre des donnes sur le bus IC, il


faut surveiller deux conditions particulires : la
condition de dpart et la condition d'arrt.
Condition de dpart: SDA passe 0, SCL reste
1
Condition darrt: SDA passe 1, SCL reste 1

START

STOP

Transmission d'un octet






A chaque impulsion sur SCL, un bit est


transmis correspondant au niveau de SDA
Cette opration est rpte pour les 8 bits
Le bit de poids fort est transmis en premier

Ivan FRANCOIS

Bus I2C

Acquittement






Une fois les 8 bits transmis, le rcepteur acquitte la


transmission au 9me bit
Lmetteur met sa ligne SDA au niveau haut
Le rcepteur met sa ligne au niveau bas
Les sorties tant collecteur ouvert, le rcepteur
lemporte, SDA sera au niveau bas
Au coup dhorloge suivant, 2 possibilits:

le maitre voit un niveau bas: octet bien reu


Le maitre voit un niveau haut: erreur de transmission donc
arrt

Exemple de trame


Envoi de loctet (B5)h

Le signal SDA doit tre stable aussi longtemps que le signal SCL est actif.
Un changement d'tat de la ligne SDA pendant que le signal SCL est au
niveau haut implique une condition de dpart ou d'arrt

10

Ivan FRANCOIS

Bus I2C

Transmission d'une adresse





Le premier octet transmis est une adresse


correspondant lesclave choisi
Le bit A0 de ladresse est rserv:

A0=1 le matre demande une lecture l'esclave


A0=0 le matre demande une criture l'esclave

11

criture d'une donne




Si le bit R/W de ladresse est 0, cela signifie que le


matre doit transmettre un ou plusieurs octets de
donnes.
Aprs chaque bit ACK valide, le matre peut soit:

Continuer d'envoyer des octets l'esclave


Dcider de terminer le dialogue par une condition d'arrt.

12

Ivan FRANCOIS

Bus I2C

Lecture d'une donne (1)







Si le bit R/W de ladresse est 1, cela signifie que le


matre veut lire des donnes issues de l'esclave
C'est toujours le matre qui va gnrer le signal
d'horloge SCL
Lesclave prend le contrle de la ligne SDA
Aprs que l'esclave ait transmis les 8 bits de
donnes, c'est le matre, cette fois-ci, qui va gnrer
un bit d'acquittement

13

Lecture d'une donne (2)


2 possibilits dacquittement:

Bit Ack au niveau bas: le matre dsire lire des octets


supplmentaires
Bit Ack au niveau haut: le matre dcide que la lecture est
termine. Cette fois-ci, bien que le bit ACK soit au niveau 1,
cela ne correspond pas une condition d'erreur mais une
fin de transfert.

14

Ivan FRANCOIS

Bus I2C

Restart


Il est possible d'enchaner criture et lecture


de l'esclave sans avoir passer par une
condition arrt
La commande repeat start permet de lire
une donne aprs criture sans gnrer de
stop entre les 2.

15

APPLICATION DU BUS I2C AU


PIC18F4685

16

Ivan FRANCOIS

Bus I2C

Prsentation et Connexions



Le PIC18F4685 possde une interface I2C


intgre
Les 2 lignes SCL et SDA sont connectes
respectivement PORTC3 et PORTC4
+5V
R

PORTC3 SCL
PORTC4 SDA

Pic 18F4695
SCL

17

SDA

Abonn 1

SCL

SDA

Abonn 2

Diffrents modes de fonctionnement




Linterface I2C peut supporter les modes


suivants:

Mode maitre
Mode multimaitre
Mode esclave

Le pic peut donc transmettre ou recevoir des


donnes en mode maitre ou esclave

18

Ivan FRANCOIS

Bus I2C

Registres de contrle






19

2 registres SSPCON1 et SSPCON2 permettent dtablir les


transmissions
Un registre dtat SSPSTAT permet de donner des informations
sur la transmission
Le bit R/W est tmoin dune transmission en cours
dcriture
Un buffer SSPBUF contient les adresses ou les donnes
SSPADD
En mode esclave: dfinit ladresse
En mode maitre: dfinit le dbit
Les transmissions consistent donc rgler ces diffrents
registres (8 bits) dans lordre du protocole

Registre SSPCON2
GCEN




20

Ivan FRANCOIS

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

GCEN: mis zro par dfaut, ne sert quen mode esclave


ACKSTAT: acquittement reu de lesclave
1 pas dacquittement
0 acquittement
ACKDT: acquittement du maitre en mode rception
1 pas dacquittement
0 acquittement
ACKEN:
1 mise en place de la squence dacquittement du maitre en mode
rception. Remise zro automatiquement
0 squence dacquittement termine

10

Bus I2C

Registre SSPCON2 (suite)


GCEN


21

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

RCEN:
1 commence une rception de la part du maitre
0 rception termine, loctet est reu
RSEN:
1 commence une squence de restart
0 restart termin
PEN:
1 commence une squence de stop
0 squence de stop termine
SEN:
1 commence une squence de start
0 squence de start termine

Conflits





Le bus I2C doit pouvoir accueillir plusieurs


maitres
Il est possible que 2 maitres prennent la
parole en mme temps
Pas de problmes lectriques (collecteur
ouvert)
Problme logique, il faut viter la corruption
des donnes

22

Ivan FRANCOIS

11

Bus I2C

Prise de contrle du bus




Le maitre relit chaque fois le bit quil


cherche imposer sur le bus

Sil impose un 0, il relira obligatoirement un 0


Sil impose un 1, 2 cas:



23

Il relit un 1=> il continue transmettre


Il relit un 0 => un autre maitre a pris la parole, il perd le
contrle

Si diffrents maitres envoient les mmes


donnes en mme temps (cas rare), aucun
conflit

Exemple: circuit 24C04




Le circuit 24C04 est une EEPROM srie


constitue de deux blocs de 256 Ko utilisant
le protocole I2C
24C04
SDA
SCL
E1
E2

24

Ivan FRANCOIS

12

Bus I2C

Elments constitutifs de la trame




Octet d'identification (devsel) :

C'est le premier octet mis par le matre, il permet de


slectionner le circuit ainsi que la nature et le lieu des
oprations effectuer (R/W, bloc).
bits 7 2 : Identification du circuit constitue d'une partie
fixe (bits 7 4) gale 1010, et d'une partie variable (bits 3
et 2) fixe par les tats logiques imposs sur les broches
E2 et E1.
bit 1 : Permet l'accs un des deux blocs de 256 Ko.
bit 0 : Slectionne le mode lecture (1) ou criture (0).

25

Elments constitutifs de la trame


(suite)

Exemple :


Octet d'adresse (addr) :

On dsire crire dans le bloc 0 d'un circuit 24C04 dont


les pattes E2 et E1 sont connectes respectivement 1
et 0. Le premier mot envoyer sera 10101000.

Ce mot indique l'adresse laquelle doivent


s'effectuer les oprations.

Octet de donne(data):

Ce mot indique la donne inscrire.

26

Ivan FRANCOIS

13

Bus I2C

Algorithme d'criture
(mode direct)

La donne est range l'adresse spcifie


par l'octet addr, la trame envoye par le
circuit matre est la suivante :

start

devsel (R/W = 0)

ack

addr

ack

data

ack

stop

27

Algorithme d'criture
(mode squentiel)


Une fois l'adresse spcifie, les donnes


sont inscrites aux adresses suivantes tant
que la condition de stop n'est pas envoye

start

devsel (R/W = 0) ack

data2

ack

data3

addr

ack

ack

data1

ack

stop

28

Ivan FRANCOIS

14

Bus I2C

Algorithme de lecture
(mode direct )


Pour effectuer une lecture il faut


pralablement envoyer l'adresse au circuit en
mode criture. Puis repositionner le circuit en
mode lecture afin d'obtenir la (les) donne(s).

start

devsel
(R/W = 0)

ack

Data (out)

29

addr

ack

ack

restart

devsel
(R/W = 1)

ack

stop

Algorithme de lecture
(mode squentiel )


En mode squentiel, aprs rception d'une


donne, le bit ack est positionn 0 par le
matre lorsqu'il dsire une nouvelle donne.

start

30

Ivan FRANCOIS

devsel
(R/W = 0)

Data1 (out)

ack

Ack=0

addr

ack

Data2 (out)

restart

devsel
(R/W = 1)

Ack=1

ack

stop

15

Bus I2C

Exercice 1



31

Soit un circuit 24C04 dont les broches E2 et


E1 sont relies la masse
On dsire crire la donne 0xF9 l'adresse
00 du bloc 0 en mode direct. Donner la
trame.
On dsire crire les donnes 0xF9, 0xE0,
0x12 respectivement aux adresses 0x10,
0x11, 0x12 du bloc 1 en mode squentiel.
Donner la trame.

Exercice 2



Soit un circuit 24C04 dont les broches E2 et


E1 sont relies la masse
On dsire lire la donne prsente
l'adresse 00 du bloc 0 en mode direct.
Donner la trame.
On dsire lire les donnes prsentes aux
adresses 0x10 et 0x11 du bloc 1 en mode
squentiel. Donner la trame.

32

Ivan FRANCOIS

16

Bus I2C

Sous programmes






I2c_start
I2c_restart
I2c_stop
I2c_write
I2c_read

33

Ivan FRANCOIS

17

Das könnte Ihnen auch gefallen