通过I2C发送0x00

Sending 0x00 using I2C

本文关键字:0x00 发送 I2C 通过      更新时间:2023-10-16

我使用Wire类让两个Arduino Unos使用I2C进行通信。看起来Wire类在值为0时结束传输。因此,如果我发送字节0x01, 0x02, 0x00和0x04,主机接收到:0x01, 0x02, 0xFF, 0xFF。

为处理器通信设计的通信网络不能发送0x00,这似乎很奇怪。我所看到的所有I2C示例都只使用ASCII。限于ASCII的处理器间通信似乎没有任何意义。我错过了I2C的东西,还是这只是Arduino Wire类的实现限制?

大师
void loop() {
  Wire.requestFrom(2, 4); 
  while(Wire.available()) { 
    byte b = (byte) Wire.read(); 
    Serial.println(b); 
  }
  delay(1000);
}
奴隶

void requestEvent() {
  char bytes[4] = {0x01,0x02,0x00,0x04};
  Wire.write(bytes);
}

结果为:1 2 255 255.

当0x00是0x03时,我得到了预期的结果:1 2 3 4.

您正在将char s数组传递给Wire.write()…这使得Wire将参数视为以空结尾的字符串,因此NULL字节终止传输。如果你想发送byte,每个字节调用write()函数一次,传递byte类型。

或者,你可以调用write(const uint8_t *, size_t);版本:你传递给它一个指向字节数组的指针,但你也必须给它一个数据数组的大小。

在调用Wire.write()之前是否有Wire.begin()和Wire.beginTransmission()(具有正确的地址)?