Principe du I2C Page 7-1
Principe du I2C
Claude Barbaud 10 janvier 2011
Principe du I2C:
Le I2C (Inter Integrated Circuit) est un bus série synchrone multi-maître. Il permet de
communiquer sur 3 fils[une horloge (SCL), une ligne de données (SDA) et un commun]
avec un certain nombre de périphériques.
Hardware:
Essentiellement, toutes les sorties sont à collecteur ouvert ou à drain ouvert, et la
logique est positive.
Il est nécessaire de placer des résistances de rappel(pull-up) pour définir le niveau
haut.
Le nombre de composants qu'il est possible de relier est limité par la charge
capacitive des lignes SDA et SCL : 400 pF . Un composant a une charge entre 10
et 20 pF.
Les données sont transmises en série à 100Kbits/s en mode standard et jusqu'à
400Kbits/s en mode rapide.
Principe du I2C Page 7-2
Protocole logiciel
C'est un bus multi-maître: plusieurs processeurs peuvent le contrôler.
Avec le compilateur CCS
On doit placer la directive #use au début du fichier
#use i2c(master, SDA = PIN_C4, SCL = PIN_C3)
Au repos
Les lignes SDA et SCL sont au niveau haut (1 logique).
Condition de départ
Un processeur signale son intention de parler par la condition START:
Il place SDA = 0 pendant que SCL est au repos (=1)
Le bus est alors occupé: les autres ne peuvent plus parler.
Avec le PIC: i2c_start();
Condition d'arrêt
Le processeur arrête de parler en replaçant la ligne SDA à 1 pendant que SCL est
au repos ( = 1)
Le bus est alors libre: les autres peuvent parler
Avec le PIC: i2c_stop();
En activité
Les changements sur SDA ont lieu pendant que SCL = 0.
Principe du I2C Page 7-3
Format des transferts
Les données sont transférées en bytes:
1. On envoie d'abord l'adresse du périphérique. Cette adresse est sur 7 bits
[A6..A0]
le 8ème bit est le R/W: 0 = Write, 1 = Read.
Avec le PIC: i2c_write(adresse);
Des parties d'adresse sont déterminées d'avance pour un type de périphérique.
Les autres parties sont déterminées par matériel(état de broches)
http://electro8051.free.fr/I2C/le_bus_I2C.pdf voir page 9
2. Si écriture: envoi de l'adresse interne si besoin, puis de la donnée
Par exemple(mémoire):
i2c_write(adresse externe, r/w = 0);
i2c_write(adresse interne partie haute);
i2c_write(adresse interne partie basse);
i2c_write(donnée);
3. Si lecture: on doit écrire l'adresse, en mode write (adresse externe + adresse
interne) puis envoyer une commande de lecture et enfin lire la donnée.
Par exemple(mémoire)
i2c_start();
i2c_write(adresse externe r/w = 0);
i2c_write(adresse interne partie haute);
i2c_write(adresse interne partie basse);
i2c_start();
i2c_write(adresse externe r/w = 1);
donnée = i2c_read(0); // 0 = pas d'acknowledge
i2c_stop();
Principe du I2C Page 7-4
Acquittement (= acknowledge)
Le récepteur de la donnée doit fournir un acquittement sur la broche SDA
Cet acquittement complète la transmission. Il autorise l'émetteur à envoyer la
donnée suivante.
si l'esclave est le récepteur, l'acquittement est généré quand il est prêt à
recevoir une nouvelle donnée.
si le maître est le récepteur, il a le choix de donner un acquittement pour
demander une nouvelle donnée [i2c_read();] ou de ne pas donner
d'acquittement [i2c_read(0);], pour dire à l'esclave de se taire. L'esclave ne dit
plus rien, et le maître reprend le contrôle du bus, par [i2c_stop(); ]. Cette
possibilité est utile dans le cas de lecture d'une mémoire par blocs, ou
d'interruption générée sur le processeur maître.
Interfaces possibles sur I2C
De nombreuses interfaces existent sur le protocole I2C.
Par exemple:
Port parallèle 8 bits bidirectionnels
Mémoires
Potentiomètre numérique
Capteurs
RTCC(Real Time Clock/Counter)
Convertisseurs A/N et N/A
Circuits Audio ( Egaliseur, Contrôle de volume, ... )
Drivers ( LED , LCD , ...) Exemple: 4 digit LED driver SAA1064
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !