野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10383|回复: 3

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

[复制链接]
发表于 2018-12-1 19:03:19 | 显示全部楼层 |阅读模式
本帖最后由 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;
}


回复

使用道具 举报

 楼主| 发表于 2018-12-1 19:04:42 | 显示全部楼层
图片怎么不显示呢,什么情况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-1 19:07:32 | 显示全部楼层
望大神指点说明下,谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-4 14:19:01 | 显示全部楼层
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]= 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[i]);
        }
    }

  
  /*写完之后需要适当的延时再去读,不然会出错*/
  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[i]);
               
        }
        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[i]);
        
        if ((i & 15) == 15)
        {
            printf("\r\n");   
        }        
    }
  printf("eeprom读写测试成功\r\n");
  return 1;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-30 03:46 , Processed in 0.035946 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表