关于AT24CXX器件地址的问题,帮忙指点下

2019-07-14 22:47发布

本帖最后由 yici1988 于 2015-3-27 11:57 编辑

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?



QQ截图20150327114559.png
资料上说AT24C16的P0 P1 P2三位没有用作器件地址,用作data word address

,如果这3位接地,那么字地址的高三位就是固定的000?

QQ图片20150327112832.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。