2016-05-05 4 views
0

Mon projet récent nécessite l'utilisation de la communication i2c en utilisant un seul maître avec plusieurs esclaves. Je sais qu'avec chaque octet de données (données réelles) envoyé par le maître, l'esclave répond avec Nack \ Ack (1,0). Je suis confus que comment ce Nack et ACK sont interprétés. J'ai cherché sur le web mais je n'ai pas eu de photo claire à ce sujet. Ma compréhension est quelque chose comme ça.Réponses NACK et ACK sur le bus I2c

ACK- J'ai reçu les données avec succès. Envoyez-moi plus de données. NACK- Je n'ai pas reçu les données.Envoyer à nouveau. Est-ce quelque chose comme ça ou je me trompe. Veuillez clarifier et suggérer la bonne réponse.

Merci Amit Kumar

Répondre

0

Vous devriez vraiment lire la spécification I2C here, mais brièvement, il y a deux cas différents à prendre en compte pour ACK/NACK:

  1. Après avoir envoyé l'adresse esclave: quand le maître I2C envoie l'adresse de l'esclave à qui parler (y compris le bit de lecture/écriture), un esclave qui reconnaît son adresse envoie un accusé de réception. Cela indique au maître que l'esclave qu'il essaie d'atteindre est réellement sur le bus. Si aucun périphérique esclave ne reconnaît l'adresse, le résultat est un NACK. Dans ce cas, le maître doit annuler la demande car il n'y a personne à qui parler. Ce n'est généralement pas quelque chose qui peut être corrigé en réessayant.

  2. Dans un transfert: après la lecture d'un octet (maître sur une réception ou esclave sur un envoi), un octet doit envoyer un accusé de réception. L'exception majeure est que si le récepteur contrôle le nombre d'octets envoyés, il doit envoyer un NACK après le dernier octet à envoyer. Par exemple, sur un transfert d'esclave à maître, le maître doit envoyer un NACK juste avant d'envoyer une condition STOP pour terminer le transfert. (Ceci est requis par la spécification.)

Il se peut également que le récepteur puisse envoyer un NACK s'il y a une erreur; Je ne me souviens pas si cela est autorisé par la spécification. Mais l'essentiel est qu'un NACK indique une condition fatale qui ne peut pas être réessayée ou est simplement une indication de la fin d'un transfert.

BTW, le cas où un dispositif de réception a besoin de plus de temps pour traiter est jamais indiqué par un NACK. Au lieu de cela, un périphérique esclave effectue un "étirement d'horloge" (ou le maître retarde simplement la génération de l'horloge) ou utilise un protocole de couche supérieure pour demander une nouvelle tentative.