Вы находитесь на странице: 1из 10

1.

Historique
Le bus I2C ( Inter Integrated Circuit Bus ) est le bus historique, dvelopp par Philips pour les
applications de domotique et d'lectronique domestique au dbut des annes 80, notamment
pour permettre de relier facilement un microprocesseur les diffrents circuits d'un tlviseur
moderne.
C'est le bus qui a merg de la guerre des standards lance par tous les acteurs du
monde lectronique. Ainsi, dans votre tlviseur, tous les ensembles sont sur un bus I2C
( Rcepteur tlcommande, rglages ampli BF, tuner, horloge, gestion pritel)
Il existe d'innombrables priphriques exploitant ce bus, il est mme implantable par logiciel
dans n'importe lequel des microcontrleurs. Le poids de l'industrie de l'lectronique grand
public a impos des prix trs bas aux nombreux composants.

2. Caractristiques
Le bus I2C permet de faire communiquer entre eux des composants lectroniques trs divers
grce seulement trois fils :

un signal de donne ( SDA ),

un signal d'horloge ( SCL ),

un signal de rfrence lectrique ( Masse ).

Ceci permet de raliser des quipements ayants des fonctionnalits trs puissantes ( En
apportant toute la puissance des systmes microprogramms ) et conservant un circuit
imprim trs simple, par rapport un schma classique ( 8bits de donnes, 16 bits d'adresse +
les bits de contrle ).
Les donnes sont transmises en srie 100Kbits/s en mode standard et jusqu'
400Kbits/s en mode rapide. Ce qui ouvre la porte de cette technologie toutes les applications
o la vitesse n'est pas primordiales.
De nombreux fabricants ayant adopt le systme, la varit des circuits disponibles disposant
d'un port I2C est norme : Ports d'E/S bidirectionnels, Convertisseurs A/N et N/A, mmoires (
RAM, EPREM, EEPROM, etc... ), Circuits Audio ( Egaliseur, Contrle de volume, ... ) et
autre drivers ( LED , LCD , ...).
Le nombre de composants qu'il est ainsi possible de relier est essentiellement limit par
la charge capacitive des lignes SDA et SCL : 400 pF .

3. Principe
Afin de d'viter les conflits lectriques les Entres/Sorties SDA et SCL sont de type
"Collecteur Ouvert". Cela permet ainsi la prsence de plusieurs matres sur le bus.

Structure d'E/S d'un module I2C :

4. Le protocole I2C
Le protocole I2C dfinit la succession des tats logiques possibles sur SDA et SCL, et la
faon dont doivent ragir les circuits en cas de conflits.

4.1. La prise de contrle du bus


Pour prendre le contrle du bus, il faut que celui-ci soit au repos ( SDA et SCL '1').
Pour transmettre des donnes sur le bus, il faut donc surveiller deux conditions particulires :

La condition de dpart. ( SDA passe '0' alors que SCL reste '1' )

La condition d'arrt. ( SDA passe '1' alors que SCL reste '1' )

Lorsqu'un circuit, aprs avoir vrifi que le bus est libre, prend le contrle de celui-ci, il en
devient le matre. C'est lui qui gnre le signal d'horloge.

4.2. La transmission d'un octet

Aprs avoir impos la condition de dpart, le matre applique sur SDA le bit de poids
fort D7.

Il valide ensuite la donne en appliquant pendant un instant un niveau '1' sur la ligne
SCL.

Lorsque SCL revient '0', il recommence l'opration jusqu' ce que l'octet complet soit
transmis.

Il envoie alors un bit ACK '1' tout en scrutant l'tat rel de SDA.

L'esclave doit alors imposer un niveau '0' pour signaler au matre que la transmission
s'est effectue correctement.

Les sorties de chacun tant collecteurs ouverts, le matre voie le '0' et peut alors
passer la suite.

Dans cet exemple :

SCL : Horloge impose par le matre.

SDAM : Niveaux de SDA imposs par le matre.

SDAE : Niveaux de SDA imposs par l'esclave.

SDAR : Niveaux de SDA rels rsultants.

4.3. La transmission d'une adresse


Le nombre de composants qu'il est possible de connecter sur un bus I2C tant largement
suprieur deux, il est ncessaire de dfinir pour chacun une adresse unique.
L'adresse d'un circuit, code sur sept bits, est dfini d'une part par son type et d'autre part par
l'tat appliqu un certain nombre de ces broches. Cette adresse est transmise sous la forme
d'un octet au format particulier.

On remarque ici que les bits D7 D1 reprsentent les adresse A6 A0, et que le bit D0 et
remplac par le bit de R/W qui permet au matre de signaler s'il veut lire ou crire une donne.
Le bit d'acquittement ACK fonctionne comme pour une donne, ceci permet au matre de
vrifier si l'esclave est disponible.
Note 1: Cas particulier des mmoires :
L'espace adressable d'un circuit de mmoire tant sensiblement plus grand que la plupart
des autres types de circuits, l'adresse d'une information y est code sur deux octets ou plus. Le
premier reprsente toujours l'adresse du circuit, et les suivants l'adresse interne de la mmoire.
Note 2: Les adresses rserves.
Les adresses 00000XXX et 111111XX sont rservs des modes de fonctionnement
particuliers.

4.4. Ecriture d'une donne


L'criture d'une donne par le matre ne pose pas de problme particulier :

Note : Cas particulier d'utilisation d'ACK :

L'criture d'un octet dans certains composants ( Mmoires, microcontrleur, ... ) peut prendre
un certain temps. Il est donc possible que le matre soit oblig d'attendre l'acquittement ACK
avant de passer la suite.

4.5. Lecture d'une donne


La lecture d'une donne par le matre se caractrise par l'utilisation spciale qui faite du bit
ACK. Aprs la lecture d'un octet, le matre positionne ACK '0' s'il veut lire la donne
suivante ( cas d'une mmoire par exemple ) ou '1' la cas chant. Il envoie alors la condition
d'arrt

5. La gestion des conflits


5.1. Mise en situation
La structure mme du bus I2C a t conu pour pouvoir y accueillir plusieurs matres. Se pose
alors le problme commun tout les rseaux utilisant un canal de communication unique : la
prise de parole.
En effet, chaque matre pouvant prendre possession du bus ds que celui-ci est libre, il existe
la possibilit de que deux matres prennent la parole en mme temps. Si cela ne pose pas de
problme sur le plan lectrique grce l'utilisation de collecteurs ouverts, il faut pouvoir
dtecter cet tat de fait pour viter la corruption des donnes transmises.

5.2. Principe
Comme nous l'avons vu prcdemment, pour prendre le contrle du bus, un matre potentiel
doit d'abord vrifier que celui-ci soit libre, et qu'une condition d'arrt ait bien t envoye
depuis au moins 4,7s. Mais il reste la possibilit que plusieurs matres prennent le contrle
du bus simultanment.
Chaque circuit vrifie en permanence l'tat des lignes SDA et SCL, y compris lorsqu'ils sont
eux mme en train d'envoyer des donnes. On distingue alors plusieurs cas :
(1) Les diffrents matres envoient les mmes donnes au mme moment :

Les donnes ne sont pas corrompues, la transmission s'effectue normalement,


comme si un seul matre avait parl. Ce cas est rare.

(2) Un matre impose un '0' sur le bus :

Il relira forcment '0' et continuera transmettre. Il ne peut pas alors dtecter


un ventuel conflit.

(3) Un matre cherche appliquer un '1' sur le bus :

Si il ne relit pas un niveau '1', c'est qu'un autre matre a pris la parole en mme
temps. Le premier perd alors immdiatement le contrle du bus, pour ne pas
perturber la transmission du second. Il continue nanmoins lire les donnes
au cas celles-ci lui auraient t destines.

5.3. Exemple
Soit le chronogramme suivant :

Dans cet exemple :

SCLR : Horloge rsultante.

SDA1 : Niveaux de SDA imposs par le matre n1.

SDA2 : Niveaux de SDA imposs par le matre n2.

SDAR : Niveaux de SDA rels rsultants lus par les deux matres.

5.4 Analyse :
Le premier octet est transmis normalement car les deux matres imposent les mme donnes.
(Cas n1). Le bit ACK est mis '0' par l'esclave.
Lors du deuxime octet, le matre n2 cherche imposer un '1' (SDA2) , mais relit un '0'
(SDAR), il perd alors le contrle du bus et devient esclave (Cas n3) . Il reprendra le contrle
du bus, lorsque celui-ci sera de nouveau libre.
Le matre n1 ne voit pas le conflit et continue transmettre normalement. (Cas n2)

Au total, l'esclave reu les donnes du matre n1 sans erreurs et le conflit est pass
inaperu.

5.5 Les nouvelles caractristiques


Afin de compenser quelques lacunes des premires spcifications du bus I2C ( qui datent de
1982 ), quelques nouvelles amliorations ont t apportes partir de 1993 :

Le mode rapide : Le bus dsormais la capacit de transmettre des donnes


jusqu' une vitesse de 400 Kbit/s.

Des entres triggers de Schmitt : Afin de limiter la sensibilit au bruit.

La mise en haute impdance d'un circuit non aliment : Ceci vite de


bloquer le bus si un priphrique n'est pas aliment.

Extension 10 bits de l'adressage des circuits rpartis sur 2 octets de la


manire suivante :

Remarque :
En 1998, le mode haut dbit porte la vitesse maximum du bus I2C 3.4 Mb/s. Les
marges de bruit ont aussi t modifies pour permettre de relier des circuits faible
consommation ( alimentation 2V )

6. Les adresses rserves


Les adresses 0000 0xxx ne sont pas utilises pour l'adressage de composants. Elles ont t
rservs par Philips pour effectuer certaines fonctions spciales.

6.1. Adresses d'appel gnral


Adresse : 0000 0000 .
Aprs l'mission d'un appel gnral, les circuits ayant la capacit de traiter ce genre d'appel
mettent un acquittement.
Le deuxime octet permet de dfinir le contenu de l'appel :

0000 0110 : RESET. Remet tout les registres de circuits connects dans leur
tat initial ( Mise sous tension ). Les circuits qui le permettent rechargent leur
adresse d'esclave.

0000 0010 : Les circuits qui le permettent rechargent leur adresse d'esclave.

0000 0100 : Les circuits dfinissant leur adresse de faon matriel rinitialisent
leur adresse d'esclave.

0000 0000 : Interdit

xxxx xxx1 : Cette commande joue le rle d'interruption. xxxx xxx peut tre
l'adresse du circuit qui a gnr l'interruption.

6.2. Octet de START


Adresse : 0000 0001 .
Cet octet est utilis pour synchroniser les priphriques lents avec les priphriques rapides.

6.3. Dbut d'adresse CBUS


Adresse : 0000 001x .
L'mission de cet octet permet de rendre sourd tout les circuits I2C prsents sur le bus. A
partir de ce moment, on peut transmettre ce que l'on dsire sur le bus, en utilisant par exemple
un autre protocole. Le bus repasse en mode normal lors de la rception d'une condition d'arrt.

6.4. Autres
Adresses : 0000 0110 0000 1111 .
Ces octets ne sont pas dfinit et sont ignor par les circuits I2C. Il peuvent tre utilis pour
dbugger un rseau multimaster.

7. Esemple :

program Eeprom_Test;
var EE_adr, EE_data, k : byte;
jj : word;
begin
I2C_Init(100000); // Initialize full master mode
TRISD := 0;
// PORTD is output
PORTD := $FF;
// Initialize PORTD
I2C_Start;
// Issue I2C start signal
I2C_Wr($A2);
// Send byte via I2C(command to 24cO2)
EE_adr := 2;
I2C_Wr(EE_adr);
// Send byte(address for EEPROM)
EE_data := $AA;
I2C_Wr(EE_data); // Send data(data that will be written)
I2C_Stop;
// Issue I2C stop signal
for jj := 0 to 65500 do nop; // Pause while EEPROM writes data
I2C_Start;
// Issue I2C start signal
I2C_Wr($A2);
// Send byte via I2C
EE_adr := 2;
I2C_Wr(EE_adr);
// Send byte(address for EEPROM)
I2C_Repeated_Start; // Issue I2C signal repeated start
I2C_Wr($A3);
// Send byte (request data from EEPROM)
k := I2C_Rd(1);
// Read the data
I2C_Stop;
// Issue I2C stop signal
PORTD := k;
// Show data on PORTD

while true do nop; // Endless loop


end.

Вам также может понравиться