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;
}

现在小弟的用的[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;
}

4条回答
xkwy   
  • 98  
  • 238  实习生
    2楼-- · 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]
    查看更多
    xkwy 发表于 2016-11-28 15:50
    只需把I2C通信的第一个字节的bit-1(即P0)改为1,你就打开了一片新天地,可以访问另外的65536字节啦

    大神啊
    查看更多
    591681656@qq.co 发表于 2017-3-24 14:25
    大神啊


    那请问如果是AT24CM02(AT24C2048)呢
    查看更多

    一周热门 更多>