我正在阅读有关I2C的信息。在此站点上:
http://playground.arduino.cc/Main/WireLibraryDetailedReference#endTransmission
它说endTransmission()
可以返回以下状态代码之一:
- 0:发送成功。
- 1:发送缓冲区对于twi缓冲区而言太大。这不会发生,因为在twi.h中设置的TWI缓冲区长度等于在Wire.h中设置的发送缓冲区长度。
- 2:地址已发送,并且收到了NACK。这是一个问题,主机应发送一个STOP条件。
- 3:发送数据并接收到NACK。这意味着从站不再有要发送的信息。主机可以发送STOP条件,或重复启动。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
}