例程的程序如下
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;
}
对其中的I2caRegs.I2CSAR = 0x50;和I2caRegs.I2CDXR = RomAddress;有疑惑。手册中说数据的第一个字节从机地址,那按理该发送0x55,但是程序运行时查看寄存器发送的是RomAddress,值为0x60,感觉可能是数据在从机中的地址,如果这样I2CSAR中的0x55作用是什么?但是这样如果有多个eeprom如何区分?