I2Cで「NACKを受け取った」とはどういう意味ですか?

私はI2Cについて読んでいます。このサイト:

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

endTransmission()は、次のステータスコードのいずれかを返すことができます:

  • 0:送信に成功しました。
  • 1:twiバッファの送信バッファが大きすぎます。 twi.hで設定されたTWIバッファ長がWire.hで設定された送信バッファ長と同等であるため、これは起こりません。
  • 2:アドレスが送信され、NACKが受信されました。これは問題であり、マスターはSTOP条件を送信する必要があります。
  • 3:データが送信され、NACKが受信されました。これは、スレーブがこれ以上送信する必要がないことを意味します。マスタは、STOP条件、または繰り返しSTARTを送信できます。 4:もう1つの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
}
4
追加された
ビュー: 2

1 答え

SCL がマスタの制御下で循環する間、 SDA が高いままである確認応答スロットによって NACK

highはプルアップされていないバスの状態なので、選択されたアドレスにペリフェラルが存在しない場合、それをプルダウンして確実に確認するために、 NACK em>結果。

4
追加された
ペリフェラルが応答しないことを意味するものは、ペリフェラル、壊れたトレースやワイヤー、アドレスの誤り、アドレスの誤った見え方、データの歪みによる弱いプルアップ、信号や歪みの悪いパワー、バグのあるソフトウェアやシリコンクロックストレッチングのような拡張機能の不一致のサポートまで、
追加された 著者 rossp,
もっと詳しく教えていただけますか?周辺機器が接続されていないことを意味しますか?どのようにしばらくの間データを取得することができましたか?そして、それは動作を停止し、戻り値0x02を維持しますか?
追加された 著者 roetnig,