Qu'est-ce que cela signifie dans I2C, "NACK reçu"?

8

Je lis sur I2C. Sur ce site:

http://playground.arduino.cc/Main/WireLibraryDetailedReference#endTransmission

Il indique que endTransmission()peut renvoyer l'un des codes d'état suivants:

  • 0: envoi réussi.
  • 1: envoyer un tampon trop volumineux pour le tampon twi. Cela ne devrait pas se produire, car la longueur du tampon TWI définie dans twi.h est équivalente à la longueur du tampon d'envoi définie dans Wire.h.
  • 2: L'adresse a été envoyée et un NACK a été reçu. C'est un problème et le maître doit envoyer une condition STOP.
  • 3: Des données ont été envoyées et un NACK a été reçu. Cela signifie que l'esclave n'a plus à envoyer. Le maître peut envoyer une condition STOP ou un START répété. 4: Une autre erreur twi s'est produite (par exemple, l'arbitrage du bus maître perdu).

Si je n'attache rien à mon Arduino (ou avec des résistances de rappel aux deux SDA / SCL), j'obtiens toujours le statut 2. Mais comment un NACK (ou quoi que ce soit) peut-il être reçu quand il n'y a rien pour communiquer avec? Cela signifie-t-il autre chose?

Voici mon exemple de code

#include "Wire.h"
void setup() {
  Serial.begin(9600);
  Wire.begin();
}
void loop()  {
  Wire.beginTransmission(42);
  Wire.write(0);
  byte status = Wire.endTransmission();
  Serial.println(status); // always prints 2
}
Mads Skjern
la source

Réponses:

9

A NACKest signalé par un créneau d'acquittement dans lequel SDAreste élevé pendant les SCLcycles sous contrôle du maître.

Etant donné que high est l'état non piloté du bus tiré vers le haut, en l'absence d'un périphérique à l'adresse sélectionnée pour accuser réception positive en le tirant vers le bas, une NACKcondition en résultera passivement .

Chris Stratton
la source
Pourriez-vous nous en dire plus? Vous voulez dire que le périphérique n'est pas connecté? Que diriez-vous d'avoir pu obtenir des données pendant un certain temps, puis il a cessé de fonctionner et de garder le retour 0x02?
Dzung Nguyen
3
Tout ce qui signifie qu'un périphérique ne répond pas peut en être la cause - pas de périphérique, de traces ou de fils cassés, d'adresse incorrecte, de bruit donnant une mauvaise adresse, de pullups faibles déformant les données, de pullups extrêmement forts déformant la signalisation, une mauvaise alimentation, un logiciel buggy ou du silicium conception dans le support périphérique, même dépareillé des extensions comme l'étirement de l'horloge.
Chris Stratton