微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于AT24CXX器件地址的问题,帮忙指点下

关于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 ?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top