Vous êtes sur la page 1sur 8

Fichier : Bus I2C

2. MAQUETTAGE DES SOLUTIONS


CONSTRUCTIVES Tale
2.2 Architecture fonctionnelle dun systme communicant Page:1/8

http://robert.cireddu.free.fr/SIN
http://robert.cireddu.free.fr/SIN

TRANSMISSION SRIE : LE BUS I2C

Objectifs du COURS :
Ce cours traitera essentiellement les points suivants :

- le bus I2C
- protocole
- en-tte
- exemples avec le circuit Dallas DS1307 (RTC)
- complments

INTRODUCTION

Les normes I2C (Inter-Integrated Circuit) et SPI (Serial Peripheral Interface) ont t cres pour
fournir un moyen simple de transfrer des informations numriques entre des capteurs et des
microcontrleurs.
Les bibliothques Arduino pour I2C et SPI facilitent lutilisation de ces deux protocoles.
Le choix entre I2C et SPI est en gnral dtermin par les priphriques que lon souhaite
connecter. Certains appareils offrent les deux standards, mais habituellement un priphrique ou
une puce ne supporte quune seule des deux normes.
I2C lavantage de navoir besoin que de deux connexions de signalisation (lemploi de plusieurs
priphriques sur les deux connexions est assez simple et on reoit une confirmation que les
signaux ont t correctement reus).
Linconvnient est que la vitesse des donnes est infrieure celle de SPI et quelles ne
peuvent voyager que dans un seul sens la fois (Simplex), ce qui abaisse encore plus le dbit si
des communications bidirectionnelles sont ncessaires (Half Duplex). Il faut aussi connecter des
rsistances pull-up aux connexions pour sassurer de la fiabilit de la transmission des
signaux.
Lavantage de SPI est quil a un meilleur dbit et quil a des connexions dentre et de sorties
spares, si bien quil peut envoyer et recevoir en mme temps (Full Duplex). Il utilise une ligne
supplmentaire par appareil pour slectionner le priphrique actif et il faut donc plus de
connexions si on a de nombreux appareils connecter.
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:2/8

LE BUS I2C

Les deux connexions du bus I2C se nomment SCL (Serial Clock Line) et SDA (Serial Data line).
Elles sont disponibles sur une carte standard Arduino en employant la broche analogique 5 pour
SCL qui fournit un signal dhorloge, et la broche analogique 4 pour SDA, qui soccupe du transfert
des donnes (sur la Mega, il faut utiliser la broche 20 pour SDA et la broche 21 pour SCL). La
carte Uno rev 3 a des broches supplmentaires qui dupliquent les broches 4 et 5.
Pour le Raspberry Pi type B, il sagit respectivement des broches GPIO2 et GPIO3 pour SDA et
SCL repres sur le Pi Cobbler .
Un priphrique sur le bus I2C est considr comme le priphrique matre. Son travail consiste
coordonner le transfert des informations entre les autres priphriques (esclaves) qui sont
connects.
Il ne doit y avoir quun seul matre qui contrle les autres composants auxquels il est connect. La
figure ci-dessous montre un matre I2C avec plusieurs esclaves I2C.

R R

Matre Esclave Esclave Esclave


(RasPi) (TSL2561) (DS1307) (Arduino)

IHM
(LCD Display)

Matre I2C avec plusieurs esclaves I2C

Les priphriques I2C ont besoin dune masse commune pour communiquer.
Les priphriques esclaves sont identifis par leur numro dadresse. Chaque esclave doit avoir
une adresse unique. Certains appareils I2C ont une adresse fixe alors que dautres permettent
que lon configure leur adresse en dfinissant les broches HIGH ou LOW ou en envoyant des
commandes dinitialisation.

Remarques :

LArduino utilise des valeurs sur 7 bits pour spcifier les adresses I2C. Certaines notices
techniques de priphriques emploient des adresses sur 8 bits, dans ce cas il faut diviser par deux
pour obtenir la valeur correcte sur 7 bits.
La bibliothque Arduino Wire masque toutes les fonctionnalits de bas niveau du I2C et permet
lemploi de commandes simples pour initialiser les appareils et communiquer avec eux.
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:3/8

Le bus I2C permet dchanger des informations sous forme srie avec un dbit pouvant atteindre
100 kilobits/s ou 400 kilobits/s pour les versions les plus rcentes.
Ses points forts sont les suivants :

- cest un bus srie bifilaire utilisant une ligne de donne SDA et une ligne dhorloge SCL ;
- le bus est multi matres ;
- chaque abonn dispose dune adresse code sur 7 bits, on peut donc connecter simultanment
128 abonns dadresses diffrentes sur le mme bus (sous rserve de ne pas le surcharger
lectriquement = la charge) ;
- un acquittement est gnr pour chaque octet de donne transfr ;
- un procd permet de ralentir lquipement le plus rapide pour sadapter la vitesse de
lquipement le plus lent lors dun transfert ;
- le nombre maximal dabonn nest limit que par la charge capacitive maximale du bus qui peut
tre de 400 pF ;
- les niveaux lectriques permettent lutilisation des circuits en technologies CMOS, NMOS ou
TTL.

PROTOCOLE

La figure ci-dessous montre le principe adopt au niveau des tages dentres/sorties des circuits
dinterfaces du bus I2C.
+VDD

SDA
SCL

OUT1 OUT2

Horloge Horloge
IN1 IN2

OUT1 OUT2

Donnes Donnes
IN1 IN2

Circuit dinterface 1 Circuit dinterface 2

Schma de linterface matrielle des circuits compatibles du bus I2C

La partie entre nappelle aucune remarque particulire, en revanche la partie sortie fait appel
une configuration drain ouvert (lquivalent en MOS du classique collecteur ouvert) et qui
permet de raliser des ET cbls par simple connexion sur la ligne SDA ou SCL, des sorties de
tous les circuits.
Aucune charge ntant prvue dans ces derniers, une rsistance de rappel (pull-up) une tension
positive doit tre mise en place.
tant entendu que nous travaillons en logique positive, cest--dire quun niveau haut correspond
une tension plus leve quun niveau bas.
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:4/8

Lorsque aucun abonn nmet sur le bus, les lignes SDA et SCL sont au niveau haut qui est leur
tat de repos.
Quand une ligne (SDA ou SCL) est au repos (niveau 1), on peut la forcer 0.
Quand une ligne (SDA ou SCL) est au niveau 0, on ne peut pas la forcer 1.

Exemple avec PIC 16F876A (master) et DS1307 (slave)

Dans lexemple ci-dessus, l'horloge SCL est au niveau 0 car c'est le PIC 16F876A (matre) qui
force cette ligne 0.

Remarque :
Le DS1307 (module RTC : Real Time Clock) fonctionne toujours en esclave : ce n'est donc jamais
lui qui agit sur l'tat de l'horloge (SCL).

Donnes stables Donnes stables


SDA

SCL
Les donnes Les donnes
doivent tre doivent tre
stables stables

Chronogramme fondamental du bus I2C

Le chronogramme ci-dessus rsume le principe fondamental dun transfert de donnes :


Une donne nest considre comme valide sur le bus que lorsque le signal SCL est ltat haut.
Lmetteur doit donc positionner la donne mettre lorsque SCL est ltat bas et la maintenir
tant que SCL est ltat haut.
Comme la transmission seffectue sous forme srie, une information de dbut et de fin doit tre
prvue. Linformation de dbut se nomme START et linformation de fin STOP.
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:5/8

Une condition de dpart est ralise lorsque la ligne SDA passe du niveau haut au niveau bas
alors que SCL est au niveau haut. Rciproquement, une condition darrt est ralise lorsque SDA
passe du niveau bas au niveau haut alors que SCL est au niveau haut.

Les donnes sont envoyes par paquets de huit bits (ou octets). Le bit de poids fort est envoy le
premier, chaque octet est suivi par un bit dacquittement (ACK) de la part du destinataire.

Le processus fonctionne de la faon ci-dessous.

Chronogramme dun change sur bus I2C

La ligne SCL est pilote par linitiateur de lchange ou matre.


Le chronogramme ci-dessus montre dabord une condition de dpart, gnr par le matre du bus
cet instant. Elle est suivie par le premier octet de donnes, poids fort en tte. Aprs le huitime
bit, lmetteur qui est aussi le matre dans ce cas met sa ligne SDA au niveau haut, cest--dire au
repos mais continue gnrer lhorloge sur SCL.
Pour acqurir loctet, le rcepteur doit alors forcer la ligne SDA au niveau bas pendant ltat haut
de SCL qui correspond cet acquittement, prenant en quelque sorte la place dun neuvime bit.
Le processus peut alors continuer avec loctet suivant et se rpter autant de fois que ncessaire
pour raliser un change dinformations complexes.
Lorsque cet change est termin, le matre gnre une condition darrt.

EN-TTE

La figure page suivante montre le contenu du premier octet qui est toujours prsent en dbut
dchange. Ses sept bits de poids forts contiennent ladresse du destinataire, ce qui autorise 128
combinaisons diffrentes. Le bit de poids faible indique si le matre va raliser une lecture ou une
criture. Si ce bit est zro, le matre va crire dans lesclave ou lui envoyer des donnes. Si ce
bit est un, le matre va recevoir des donnes de lesclave.
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:6/8

Contenu de loctet den-tte de lchange sur le bus I2C

Lorsquun matre dsire effectuer plusieurs changes destination desclaves dadresses


diffrentes, il nest pas oblig de terminer le premier change par une condition darrt mais peut
les enchaner en gnrant une condition de dpart ds la fin dun change.

EXEMPLE AVEC LESCLAVE DS1307

Le circuit Dallas DS1307 est une horloge temps rel (Real Time Clock), qui fournit secondes,
minutes, heures, jours, dates, mois et annes.
Les annes bissextiles sont prises en compte (jusqu'en 2100).
Le DS1307 travaille dans le mode standard (frquence d'horloge de 100 kHz).
L'adresse I2C (7 bits) du DS1307 est : 1101000 (adresse fixe par le constructeur et non
modifiable).

Exemple d'criture du DS1307 :


L'metteur est le matre et le rcepteur est l'esclave.
Le registre d'adresse 04h du DS1307 contient la date (voir datasheet du DS1307).
Pour rgler le calendrier au 27 du mois, il faut crire la donne 27 (en code BCD) dans le registre
d'adresse 04h du DS1307.

Le bus I2C utilise le protocole suivant :


Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:7/8

1) Pour initier le dialogue, le matre cre une condition Start.


2) Le matre envoie l'adresse de l'esclave (1101000) suivi du bit 0 (bit Write).
3) L'esclave rpond (accus de rception : bit ACKnowledge).
4) Le matre envoie l'adresse du registre (04h) crire.
5) L'esclave rpond (accus de rception : bit ACKnowledge).
6) Le matre envoie la donne (27) crire.
7) L'esclave crit la donne puis envoie un accus de rception (bit ACKnowledge).
8) Le matre termine le dialogue avec une condition Stop.

Le bus I2C est maintenant libre (SCL = 1, SDA = 1 = niveaux de repos).

Chronogramme complet de lchange sur bus I2C avec lesclave DS1307

Question :

Daprs lexemple ci-dessus, combien de temps faut-il pour le transfert en criture ?

La frquence est de 100 kHz, il faut donc pour le transfert :


3x9
= 270 s environ.
100000

Exemple de lecture du DS1307 :


L'metteur est l'esclave et le rcepteur est le matre.
Les registres d'adresses 00h 06h du DS1307 contiennent respectivement les secondes,
minutes, heures, jours, dates, mois et annes (voir datasheet du DS1307).
Voici comment lire, d'une seule traite, le contenu des registres d'adresses 00h 06h du DS1307 :

Chronogramme correspondant :
Fichier : Bus I2C

TRANSMISSION SRIE : Tale


LE BUS I2C Page:8/8

Chronogramme complet de lchange sur bus I2C avec lesclave DS1307


1) Pour initier le dialogue, le matre cre une condition Start.
2) Le matre envoie l'adresse de l'esclave (1101000) suivi du bit 1 (bit Write).
3) L'esclave rpond (accus de rception : bit ACKnowledge).
4) Le matre envoie l'adresse du registre (0x00) lire.
5) L'esclave rpond (accus de rception : bit ACKnowledge).
6) Le matre met une condition Repeated Start.
7) Le matre envoie l'adresse de l'esclave (1101000) suivi du bit 1 (bit Read).
8) L'esclave rpond (accus de rception : bit ACKnowledge).
9) L'esclave envoie le contenu du registre d'adresse 0x00 au matre.
10) Le matre rpond (accus de rception : bit ACKnowledge).
11) L'esclave envoie le contenu du registre d'adresse 0x01 (automatiquement incrment) au
matre.
12) Le matre rpond (accus de rception : bit ACKnowledge).
13) L'esclave envoie le contenu du registre d'adresse 0x02 (automatiquement incrment) au
matre.
14) Le matre rpond (accus de rception : bit ACKnowledge).

21) L'esclave envoie le contenu du registre d'adresse 0x06 (automatiquement incrment) au


matre.
22) Le matre rpond (accus de rception : bit Not ACKnowledge).
23) Le matre termine le dialogue avec une condition Stop.

Le bus I2C est maintenant libre (SCL = 1, SDA = 1 = niveaux de repos).

Question :

Essayer de retrouver prcisment la date et lheure laide du chronogramme complet de


lchange sur bus I2C avec lesclave DS1307 (page 7).

Le contenu du registre d'adresse 0x00 du DS1307 est 00000110 (codage BCD : 06 secondes).
Le contenu du registre d'adresse 0x01 est 0x56 (c'est--dire 56 minutes).
Le contenu du registre d'adresse 0x02 est 0x09 (c'est--dire 09 heures).
Le contenu du registre d'adresse 0x03 est 0x03 (c'est--dire Mardi).

Remarque : pour les amricains Sunday = 1.

Le contenu du registre d'adresse 0x04 est 0x20 (c'est--dire 20 me jour du mois).


Le contenu du registre d'adresse 0x05 est 0x05 (c'est--dire mois de mai).
Le contenu du registre d'adresse 0x06 est 0x08 (c'est--dire anne 2008).

Mardi 20 mai 2008, 9 heures 56 minutes et 6 secondes

COMPLMENTS

Rfrence bibliothque Arduino Wire : http://www.arduino.cc/en/Reference/Wire

Protocole et spcifications du bus I2C : http://electro8051.free.fr/I2C/busi2c.htm

Vous aimerez peut-être aussi