Was bedeutet es in I2C "NACK erhalten"?


8

Ich lese über I2C. Auf dieser Seite:

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

Es heißt, dass endTransmission()einer der folgenden Statuscodes zurückgegeben werden kann:

  • 0: Erfolgreiches Senden.
  • 1: Sendepuffer zu groß für den Twi-Puffer. Dies sollte nicht passieren, da die in twi.h festgelegte TWI-Pufferlänge der in Wire.h eingestellten Sendepufferlänge entspricht.
  • 2: Adresse wurde gesendet und ein NACK empfangen. Dies ist ein Problem, und der Master sollte eine STOP-Bedingung senden.
  • 3: Daten wurden gesendet und ein NACK empfangen. Dies bedeutet, dass der Slave nicht mehr senden muss. Der Master kann eine STOP-Bedingung oder einen wiederholten START senden. 4: Ein weiterer Twi-Fehler ist aufgetreten (z. B. hat der Master die Bus-Arbitrierung verloren).

Wenn ich nichts an mein Arduino anschließe (oder Pull-up-Widerstände an beide SDA / SCL), erhalte ich immer den Status 2. Aber wie kann ein NACK (oder etwas anderes) empfangen werden, wenn nichts zu kommunizieren ist? Bedeutet es etwas anderes?

Hier ist mein Beispielcode

#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
}

Antworten:


8

A NACKwird durch einen Bestätigungsschlitz signalisiert, in dem SDAhoch bleibt, während SCLZyklen unter Kontrolle des Masters laufen.

Da der nicht angesteuerte Zustand des hochgezogenen Busses hoch ist, NACKergibt sich passiv ein Zustand , wenn an der ausgewählten Adresse kein Peripheriegerät vorhanden ist, das durch Herunterziehen positiv bestätigt werden kann .


Könnten Sie bitte näher darauf eingehen? Sie meinen, dass das Peripheriegerät nicht angeschlossen ist? Wie wäre es, wenn Sie für eine Weile Daten abrufen könnten, dann funktionierte es nicht mehr und würde 0x02 zurückgeben?
Dzung Nguyen

3
Alles, was bedeutet, dass ein Peripheriegerät nicht reagiert, kann dies verursachen - kein Peripheriegerät, unterbrochene Leiterbahnen oder Kabel, falsche Adresse, Rauschen, wodurch die Adresse falsch aussieht, schwache Klimmzüge, die die Daten verzerren, absurd starke Klimmzüge, die die Signalübertragung verzerren, schlechte Stromversorgung, fehlerhafte Software oder Silizium Design in der Peripherie, sogar nicht übereinstimmende Unterstützung von Erweiterungen wie Clock Stretching.
Chris Stratton
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.