关于AT24CXX器件地址的问题,帮忙指点下
时间:10-02
整理:3721RD
点击:
uint8_t at24cxx_ReadOneByte(uint16_t addr)
{
uint8_t temp;
i2c_Start();
if( EE_TYPE > AT24C016 ) //双字节地址
{
i2c_SendByte(0xA0);
i2c_WaitAck();
i2c_SendByte(addr>>8); //发送数据地址高位
}
else //单字节地址
{
i2c_SendByte(0xA0+((addr/256)<<1); //器件地址+数据地址
}
i2c_WaitAck();
i2c_SendByte(addr%256); //数据地址低8位地址
i2c_WaitAck();
i2c_Start();
i2c_SendByte(0xA1); //
i2c_WaitAck();
temp = i2c_ReadByte(0);//
i2c_Stop();
return temp;
}
假设以AT24C16为例,读的流程应该是
开始
发送器件地址i2c_SendByte(0xA0+((addr/256)<<1); //器件地址+数据地址,为什么多加了一个数据地址
应该是响应完才发啊?
AT24C16的器件地址就是固定的A0 ?
AT24C08的器件地址就是固定A0 或者A8?
资料上说AT24C16的P0 P1 P2三位没有用作器件地址,用作data word address
,如果这3位接地,那么字地址的高三位就是固定的000?
04只使用A2 A1,而A0是不接的,在I2C的7bit地址中,这个A0的位置就由P0代替,这样软件可配置P0的值,来选择对应的page。
如果A0不接,那到底是0 还是1呢?
A0的位置就由P0代替,算器件地址时,这个位算0 还是算1?
谢谢
I2C的从机地址是单独发的,返回一个ACK之后才会再发写地址,时序图已经是那样表示。
那 U5 U10的地址是一样的吧
还有U9 和U12的
我去惭愧啊!一张图片您就看懂了!
有AT24C01 verilog model ?