Академический Документы
Профессиональный Документы
Культура Документы
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 :
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.
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.
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.
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.
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.
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.
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 :
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 :
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.
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 )
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.
xxxx xxx1 : Cette commande joue le rle d'interruption. xxxx xxx peut tre
l'adresse du circuit qui a gnr l'interruption.
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