Cours 243-648 Communications Numériques Le bus I2C Claude Barbaud A-08 4 septembre 2008 1. Principe du I2C Le I2C (Inter Integrated Circuit) est un bus série synchrone multi-maître qui fonctionne sous la relation maître-esclave. Développé par Philips. Géré par l’I2C bus comitee. Maître-esclave C’est le maître qui contrôle la communication, qu’il soit l’émetteur ou le récepteur des données. L’esclave est alors soumis au maître : il reçoit ou envoie des données sur demande. La synchronisation est faite par le maître. Série synchrone Les communications sont synchronisées par une horloge (fournie par le maître). Multi-Maître Plusieurs processeurs peuvent prendre le contrôle du bus. Le protocole prévoit une procédure de prise de contrôle du bus. 3 fils une horloge (SCL), une ligne de données (SDA), un commun. Principe du I2C Page 1 2. Hardware La configuration du bus I2C est très simple : toutes les sorties sont à collecteur ouvert ou à drain ouvert, et la logique est positive. Par cette configuration, les lignes sont au niveau logique 1 au repos, sans qu’aucun circuit ne place cette ligne à 1. 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. Une impulsion d’horloge est générée à chaque fois qu’un bit est transféré. Pas de court-cicuit possible sur SDA et SCL. 3. Protocole logiciel 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 (maître) 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. Principe du I2C Page 2 Avec le PIC: i2c_start(); Condition d'arrêt Le processeur (maître) 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. Format des transferts Les données sont transférées en bytes. Le bit le plus important est envoyé en premier. 1. On envoie d'abord l'adresse du périphérique. Cette adresse est sur 7 bits [A7..A1] 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) Liste partielle de périphériques Principe du I2C Page 3 Principe du I2C Page 4 Principe du I2C Page 5 2. Si écriture: envoi de l'adresse interne si besoin, puis de 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_write(donnée); i2c_stop(); Principe du I2C Page 6 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(); 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 les cas suivants : o lecture d'une mémoire par blocs(pas d’ACK quand il n’y a plus rien à lire o interruption générée sur le processeur maître. Principe du I2C Page 7 Exemple : SAA1064 Le circuit Phillips SAA1064 est un driver de 4 x 7 segments à LED : L’adreessage comporte une partie fixe : 01110 sur les bits 7 à 3 et une partie variable, définie par la tension à la broche 1 (ADR) : VADR = VEE bit2 = 0, bit1 = 0 adresses = 0x70 (écriture) et 0x71 (lecture) VADR = 3/8 VCC bit2 = 0, bit1 = 1 adresses = 0x72 (écriture) et 0x73 VADR = 5/8 VCC bit2 = 1, bit1 = 0 adresses = 0x74 (écriture) et 0x75 VADR = VCC bit2 = 1, bit1 = 1 adresses = 0x76 (écriture) et 0x77 http://www.nxp.com/acrobat_download/datasheets/SAA1064_CNV_2.pdf Principe du I2C Page 8 4. Adressage étendu sur I2C De nombreuses applications sont développées régulièrement sur I2C. Le nombre d’adresses disponibles est limité à 27, à cause des 7 bits d’adresse. Ce qui donne 128, desquelles on retire des adresses « réservées ». Il reste 112 adresses de base. L’I2C bus comitee a utilisé des adresses réservées pour définir un adressage sur 10 bits : 1111 1xx. Ce qui fait 2 bits. On ajoute à la trame un 2ème byte d’adresse, pour 8 bits supplémentaires. (il reste des adresses réservées pour des extensions futures) 5. 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 Principe du I2C Page 9