这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » at24c02为什么只能写入6个字节,7与8字节写不进?

共2条 1/1 1 跳转至

at24c02为什么只能写入6个字节,7与8字节写不进?

工程师
2024-10-20 13:46:46     打赏

只能写入6个字节,7与8字节写不进
uint32_t EEPROM_PageWrite(uint8_t u8Addr, uint8_t *pu8Buf)
{
    int32_t i32Err;
    int32_t i,k;
  k=0;
    do
    {
    k++;
        i32Err = 0;
        /* Send start */
        _I2C_START(I2C0);
        _I2C_WAIT_READY(I2C0);
        /* Send control byte */
        _I2C_WRITE(I2C0, EEPROM_WRITE_ADDR);
        _I2C_WAIT_READY(I2C0);
        if(I2C0->I2CSTATUS == 0x18)
        {
            {
                /* ACK */
   
                /* Send low address */
                _I2C_WRITE(I2C0, u8Addr); //address
                _I2C_WAIT_READY(I2C0);
                if(I2C0->I2CSTATUS == 0x28)
                {
                    /* ACK */
        
                    for(i=0;i<8;i++)
                    {
                        /* Send data */
            if(I2C0->I2CSTATUS == 0x28)
            {
             _I2C_WRITE(I2C0, pu8Buf[i]); // data
             _I2C_WAIT_READY(I2C0);
             if(I2C0->I2CSTATUS == 0x30)
             {
               /* NACK */
     
               /* Send data error */
               i32Err = 3;
             }
            }
            else i32Err = 1;
                    }
          if(I2C0->I2CSTATUS == 0x28)
          {
            /* ACK */
            /* Send stop */
            _I2C_STOP(I2C0);
          }
          else
          {
           /* NACK */
           /* Send data error */
           i32Err = 4;
          }
                }
                else
                {
                    /* NACK */
               
                    /* Send low address error */
                    i32Err = 2;
                }
            }
        }
        else
        {
            /* NACK */   
        
            /* Send control error */
            i32Err = 1;
        }
        if(i32Err)
        {
            /* Send stop */
            _I2C_STOP(I2C0);
    }
        Delay(200);
    }while(i32Err  (k<4));
  return(i32Err);
}




关键词: at24c02     字节    

助工
2024-10-20 13:47:21     打赏
2楼

可以推测at24c02是一个2KB的串行EEPROM芯片,其页写入大小为8个字节。

在代码中,通过循环将输入数据写入EEPROM的一页中(每页包含8个字节)。代码中的变量k用于计数已写入的字节数,初始值为0。

根据代码逻辑,只有当已写入的字节数小于8时,才会执行写入操作。因此,只有在每页的前6个字节已写入后,才会继续写入第7和第8个字节。如果已写入的字节数达到或超过8,循环将退出,不再执行写入。

如果您想写入7或8个字节,请确保输入数据指针指向包含所需字节数的缓冲区,并在调用EEPROM_PageWrite函数之前更新u8Addr变量以指向适当的EEPROM地址。确保您的代码仍然遵循循环的逻辑,以便正确处理字节超过6的情况。 


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]