I2C master & Slave

Le Maitre et l'esclave en I2c

Le pic permet de contrôler le bus I2C selon le mode Maître et le mode Esclave. Dans chaque mode, on pourra fonctionner en réception ou en transmission de données.

 


Mode Esclave

Dans ce mode, le maître envoie tout d'abord l'octet de contrôle, constitué de l'adresse de l'esclave sur b et du bit R/W sur b0. Le bit R/W vaut 0 puisque le maître envoie des données.
Le bit ACK est généré à chaque fois par l'esclave (pour l'octet de contrôle et les données). L'esclave émet un ACK (SDA=0) s'il est prêt à recevoir une donnée supplémentaire ou NOACK (SDA=1).

  1. Le maître commence par émettre la condition START.
  2. Puis, il envoie l'octet de contrôle constitué de :
    - l'adresse de l'esclave sur le bus I2C,
    - le bit R/W qui est à 0, puisque le maître va envoyer une donnée (l'esclave va effectuer une réception).
  3. A la réception de cet octet de contrôle, SSPIF passe à 1 pour indiquer que l'adresse correspond à celle contenue dans SSPADD.
    1. - Le bit DA (SSPSTAT.5) passe à 0 pour indiquer que la donnée reçue est une adresse.
    2. - Le bit RW (SSPSTAT.2) indique la valeur du bit R/W reçu.
      Note :
      - Le bit ACK est généré automatiquement par l'esclave si l'adresse a été reconnue.
      - On s'assurera que les bits BF (SSPSTAT.0) et SSPOV (SSPCON.6) sont à 0 avant la réception de l'octet. Sinon, SSPIF ne sera pas positionné.
      - On veillera à ce qu le bit CKP (SSPCON.4) soit initialement à 1 pour éviter le blocage de l'horloge du maître.
  4. SSPBUF doit être lu afin de remettre BF à 0.
  5. SSPIF doit être remis à 0 afin de permettre la détection de la réception du prochain octet.
  6. Le maître génère ensuite les impulsions sur l'horloge et envoie la donnée.
  7. Quand la donnée a été complètement reçue, les bits BF et SSPIF sont mis automatiquement à 1. Le bit ACK est généré automatiquement par l'esclave s'il n'y a pas eu de perte de données.
    - Si SSPBUF n'a pas été lu précédemment (BF est resté à 1), la nouvelle donnée reçue est perdue et le bit SSPOV passe à 1. Le bit NOACK sera alors renvoyé au maître. Celui-ci pourra alors tenter de renvoyer la donnée.
    - SSPOV doit être remis à 0 par programme. BF est remis à 0 par la lecture de SSPBUF.
    - SSPIF sera remis à 0 par programme ensuite.
  8. Le maître peut continuer à envoyer des données. On vérifiera à chaque fois la valeur du bit DA qui permet de distinguer une donnée (DA=1) d'un octet de contrôle (DA=0). Lorsqu'il s'agit d'un octet de contrôle, RW (SSPSTAT.2) contient le type de transaction à réaliser (0 : réception, 1 : transmission).
  9. Le Maître génère ensuite la condition STOP qui clôture le dialogue.


Mode Maître

    En mode maître, l'horloge est pilotée par le PIC. Les événements START, STOP et ReSTART sont générés par le maître.