Có nghĩa là gì trong I2C, NACK đã nhận được?


8

Tôi đang đọc về I2C. Trên trang web này:

http://playground.arduino.cc/Main/WireL LibraryDetailedReference # endTransmission

Nó nói rằng endTransmission()có thể trả về một trong các mã trạng thái sau:

  • 0: Gửi thành công.
  • 1: Gửi bộ đệm quá lớn cho bộ đệm twi. Điều này không nên xảy ra, vì độ dài bộ đệm TWI được đặt trong twi.h tương đương với độ dài bộ đệm gửi được đặt trong Wire.h.
  • 2: Địa chỉ đã được gửi và nhận được NACK. Đây là một vấn đề và chủ nên gửi một điều kiện STOP.
  • 3: Dữ liệu đã được gửi và nhận được NACK. Điều này có nghĩa là nô lệ không còn gì để gửi. Bậc thầy có thể gửi một điều kiện DỪNG hoặc BẮT ĐẦU lặp lại. 4: Một lỗi twi khác đã xảy ra (ví dụ: chủ bị mất trọng tài xe buýt).

Nếu tôi không gắn gì với Arduino của tôi (hoặc với điện trở kéo lên cả SDA / SCL), tôi luôn nhận được trạng thái 2. Nhưng làm thế nào có thể nhận được NACK (hoặc bất cứ thứ gì) khi không có gì để giao tiếp? Nó có nghĩa gì khác không?

Đây là mã ví dụ của tôi

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

Câu trả lời:


8

A NACKđược báo hiệu bởi một khe xác nhận SDAvẫn còn cao trong khi SCLchu kỳ dưới sự kiểm soát của chủ.

Vì cao là trạng thái không được điều khiển của xe buýt kéo lên, trong trường hợp không có thiết bị ngoại vi tại địa chỉ được chọn để xác nhận tích cực bằng cách kéo nó xuống, một NACKđiều kiện sẽ dẫn đến kết quả thụ động .


Bạn có thể vui lòng giải thích thêm? Bạn có nghĩa là thiết bị ngoại vi không được kết nối? Làm thế nào về việc có thể lấy dữ liệu trong một thời gian, sau đó nó ngừng hoạt động và tiếp tục trả về 0x02?
Dzung Nguyễn

3
Bất cứ điều gì có nghĩa là thiết bị ngoại vi không phản hồi đều có thể gây ra điều này - không có thiết bị ngoại vi, dấu vết hoặc dây bị hỏng, địa chỉ sai, tiếng ồn làm cho địa chỉ bị sai, pullups yếu làm biến dạng dữ liệu, pullups mạnh vô lý làm biến dạng tín hiệu, nguồn kém, phần mềm bị lỗi hoặc silicon thiết kế ở ngoại vi, thậm chí hỗ trợ không khớp với các phần mở rộng như kéo dài đồng hồ.
Chris Stratton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.