I2C地址设置
现在用28335与EEPROM通过I2C通信。程序在AT24C02上面测试OK,但是在AT24C256上,读写不正常。原因是24C02是8位地址访问,24C256是16为地址访问。但是现在程序怎么改,请大家给点建议。谢谢 Uint16 WriteData(Uint16 *Wdata, Uint16 RomAddress, Uint16 number){
Uint16 i;
if (I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
}
while(!I2C_xrdy());
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = number + 1;
I2caRegs.I2CDXR = RomAddress;
I2caRegs.I2CMDR.all = 0x6E20;
for (i=0; i<number; i++)
{
while(!I2C_xrdy());
I2caRegs.I2CDXR = *Wdata;
Wdata++;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
}
return I2C_SUCCESS;
}
Uint16 ReadData(Uint16*RamAddr, Uint16 RomAddress, Uint16 number)
{
Uint16i,Temp;
if (I2caRegs.I2CSTR.bit.BB == 1)
{
return I2C_BUS_BUSY_ERROR;
}
while(!I2C_xrdy());
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = 1;
I2caRegs.I2CDXR = RomAddress;
I2caRegs.I2CMDR.all = 0x6620;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
DELAY_US(50);
while(!I2C_xrdy());
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = number;
I2caRegs.I2CMDR.all = 0x6C20;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
for(i=0;i<number;i++)
{
while(!I2C_rrdy());
Temp = I2caRegs.I2CDRR;
if (I2caRegs.I2CSTR.bit.NACK == 1)
return I2C_BUS_BUSY_ERROR;
*RamAddr = Temp;
RamAddr++;
}
return I2C_SUCCESS;
}
Uint16 I2C_xrdy()
{
Uint16 t;
t = I2caRegs.I2CSTR.bit.XRDY;
return t;
}
Uint16 I2C_rrdy()
{
Uint16 t;
t = I2caRegs.I2CSTR.bit.RRDY;
return t;
} 目前调用函数为
AT24C02中
WriteData(dat,0x60,8);
DELAY_US(10000);
ReadData(dat1,0x60,8);
测试Ok
目前调用函数为
WriteData(dat,0x0060,8);
DELAY_US(10000);
ReadData(dat1,0x0060,8);
读写都是错误。
把I2caRegs.I2CCNT = 1;改为2也是错的
把 I2caRegs.I2CDXR = RomAddress; 改为高低地址,分别送也是错的 怎么没人回复啊!自己把它顶上去
页:
[1]