at24c1024 地址超出65536怎么写

2019-09-03 13:50发布

现在小弟的用的[size=17.1429px] [size=17.1429px]DataAdd 65535以内的数据都正常,,,[size=17.1429px] [size=17.1429px]DataAdd超出65535,,想用17位的存储,这边出错,,,有没有大神搞过




static uint8_t I2C_Wite_Byte(uint8_t cmd,uint32_t DataAdd,uint8_t Data)   //17
{
        I2C_Start();
        I2C_Write((cmd & 0xfe)|0x02); //02 17位
       
        DataAdd=DataAdd & 0x0001FFFF; //17位的地址
       
        if(!I2C_Check_Ack())
        {
                return 0;
        }
        I2C_Write((uint8_t)(DataAdd >>8));
        if(!I2C_Check_Ack())
        {
                return 0;
        }
        I2C_Write((uint8_t)(DataAdd % 256));
        if(!I2C_Check_Ack())
        {
                return 0;
        }
        I2C_Write(Data);
        if(!I2C_Check_Ack())
        {
                return 0;
        }
        I2C_Stop();
        IIC_Delay(10 * DELAY_TIME );
        return 1;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
xkwy
2019-09-03 14:52
只需把I2C通信的第一个字节的bit-1(即P0)改为1,你就打开了一片新天地,可以访问另外的65536字节啦

2.png

参考建议如下:

[mw_shl_code=c,true]static uint8_t I2C_Wite_Byte(uint8_t cmd,uint32_t DataAdd,uint8_t Data)   //17
{
        I2C_Start();
        I2C_Write((cmd&0xfe) | (DataAdd&0x10000?0x2:0x0)); //bit[16]
        
        DataAdd=DataAdd & 0xFFFF; //bit[15:0]
        
        if(!I2C_Check_Ack())
        {
                return 0;
        }
        
        ......
        [/mw_shl_code]

一周热门 更多>