首页 > 解决方案 > 无法使用 I2C 和 Arduino 写入 M24256 EEPROM

问题描述

我很确定这是我犯的一个小错误,但我无法弄清楚。我正在尝试通过 I2C 协议将M24256 EEPROM与 Arduino Mega2560 一起使用。数据表指出地址是 1010(E2)(E1)(E0)(R/W)。我没有连接所有 E 引脚,这意味着它应该是 A0 用于写入和 A1 用于读取。我将 /WC 引脚接地,因此它没有写保护。我用 I2C 扫描仪草图检查了设备,由于某种原因,它被视为 0x50。奇怪的是,我可以使用任何地址读取它(我尝试了 0x50、0xA1 和一些随机地址),但我无法写入它——每次我得到默认的 0xFF 作为回读时。

我试过的代码:

#define memoryRead 0xA0
#define memoryWrite 0xA1
byte in=0x00;

#include <Wire.h>

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Serial.println("writing");
  for(int i=0;i<100;i++){
    Wire.beginTransmission(memoryWrite);
    Wire.write(byte(i >> 8));  // first the MSB (8-bits)
    Wire.write(byte(i)); 
    Wire.write(byte(i));
    Wire.endTransmission();
  }
  Serial.println("reading");

  Wire.beginTransmission(memoryWrite); //this should be resetting the pointer //to 0 if I got it well from the datasheet
  Wire.write(0x00);
  Wire.write(0x00);
  Wire.beginTransmission(memoryRead);
  for(int i=0;i<100;i++){
    in=Wire.read();
    Serial.println(in,HEX);

  }
  Wire.endTransmission();
  Serial.println("done");
}

void loop() {
}

我究竟做错了什么?我仔细检查了接线和写保护,所以它必须是代码。

提前致谢。

标签: carduinoi2ceeprom

解决方案


我在这里看到几个问题:

  1. 我没有连接所有 E 引脚

    如数据表第 8 页所述,“这些输入必须连接到 V CC或 V SS ”。不建议让它们漂浮。

  2. ArduinoWire使用 7 位 I 2 C 地址。如果所有 E 引脚都接地,则在此上下文中用于此部分的正确地址将是0x501010000二进制)。您不需要使用单独的地址进行读写 - 最后一位由库推断。

  3. 正如用户 3629249(多么好的名字!)所指出的,~WC 引脚必须拉低才能允许写入。


推荐阅读