O que significa em I2C, "NACK recebeu"?

8

Estou lendo sobre o I2C. Nesse site:

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

Ele diz que endTransmission()pode retornar um dos seguintes códigos de status:

  • 0: envio bem-sucedido.
  • 1: Envie buffer muito grande para o buffer twi. Isso não deve acontecer, pois o comprimento do buffer TWI definido em twi.h é equivalente ao comprimento do buffer de envio definido em Wire.h.
  • 2: O endereço foi enviado e um NACK recebido. Este é um problema, e o mestre deve enviar uma condição de PARADA.
  • 3: Os dados foram enviados e um NACK recebido. Isso significa que o escravo não tem mais o que enviar. O mestre pode enviar uma condição de PARADA ou um INÍCIO repetido. 4: Ocorreu outro erro de dois (por exemplo, o mestre perdeu a arbitragem do barramento).

Se eu não anexar nada ao meu Arduino (ou com resistores pull-up ao SDA / SCL), sempre recebo o status 2. Mas como um NACK (ou qualquer outra coisa) pode ser recebido quando não há nada com o que se comunicar? Isso significa outra coisa?

Aqui está o meu código de exemplo

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

Respostas:

9

A NACKé sinalizado por um slot de reconhecimento no qual SDApermanece alto enquanto SCLcircula sob controle do mestre.

Como alto é o estado não acionado do barramento puxado, na ausência de um periférico no endereço selecionado para reconhecer positivamente puxando-o para baixo, uma NACKcondição resultará passivamente .

Chris Stratton
fonte
Poderia, por favor, elaborar mais? Você quer dizer que o periférico não está conectado? Que tal obter dados por um tempo, depois parar de funcionar e manter o retorno 0x02?
Dzung Nguyen
3
Qualquer coisa que signifique que um periférico não responda pode causar isso - nenhum periférico, traços ou fios quebrados, endereço errado, ruído fazendo o endereço parecer errado, pullups fracos distorcendo os dados, pullups absurdamente fortes distorcendo a sinalização, energia ruim, software de buggy ou silício design no suporte periférico e até incompatível de extensões como o alongamento do relógio.
21917 Chris Stratton