硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4237|回复: 2
收起左侧

[有问必答] EEPROM在一个地址写完后立刻读取该地址,会出错

[复制链接]

3

主题

27

回帖

36

积分

新手上路

积分
36
发表于 2016-7-29 19:03:54 | 显示全部楼层 |阅读模式
这两天在测试EEPROM,发现了这个问题。代码如下。
  1. bool Test_ee_CheckAll(void)
  2. {
  3.         unsigned char TestBuf[32] = "";
  4.         unsigned int size = 32;
  5.         unsigned int i, j, Index, Indexy;
  6.         for (j = 0; (j + size) < EE_SIZE; j += size)
  7.         {
  8.             for (i = 0; i < size; i++)
  9.             {
  10.                 TestBuf[i] = i;
  11.    
  12.             }
  13.             if (ee_WriteBytes(TestBuf, j, size) != true)
  14.             {
  15.                 return false;
  16.             }
  17.             //delay_ms(10000);
  18.             if (ee_ReadBytes(TestBuf, j, size)!= true)
  19.             {
  20.                 return false;//!!!在这里出错。
  21.             }
  22.         for (j = 0; (j + size) < EE_SIZE; j += size)
  23.         {
  24.             for (i = 0; i < size; i++)
  25.             {
  26.                 TestBuf[i] = 0;
  27.             }
  28.             if (ee_ReadBytes(TestBuf, j, size) != true)
  29.             {
  30.                 return false;
  31.             }
  32.             for (i = 0; i < size; i++)
  33.             {
  34.                 if (TestBuf[i] != i)
  35.                 {
  36.                     return false;
  37.                 }
  38.    
  39.    
  40.             }
  41.         }
  42.     return true;
  43. }
复制代码
驱动是https://forum.anfulai.cn/forum.php?mod=viewthread&tid=15705,用自己写的测试程序,添加了19-22行以后就过不了了(不加可以过),单步了一下发现失败在第21行。在第18行增加10秒的延时都不行。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117561
QQ
发表于 2016-7-30 10:14:23 | 显示全部楼层
我们这里没问题的,是不是你的芯片型号跟我们的不一样,注意芯片型号,不同系列稍有区别。
回复

使用道具 举报

3

主题

27

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2016-8-1 10:17:15 | 显示全部楼层

回 eric2013 的帖子

eric2013:
我们这里没问题的,是不是你的芯片型号跟我们的不一样,注意芯片型号,不同系列稍有区别。
发现问题了,这样在同一个地址写完以后读取确实是没问题。在V5开发板上试了半天。

我的问题在于有个地方调用ee_ReadBytes时,传递进去的长度为0。。。。。。。如图。
QQ截图20160801101206.png

在调用第110行的ee_ReadBytes(TestBuf, j, 0)时,本函数return 1,到执行至114行的ee_WriteBytes(TestBuf, j, size)时,才会return 0。
也就是说,当读取时如果传递进去的长度是0,所产生的后果在下次操作EEPROM时才体现出来。
现在我在,ee_WriteBytes和ee_ReadBytes函数内都增加了长度判断,若长度为0,则直接return 1,不进行I2C时序的操作。目前问题解决。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 14:38 , Processed in 0.040385 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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