关于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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
540429224
1楼-- · 2019-07-15 10:07
I2C的从机地址是单独发的,返回一个ACK之后才会再发写地址,时序图已经是那样表示。
yici1988
2楼-- · 2019-07-15 13:41
武力戡乱 发表于 2015-3-27 23:36

那 U5 U10的地址是一样的吧
还有U9 和U12的
武力戡乱
3楼-- · 2019-07-15 17:00
 精彩回答 2  元偷偷看……
michael1234
4楼-- · 2019-07-15 17:29
有AT24C01 verilog model ?

一周热门 更多>