vendredi 11 avril 2014

Bus I2C








I-        Bus I2C


1.    Introduction :

Le bus I2C (IIC : Inter-IC-Communication) permet la connexion des circuits intégrés qui se trouvent à une distance maximale de 1m. Les caractéristiques électriques et le protocole de communication ont été  développés au début des années 1980, par Philips, le but étant de minimiser les liaisons entre les circuits intégrés numériques de ses produits (Téléviseurs, éléments Hi Fi, magnétoscopes, ...). Le bus I2C  est devenu un standard industriel utilisé par de très nombreux constructeurs.

2.    CARACTERISTIQUES

Le bus I2C permet de  communiquer très divers  composants électroniques  à traves seulement trois fils : une ligne de données (SDA), une ligne d'horloge (SCL), et une ligne de référence électrique (masse). [3]

Figure 3 exemples de mise en œuvre d'un bus I2C
Il s’agit d’une  liaison série, cela signifie que la vitesse de transfert est  plus faible qu'avec une liaison parallèle. Le bus I2C permet des vitesses d’échange de données  de 100 kbits/s (mode standard) ,400 kbps (fast mode), 3,2 Mbps (high-speed mode).
Le but d’un bus I2C n’est pas de réaliser une vitesse de transmission élevée mais de permettre  de réduire la complexité des circuits imprimés à réaliser. C’est sans doute pour cela que de nombreux fabricants ont  adoptés  le système : microcontrôleurs, convertisseurs A/N et N/A, mémoires (RAM, EPROM, EEPROM, etc.), capteurs de température, circuits audio (égaliseur, contrôle de volume, etc.) … etc
Puisque le  bus I2C permet de relier de nombreux composants sur la même ligne , ce nombre est essentiellement limité par la charge capacitive des lignes SDA et SCL : 400 pF [5]

3.    Principe

Pour se connecter à un bus I2C il faut deux fils de communication et une masse. Les lignes sont SDA (Signal DAta), pour transmettre les données, SCL (Signal CLock) pour transmettre un signal d'horloge synchrone (ce signal permet de synchroniser les échanges entre le maître et l’esclave). Les tensions des niveaux logiques dépendent de la technologie des circuits en présence (CMOS, TTL). Il faut que tous les circuits connectés au bus I2C utilisent les mêmes  tensions pour définir les niveaux haut et bas. Cela implique que tous les composants connectés à un même bus soient alimentés de façon identique.
Etant donnée que les différents esclaves sont présents sur le même bus , certains vont être à l’état haut d’autres seront à l’état bas en même temps , ce qui va créer un problème . Ce ci est évité à l’aide d’un astuce technologique basique : mettre les sorties à collecteur ouvert (ou à drain ouvert pour les circuits CMOS) , ainsi le niveau sur la ligne sera une fonction « ET » de toutes les sorties connectées.

Figure 4 schéma fonctionnel bus I2C

4.    Le protocole I2C

La communication sur le bus I2C est organisée comme suit :
Ø  Le Maître envoie sur le bus l'adresse du composant (esclave) avec lequel il veut communiquer, chaque  esclave a une  adresse fixe ;
Ø  L'esclave reconnaît son adresse et répond par un signal de confirmation, ensuite le Maître continue la procédure de communication (écriture/lecture) ;
Ø  Les transactions sont confirmées par un ACK (Acknowldge).
Le déroulement d’une communication I2C :
v  Au repos : SDA et SCL à 1 ;
v  Conditions de transmissions de données :
- Départ : SDA = 0 et SCL = 1,
- Arrêt : SDA= 1 et SCL = 1 ;
v  Si  le bus est libre on prend le contrôle, le  maître  génère un signal d’horloge.







Figure 5 formes de signal transmis sur le Bus I2C
Comment transmettre un octet
v  Le maître transmet le bit de poids fort D7 sur SDA ;
v  Le maitre valide la donnée en appliquant un niveau 1 sur SCL ;
v  SCL revient  à 0, le maitre  poursuit avec D6, … jusqu’à ce que l’octet soit envoyé ;
v  Le maitre envoie le bit ACK à 1 ;

v  L’esclave doit répondre par  un 0 pour indiquer que la transmission s’est effectuée correctement. Le maître voit le 0 et peut passer à la suite.

Figure 6 Diagramme de transmission d'un octet
Transmission d’une adresse 
v  Chaque composant (esclave) doit avoir une adresse unique codée sur 7 bits ;
v  L’adresse est fournie sous la forme suivante :



Figure 7 transmission de l'adresse sur bus I2C
remarque : le bit R/W détermine si le maître veut lire ou écrire.

Ecriture d’une donnée :
Pour écrire une donnée il faut suivre cette procédure :
v  Envoi de l’adresse ;
v  Mode écriture (R/W à 0) ;
v  Envoi de la donnée.


Figure 8 : diagramme d'écriture de données

Lecture d’une donnée
Pour lire  une donnée il faut suivre cette procédure :
v  Le maître envoie l’adresse puis attend l’ACK de l’esclave ;
v  L’esclave émet les données sur SDA.
v  Le maître positionne ACK à 0 pour continuer la lecture ou à 1 pour stopper la transmission.


Figure 9 : diagramme de lecture de données