I2C Eeprom 可以有两个地址吗?

Can an I2C Eeprom have two addresses?

我拥有一个 EEPROM module with the P24C256 芯片。 (不是 AT24C256)。

扫描可用的 I2C 设备后,我收到了两个设备的响应。

Scanning...
I2C device found at address 0x50  !
I2C device found at address 0x58  !
done

我查看了数据表,但找不到任何其他信息。 我以为该设备有两个存储库,但事实并非如此。

这怎么可能?断开模块后,报无I2C设备

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

可能是EEPROM地址位的问题,如果是浮动状态,没有接好,请您检查一下这些地址位的连接情况好吗?尝试将它们连接到与您的微控制器相同的地面,但是,是的,如上所述,非常需要原理图。

是的,他们可以。

根据 i2C EEPROM 的大小和内存块的组织方式,您可以有 2 个或更多设备地址。例如,ST24/25x04 EEPROM 是 4 Kbit 电可擦除可编程存储器,组织为 2 个 256 x8 位块。这意味着 I2C 为您提供了两个设备地址(上面内存中的 0x50 和 0x51),它们将访问具有 1 个字节地址的每个块。

该行为并不暗示。数据表说地址应该只有一个(但可以选择它的三个低位)。

电路板的原理图显示拨码开关仅选择了两位(A0、A1),A2 接地。

我在代码中看到没有初始化。 TWI 总线的工作频率是多少?此外,在模块的图片中,它具有未焊接的上拉电阻的跳线,即使焊接了跳线,它也具有 10kOhm 的上拉电阻 - 这可能太高了。

可能你的问题只是因为线没有足够快地返回到高电平。

  1. 检查上拉电阻是否接合(跳线焊接在板上)
  2. 尝试在 SCL、SDA 上添加额外的上拉电阻(约 4.7k)
  3. 尝试设置较低的频率,例如Wire.setClock(50000);