Introduction
Nous vous proposons une librairie de communication sur le bus I2C en mode maître (microcontrôleur gérant du bus). Cette librairie se base sur un principe de pulling, c'est à dire l'attente de la fin d'émission ou de réception, et non pas sur des interruptions.
Cette librairie contient les fonctions de base pour effectuer des accès en lecture/écriture sur le bus mais ne gère pas l'exécution d'une séquence complète, c'est à l'application de s'en occuper. Vous trouverez un exemple de projet utilisant cette librairie ici.
N'hésitez pas à nous poser des questions sur la mise en oeuvre de cette librairie sur le forum.
La librairie est compilable avec gcc (fournit avec Winavr).
Téléchargez les fichiers
Header (.h)
Source (.c)
* Clic droit -> Enregistrer la cible du lien sous
L'utilisation de la librairie est très simple, nous allons donc vous expliquer brièvement comment exécuter des cycles lecture ou écriture.
Lecture sans repeated start
Généralement, un cycle de lecture se décompose de la sorte :
- 1. Séquence start
- 2. Lecture d'un octet avec NACK Ã la fin
- 3. Séquence stop
Lorsque plusieurs octets sont récupérés, le séquencement est différent puisque l'on transmet un ACK au lieu d'un NACK entre deux octets récupérés (sauf à la fin du dernier où l'on effectue un NACK) :
- 1. Séquence start
- 2. Lecture d'un 1er octet avec ACK Ã la fin
- 3. Lecture d'un 2ème octet avec NACK à la fin
- 4. Séquence stop
Pour effectuer ces différentes étapes, il vous suffira donc de vous baser sur les fonctions suivantes de la librairie :
Ecriture sans repeated start
L'écriture est également très simple et se décompose de la sorte :
- 1. Séquence start
- 2. Ecriture d'un octet
- 3. Séquence stop
Si les données à transmettre sont sur plusieurs octets, il suffit de répéter la deuxième étape plusieurs fois avant d'effectuer la dernière.
Les fonctions à utiliser pour ces étapes sont donc :
Fonctionnalité repeated start
Une des caractéristique du bus I2C est de permettre à un maître de conserver le bus si il souhaite par exemple effectuer un accès en lecture puis un accès en écriture: c'est le repeated start. Cette fonction se traduit tout simplement par le non-envoi de la commande de stop entre les deux échanges et l'utilisation de la commande repeated start au lieu de la commande start pour tous les échanges suivants le premier.
Pour enchaîner, par exemple, l'écriture d'un octet puis la lecture d'un octet, la séquence serait alors :
- 1. Séquence start
- 2. Ecriture d'un octet
- 3. Séquence repeated start
- 4. Lecture d'un octet avec NACK Ã la fin
- 5. Séquence stop
La fonction à utiliser pour le repeated start est la suivante :