Bus I2C

by S.B

Le bus I2C est un bus 2 fils (TWI : two wire interface)
Point de vue matériel (hardware) :

  • formé de 2 fils : SCL (serial clock) + SDA (serial data)
  • les sorties SCL et SDA sont des drains ouverts donc il faut mettre des résitances de tirage au + (PULL UP)
  • la valeur des RPU dépend de IOL mais aussi des capacités d'entrée de tous les circuits du bus
  • le nombre de composants sur le bus dépend surtout de la capacité totale d'entrée.

Point de vue logiciel :

  • les composants cablés sur le bus sont identifiés par une adresse sur 7 bits (soit 127 composants max)
  • un bit supplémentaire permet d'indiquer si on écrit (WRITE) ou lit (READ) les informations : R=1 ou W=0
  • Plusieurs vitesses d'horloge existent : 100kHz, 400kHz et 1MHz
  • Plusieurs maitres (master- des microcontroleurs) peuvent envoyer des commandes aux esclaves (slave) afin d'accéder aux informations qu'ils détiennent

L'adresse d'un composant I2C comporte souvent :

  • une partie fixée par le fabricant en interne ET une partie réglable par l'utlisateur (broches AD:adresse)

Quasiment toutes les fonctions électroniques existent au format I2C :

  • CAN, CNA, EEPROM, RTC, RAM, capteurs...

Présentation :

Remarque : La documentation technique des composants I2C fournit les informations indispensables

Comprendre les chronogrammes

  1. A partir de la doc. technique

  2. Identifier le cablage des PIN d'adresse (permet plusieurs CI identiques sur le même bus - AD0 AD1...)

  3. Trouver l'adresse I2C fixe du composant (dans le texte ou sur une figure)

  4. Trouver les commandes I2C (souvent un tableau)

  5. Etudier les chronogrammes de communication

Exemples : A vous de jouer, entraînez vous...

Exemple 1 : Trouvez l'adresse I2C (MAX517)

  1. On cherche l'adresse I2C :

  2. On trouve la partie externe de l'adresse sur le schéma :

  3. ici : AD0 = AD1 = 0

  4. On trouve la partie fixée par le fabricant sur la doc. technique :

  5. ici : 01011 + partie externe = b0101100 = $2C sur 7 bits

  6. Important : parfois on donne l'adresse sur 8 bits avec b0 =0 pour mode WRITE et b0 = 1 pour mode READ

  7. donc ici adresse pour ECRIRE(WRITE) : b0101100 0 = $58 et donc $59 pour LIRE (READ)

Exemple 2 : Décoder un chronogramme (SFR02 - télémètre U.S.)

  1. A partir du chronogramme et de la doc. technique, répondre aux questions :

  2. Quelle est la fréquence d'horloge du bus I2C ?
    La période est de 10µs donc f = 100kHz

  3. Quelle est l'adresse du composant I2C SRD02 ? (Rappel : en I2C le MSB est envoyé en premier)
    On lit sur le SDA : b1110000 = $E0 sur 8 bits ($70 sur 7 bits)

  4. Quelle opération fait on ? écriture ou lecture ?
    Sur l'octet d'adressage ( on a le bit0=0 donc WRITE = écriture)

  5. Quelle donnée est envoyée au SRF02 ?
    Sur le second octet, après l'ACK on lit b00000000= $00 puis b01010001=$51 d'après la doc. avec WRITE en $E0 dans le registre $00 $51 signifie qu'on configure la mesure en centimètre.

Exemple 3 : Décoder un chronogramme (SFR02 - mesures)

  1. A partir du chronogramme et de la doc. technique, répondre aux questions :

  2. Combien d'octet sont transmis sur le chronogramme ?
    On voit 5 x 8 cycles d'horloge donc 5 octets

  3. Décoder les deux premiers octets
    On lit sur le SDA : b11100000 = $E0 puis b00000010=$02 donc on écrit sur le registre $02 qui contient l'octet fort de la mesure

  4. Décoder les trois octets suivant
    On lit sur SDA : b11100001=$E1 soit une lecture du SRF02 puis b0000001 b01100010 (soit $01 $62)

  5. Quelle est la mesure en cm du télémètre ?
    La mesure est $0162 sur 16 bits soit 357cm


"