打印

F1指南者的软件模拟IIC历程疑问

[复制链接]
399|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
过期账户|  楼主 | 2020-4-24 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ZSR20181017 于 2018-12-1 19:08 编辑

下面这个读写测试历程里面,有个地方没搞明白,就是写函数EE_WriteByte(write_buf, 16, 50),写的起始地址是16,然后我读函数EE_ReadByte(read_buf, 16, 50)里面的起始地址应该也是16才对啊,可是并不是我想的那样;
经过几轮测试发现,读函数EE_ReadByte(read_buf, 0, 50)里面的起始地址改为0才能正确读出;

串口输出截图:
EEPROM软件模拟测试
写eeprom成功!
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
46 47 48 49
读eeprom成功,数据如下:
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

45 46 47 48 49
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49
eeprom读写测试成功




uint8_t ee_Test(void)
{
    uint16_t i;
    uint8_t write_buf[EEPROM_SIZE];//EEPROM_SIZE
    uint8_t read_buf[EEPROM_SIZE];
  
/*-----------------------------------------------------------------------------------*/  
  if (EE_Check_OK() == 0)
    {
        /* 没有检测到EEPROM */
        printf("没有检测到串行EEPROM!\r\n");
               
        return 0;
    }
/*------------------------------------------------------------------------------------*/  
  /* 填充测试缓冲区 */
    for (i = 0; i < 50; i++)
    {        
        write_buf = i;
    }
/*------------------------------------------------------------------------------------*/  
  if (EE_WriteByte(write_buf, 16, 50) == 0)
    {
        printf("写eeprom出错!\r\n");
        return 0;
    }
    else
    {
        printf("写eeprom成功!\r\n");
        for(i=0;i<50;i++)
        {
            printf(" %02d", write_buf);
        }
    }

  
  /*写完之后需要适当的延时再去读,不然会出错*/
  EE_Delay(0x0FFFFF);
/*-----------------------------------------------------------------------------------*/
  if (EE_ReadByte(read_buf, 0, 50) == 0)
    {
        printf("读eeprom出错!\r\n");
        return 0;
    }
    else
    {   
        
        printf("读eeprom成功,数据如下:\r\n");
        for(i=0;i<50;i++)
        {
            printf("%02d ", read_buf);
               
        }
        printf("\r\n");
        //printf(" %02X", read_buf);
    }
/*-----------------------------------------------------------------------------------*/  
  for (i = 0; i < 50; i++)
    {
        if(read_buf != write_buf)
        {
            //printf("0x%02X ", read_buf);
            printf("错误:EEPROM读出与写入的数据不一致");
            return 0;
        }
    printf(" %02d", read_buf);
        
        if ((i & 15) == 15)
        {
            printf("\r\n");   
        }        
    }
  printf("eeprom读写测试成功\r\n");
  return 1;
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝