Cosa significa in I2C, "NACK ricevuto"?


8

Sto leggendo su I2C. Su questo sito:

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

Dice che endTransmission()può restituire uno dei seguenti codici di stato:

  • 0: invio riuscito.
  • 1: Invia buffer troppo grande per il twi buffer. Ciò non dovrebbe accadere, poiché la lunghezza del buffer TWI impostata in twi.h è equivalente alla lunghezza del buffer di invio impostata in Wire.h.
  • 2: l'indirizzo è stato inviato e ricevuto un NACK. Questo è un problema e il master dovrebbe inviare una condizione STOP.
  • 3: i dati sono stati inviati e ricevuto un NACK. Ciò significa che lo slave non ha più da inviare. Il master può inviare una condizione di STOP o un START ripetuto. 4: si è verificato un altro errore twi (ad esempio, il master ha perso l'arbitrato del bus).

Se non collego nulla al mio Arduino (o con resistori pull-up sia su SDA / SCL), ottengo sempre lo stato 2. Ma come si può ricevere un NACK (o qualcosa) quando non c'è nulla con cui comunicare? Significa qualcos'altro?

Ecco il mio codice di esempio

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

Risposte:


9

A NACKè segnalato da uno slot di riconoscimento in cui SDArimane alto mentre i SCLcicli sono sotto il controllo del master.

Poiché high è lo stato non pilotato del bus pull-up, in assenza di una periferica all'indirizzo selezionato per riconoscere positivamente tirandolo verso il basso, NACKsi verificherà passivamente una condizione .


Potresti per favore elaborare di più? Vuoi dire che la periferica non è connessa? Che ne dici di essere riuscito a ottenere i dati per un po ', poi ha smesso di funzionare e ha continuato a restituire 0x02?
Dzung Nguyen,

3
Tutto ciò che significa che una periferica non risponde non può causare questo: nessuna periferica, tracce o fili rotti, indirizzo errato, rumore che rende l'indirizzo sbagliato, pullup deboli che distorcono i dati, pullup assurdamente forti che distorcono la segnalazione, cattiva alimentazione, software difettoso o silicio design nella periferia, anche il supporto non corrispondente di estensioni come allungamento dell'orologio.
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.