Apa artinya di I2C, "NACK diterima"?

8

Saya membaca tentang I2C. Di situs ini:

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

Dikatakan bahwa endTransmission()dapat mengembalikan salah satu kode status berikut:

  • 0: Kirim berhasil.
  • 1: Kirim buffer terlalu besar untuk buffer twi. Ini seharusnya tidak terjadi, karena panjang buffer TWI yang diatur di twi.h setara dengan panjang buffer yang diset di Wire.h.
  • 2: Alamat dikirim dan NACK diterima. Ini adalah masalah, dan master harus mengirim kondisi STOP.
  • 3: Data dikirim dan NACK diterima. Ini berarti budak tidak lagi mengirim. Master dapat mengirim kondisi STOP, atau MULAI berulang. 4: Kesalahan twi lain terjadi (misalnya, master arbitrasi bus hilang).

Jika saya tidak memasang apa pun pada Arduino saya (atau dengan resistor pull-up ke kedua SDA / SCL), saya selalu mendapatkan status 2. Tapi bagaimana NACK (atau apa pun) dapat diterima ketika tidak ada yang berkomunikasi dengan? Apakah ini berarti sesuatu yang lain?

Ini contoh kode saya

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

Jawaban:

9

A NACKditandai oleh slot pengakuan di mana SDAtetap tinggi sementara SCLsiklus di bawah kendali master.

Karena high adalah kondisi un-driven bus yang berhenti, tanpa adanya periferal di alamat yang dipilih untuk secara positif mengakuinya dengan menariknya ke bawah, suatu NACKkondisi akan terjadi secara pasif .

Chris Stratton
sumber
Bisakah Anda menjelaskan lebih lanjut? Maksudmu peripheral itu tidak terhubung? Bagaimana bisa mendapatkan data untuk sementara waktu, lalu berhenti bekerja dan tetap kembali 0x02?
Dzung Nguyen
3
Apa pun yang berarti perangkat yang gagal merespons dapat menyebabkan hal ini - tidak ada perangkat, jejak atau kabel yang salah, alamat yang salah, kebisingan yang membuat alamat terlihat salah, pullup yang lemah mendistorsi data, pullup yang sangat kuat mendistorsi pensinyalan, daya yang buruk, perangkat kereta atau silikon desain di bagian periferal, bahkan tidak cocok dengan dukungan ekstensi seperti peregangan jam.
Chris Stratton