Что означает в I2C «NACK получил»?

8

Я читаю о I2C. На этом сайте:

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

Это говорит о том, что endTransmission()может вернуть один из следующих кодов состояния:

  • 0: успешная отправка.
  • 1: Отправить буфер слишком велик для буфера twi. Этого не должно быть, так как длина буфера TWI, заданная в twi.h, эквивалентна длине буфера отправки, установленной в Wire.h.
  • 2: Адрес был отправлен и получен NACK. Это проблема, и мастер должен отправить условие STOP.
  • 3: данные были отправлены и получен NACK. Это означает, что рабу больше не нужно отправлять. Мастер может отправить условие STOP или повторный START. 4: произошла еще одна ошибка twi (например, арбитраж потерянной шины).

Если я ничего не присоединяю к своему Arduino (или с подтягивающими резисторами к обоим SDA / SCL), я всегда получаю статус 2. Но как можно получить NACK (или что-нибудь еще), когда не с чем общаться? Значит ли это что-то еще?

Вот мой пример кода

#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
}
Мадс Скьерн
источник

Ответы:

9

A NACKсигнализируется интервалом подтверждения, в котором SDAостается высокий уровень, пока SCLциклы находятся под контролем мастера.

Поскольку высокий уровень - это состояние неуправляемой подтянутой шины, при отсутствии периферийного устройства по выбранному адресу для положительного подтверждения, потянув его вниз, NACKусловие будет пассивным .

Крис Страттон
источник
Не могли бы вы рассказать подробнее? Вы имеете в виду, что периферийное устройство не связано? Как насчет возможности получить данные некоторое время, затем он перестал работать и продолжал возвращать 0x02?
Джунг Нгуен
3
Это может вызвать все, что означает, что периферийное устройство не реагирует - никаких периферийных устройств, обрывов или проводов, неправильного адреса, шума, из-за которого адрес выглядит неправильно, слабых подтасовок, искажающих данные, нелепо сильных подтягиваний, искажающих сигнализацию, плохого питания, неисправного программного обеспечения или кремния дизайн в периферии, даже несовпадающая поддержка расширений, таких как растяжение часов.
Крис Страттон