一般的i2c写操作流程是,start->从设备地址->ack->从设备偏移量->ack->数据1..n->ack->stop
如果我的写函数是
void i2c_wr_byte(uchar Schar)
{
uchar i;
for(i=0;i<8;i++)
{
IIC_SDA = (Schar & 0x80)? 1:0;
somenop;
IIC_SCL = 1;
somenop;
IIC_SCL = 0;
Schar <<= 1;
}
我能否这样进行写操作;
i2c_start();
i2c_wr(0xa0); //从设备地址
i2c_wr(0x00); //从设备偏移量
i2c_wr(0x00); //data0
i2c_wr(0x01);
....
i2c_wr(0xff); //data255
i2c_stop();
我有点搞不清如何处理ack信号,是不是可以忽略,不予考虑。因为他是接收器发送到总线的应答,无论有没有应答,我应该都可以继续一个一个字节进行写操作吧?但为什么protues仿真出来,不能写入24c00(EEPROM),但从I2C debug 工具里能读到数据,但只有第一位数据0xa0是发送正确的,其他都不一样? |