5. Le port I2C
Le bus peut être mis dans différents états, appelés "conditions":
• START (S) : avant de commencer chaque communication
• ACK (A) : pour confirmer la réception d'un byte.
• NACK (N) : pour confirmer la réception d'un dernier byte
• STOP (P) : indiquer la fin d'une transmission
• RESTART (R) : remplace une séquence STOP / START lorsque deux transmissions se
suivent. Attention toutes les interfaces I2C ne supportent pas forcement la condition
RESTART
Un bus I2C transportant son propre signal d'horloge émis par le maître, les périphériques sont très
tolérants en termes de fréquence de signal. La fréquence de fonctionnement typique est de 100KHz,
mais beaucoup d'interfaces acceptent de fonctionner jusqu'à 400KHz.
Protocole I2C: écriture
La majorité des interfaces I2C fonctionnent de la même manière:
• Une communication I2C en écriture commence toujours par une condition START.
• La condition START est suivie de l'adresse, sur 7 bits, suivi d'un bit à zéro pour indiquer que
l'on souhaite effectuer une opération en écriture. En pratique cela signifie que le premier byte
de la transmission est l'adresse de l'interface multipliée par deux.
• Le deuxième byte est l'adresse du registre à écrire.
• Le troisième byte est la valeur à écrire dans le registre en question.
• La plupart des interfaces I2C incrémentent automatiquement leur pointeur de registre à
chaque écriture. Ainsi les éventuels bytes suivants seront écrits séquentiellement.
• La transmission se termine impérativement par un STOP.
L'interface de l'esclave I2C va confirmer chacun des bytes reçus à l'aide d'un ACK. Ces
confirmations sont automatiquement gérées par le Yocto-I2C qui signalera une erreur de
transmission s'il ne les reçoit pas.
Ecriture de la valeur 0x99 dans le registre 0x42 d'un périphérique dont l'adresse est 0x12.
Ecriture des valeurs 0x99, 0x88, 0x77 dans les registres 0x42 à 0x44 d'un périphérique dont l'adresse est 0x12
Protocole I2C: Lecture
Lire des données à travers une interface I2C est peu plus complexe dans la mesure où cela se
passe en deux temps: une opération en écriture pour indiquer quel registre lire, ensuite la lecture
proprement dit.
• La transmission commence par une condition START.
• Suivie de l'adresse, sur 7 bits, suivi d'un bit à zéro pour indiquer une écriture.
• Le deuxième byte est l'adresse du registre à lire.
• Une condition STOP est transmise.
22
www.yoctopuce.com