Nunchuck I2C

1 – Présentation du bus I²C

Le bus I2C qui signifie : Inter-Integrated Circuit, ce qui donne IIC et par contraction I2C ou I²C (prononcé ‘’I squared C’’ en anglais) est un bus série synchrone bidirectionnel half-duplex. Conçu par Philips pour les applications de domotique et d’électronique domestique, il permet de relier facilement un microprocesseur et différents circuits, notamment ceux d’une télévision moderne : récepteur de la télécommande, réglages des amplificateurs basses fréquences, tuner, horloge, gestion de la prise péritel, etc.

Comme nous allons le voir, il existe d’innombrables périphériques exploitant ce bus, il est même implémentable par logiciel dans n’importe quel microcontrôleur. Le poids de l’industrie de l’électronique grand public a permis des prix très bas grâce à ces nombreux composants.

Ce bus porte parfois le nom de TWI (Two Wire Interface) chez certains constructeurs. Le bus SMBus d’Intel est basé sur l’I²C ce qui les rend en partie compatibles.

2 – Couche physique

2.1 Topologie

Plusieurs équipements, qu’ils soient maîtres ou esclaves, peuvent être connectés au bus. Dans ce cas ils s’appellent des abonnés.

  • Un abonné qui envoie des données sur le bus est appelé émetteur tant qu’il accomplit cette fonction.
  • Un abonné qui reçoit des données sur le bus est appelé récepteur tant qu’il accomplit cette fonction.
  • Un maître est un abonné qui démarre ou initie un échange de données, génère les signaux d’horloge, et met fin à l’échange.

Les échanges ont toujours lieu entre un seul maître et un (ou tous les) esclave(s), toujours à l’initiative du maître (jamais de maître à maître ou d’esclave à esclave). Cependant, rien n’empêche un composant de passer du statut de maître à esclave et réciproquement.

N.B : Il est important de ne pas cantonner le maître au rôle d’émetteur et l’esclave au rôle de récepteur. Maître et esclave peuvent remplir les deux fonctions mais pas simultanément.

La connexion est réalisée par l’intermédiaire de deux lignes :

  • SDA (Serial Data Line) : ligne de données bidirectionnelle,
  • SCL (Serial Clock Line) : ligne d’horloge de synchronisation bidirectionnelle.

Il ne faut également pas oublier la masse qui doit être commune aux équipements.

Le nombre maximal d’équipements est limité par le nombre d’adresses disponibles, 7 bits  pour l’adresse et un bit pour définir si on écrit ou si on lit.

2.2 Codage des bits

Le niveau (« HIGH » ou « LOW ») de la ligne SDA doit être maintenu stable pendant le niveau « HIGH » sur la ligne SCL pour la lecture du bit.

2.3 Temps et vitesses

En mode Standard, la vitesse de transmission est de 100 kbit/s

3 – Couche liaison de données

3.1 Échange Maître<->Esclave

Le maître est l’émetteur, l’esclave est le récepteur :

  1. Émission d’une condition de START par le maître (« S »),
  2. Émission de l’octet d’adresse par le maître pour désigner un esclave, avec le bit R/W=0
  3. Réponse de l’esclave par un bit d’acquittement ACK (ou de non-acquittement NACK),
  4. Après chaque acquittement, l’esclave peut demander une pause (« PA »).
  5. Émission d’un octet de commande par le maître pour l’esclave,
  6. Réponse de l’esclave par un bit d’acquittement ACK (ou de non-acquittement NACK),
  7. Émission d’une condition de STOP par le maître (« P »).

3.2 Échange Esclave<->Maître

Le maître est le récepteur, l’esclave est l’émetteur :

  1. Émission d’une condition de START par le maître (« S »),
  2. Émission de l’octet d’adresse par le maître pour désigner un esclave, avec le bit R/W=1
  3. Réponse de l’esclave par un bit d’acquittement ACK (ou de non-acquittement NACK),
  4. Après chaque acquittement, l’esclave peut demander une pause (« PA »).
  5. Émission d’un octet de données par l’esclave pour le maître
  6. Réponse de l’esclave par un bit d’acquittement ACK (ou de non-acquittement NACK),
  7. Émission d’une condition de STOP par le maître (« P »).

Si le récepteur est dans l’incapacité de recevoir l’octet, il ne positionnera pas le bit d’acquittement, et celui-ci sera de facto un NACK.

4 – Mise en Œuvre d’une liaison I²C

4.1 Connecter les Abonnés

Vous allez réaliser une liaison entre un Arduino (qui sera le maître) et un Nunchuck de la console Wii de Nintendo (qui sera l’esclave).

Connectez le maître et l’esclave selon le repérage suivant.

Fil rouge : 3,3V

Fil Noir : GND

Fil Jaune : SCL

Fil Vert : SDA

4.2 Exécuter le programme

  • Récupérer le sketch Arduino et exécuter le programme

D’après la documentation du Nunchuk pages 2 et 3,             

– Valeurs min et max de l’accélération sur 3 axes à mettre en relation avec la résolution (nombre de bits)

– Valeurs min et max des joysticks sur 2 axes à mettre en relation avec la résolution.

– Que se passe-t-il lorsqu’on appuie sur les boutons C et Z ?

4.3 Scannage de la trame I2C

  • Connecter un analyseur de trame IKALOGIC de manière à observer les signaux SDA et SCL et lancer le logiciel ScanaStudio.
  • Régler le sampling rate à 10MHz
  • Appeler l’enseignant pour vérification

Ressources

Nunchuck-datasheet – FR

Nunchuck-datasheet

sketch_nov28a.ino