我拥有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
}
答案 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的上拉电阻器-可能太高了。
可能是因为导线没有足够快地返回到高电平而出现问题。
Wire.setClock(50000);