I2C Eeprom可以有两个地址吗?

时间:2019-09-17 16:11:27

标签: arduino i2c

我拥有EEPROM module芯片的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
}

3 个答案:

答案 0 :(得分:1)

如果EEPROM地址位处于浮动状态且未正确连接,则可能是问题所在,请检查这些地址位的连接吗?尝试将它们连接到与微控制器相同的地面,但是是的,如上所述,非常需要原理图。

答案 1 :(得分:1)

是的,他们可以。

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

答案 2 :(得分:0)

该行为并非暗示。数据表中说该地址只能是一个(但可以选择三个低位)。

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

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

可能是因为导线没有足够快地返回到高电平而出现问题。

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