¿Qué significa en I2C, "NACK recibido"?


8

Estoy leyendo sobre I2C. En este sitio:

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

Dice que endTransmission()puede devolver uno de los siguientes códigos de estado:

  • 0: envío exitoso.
  • 1: Enviar búfer demasiado grande para el búfer twi. Esto no debería suceder, ya que la longitud del búfer TWI establecida en twi.h es equivalente a la longitud del búfer de envío establecida en Wire.h.
  • 2: se envió la dirección y se recibió un NACK. Este es un problema y el maestro debe enviar una condición de DETENCIÓN.
  • 3: Se enviaron datos y se recibió un NACK. Esto significa que el esclavo no tiene más que enviar. El maestro puede enviar una condición STOP o un START repetido. 4: Se produjo otro error twi (por ejemplo, el maestro perdió el arbitraje del bus).

Si no adjunto nada a mi Arduino (o con resistencias pull-up a ambos SDA / SCL), siempre obtengo el estado 2. Pero, ¿cómo puedo recibir un NACK (o algo) cuando no hay nada con lo que comunicarme? ¿Significa algo más?

Aquí está mi código de ejemplo

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

Respuestas:


9

A NACKse señala mediante una ranura de reconocimiento en la que SDApermanece alta mientras los SCLciclos están bajo el control del maestro.

Dado que alto es el estado no conducido del bus levantado, en ausencia de un periférico en la dirección seleccionada para reconocer positivamente tirando hacia abajo, NACKse producirá una condición pasiva .


¿Podría por favor elaborar más? ¿Quieres decir que el periférico no está conectado? ¿Qué tal si pude obtener datos por un tiempo, luego dejó de funcionar y mantuvo el retorno 0x02?
Dzung Nguyen

3
Cualquier cosa que signifique que un periférico no responde puede causar esto: no hay periféricos, rastros o cables rotos, dirección incorrecta, ruido que hace que la dirección se vea mal, pullups débiles que distorsionan los datos, pullups absurdamente fuertes que distorsionan la señalización, mala potencia, software defectuoso o silicio diseño en el periférico, incluso incompatibles con el soporte de extensiones como el estiramiento del reloj.
Chris Stratton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.