打印

EEPROM存储问题

[复制链接]
3047|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
dupengshixu|  楼主 | 2016-10-12 14:51 | 只看该作者
是用低压检测电路吗

使用特权

评论回复
板凳
NE5532| | 2016-10-12 16:08 | 只看该作者
能确定擦除完成了么?

使用特权

评论回复
地板
lihui567| | 2016-10-12 16:25 | 只看该作者
我最近也在用这个芯片,不明白楼主是怎么存储的最好是贴代码

使用特权

评论回复
5
dupengshixu|  楼主 | 2016-10-12 22:18 | 只看该作者
NE5532 发表于 2016-10-12 16:08
能确定擦除完成了么?

我程序是一个int型数据累加,然后不停的擦除数据再存数据。比如int从0开始,他累加到100,我掉电。会有两种可能,从100开始或者从0开始。所以我判断是我掉电时间的随意选导致我开机读取数据有两种可能。

使用特权

评论回复
6
NE5532| | 2016-10-13 08:53 | 只看该作者
从E2里读出来,然后累加,然后写回E2是么?你的描述不清楚,所以我不能确定你为什么只会看到0和100两个结果(如果是我说的那样,你可能看到任何结果)。

但是一个基本常识就是:单片机上电和掉电期间,当电源不稳定时,严禁读写E2,这个是原则。

使用特权

评论回复
7
cliffboy| | 2016-10-13 09:58 | 只看该作者
异常掉电无法排除的话就加上掉电保护电路吧

使用特权

评论回复
8
皈依| | 2016-10-13 10:36 | 只看该作者
掉电的时候做个电路,让电卸的慢一些

使用特权

评论回复
9
ningling_21| | 2016-10-13 12:04 | 只看该作者
dupengshixu 发表于 2016-10-12 22:18
我程序是一个int型数据累加,然后不停的擦除数据再存数据。比如int从0开始,他累加到100,我掉电。会有两 ...

换用铁电存储器试试,速度很快

使用特权

评论回复
10
hdwgt| | 2016-10-13 13:54 | 只看该作者
不是个伪命题吧?在写入之前掉电,当然存不进去数据了!

使用特权

评论回复
11
dupengshixu|  楼主 | 2016-10-13 16:12 | 只看该作者
NE5532 发表于 2016-10-13 08:53
从E2里读出来,然后累加,然后写回E2是么?你的描述不清楚,所以我不能确定你为什么只会看到0和100两个结果 ...

我想用软件实现,我的思路如下:
a1=扇区A
a2=扇区B
if(a1>=a2)//因为扇区被擦除后是255,所以比较小的数据是真实的
{
   a=a2;
}
else
{
   a=a1;
}
main()
{
   a++;
   扇区A擦除;
   扇区A写入;
   扇区B擦除;
   扇区B写入;
  show(a);   //数码管显示
}

使用特权

评论回复
12
dupengshixu|  楼主 | 2016-10-13 16:14 | 只看该作者
hdwgt 发表于 2016-10-13 13:54
不是个伪命题吧?在写入之前掉电,当然存不进去数据了!

你觉得我11楼的思路可以用软件规避掉电存不进数据的功能吗。

使用特权

评论回复
13
NE5532| | 2016-10-13 16:33 | 只看该作者
dupengshixu 发表于 2016-10-13 16:14
你觉得我11楼的思路可以用软件规避掉电存不进数据的功能吗。

不能,因为你从硬件层违反了E2使用的基本要求,无论你软件怎么做,都注定会失败。

使用特权

评论回复
14
dupengshixu|  楼主 | 2016-10-13 16:42 | 只看该作者
NE5532 发表于 2016-10-13 16:33
不能,因为你从硬件层违反了E2使用的基本要求,无论你软件怎么做,都注定会失败。 ...

但是我有俩扇区,都保存同一个数据,哪怕一个出错,另一个也是正确的啊。
是不是有这么一种可能,写数据写一半的时候掉电了,只写入一部分数据,所以会出错啊?

使用特权

评论回复
15
NE5532| | 2016-10-13 16:49 | 只看该作者
E2写入伴随着擦除的过程,而且还取决于片内是否真的是E2,有的甚至是Flash,按片区操作,就更惨了。还是那句话,你违反了硬件基本要求,软件无论如何都会失败的。真想这么做,上面人家提的铁电适合你,不过价格翻倍。

使用特权

评论回复
16
dupengshixu|  楼主 | 2016-10-14 08:42 | 只看该作者
NE5532 发表于 2016-10-13 16:49
E2写入伴随着擦除的过程,而且还取决于片内是否真的是E2,有的甚至是Flash,按片区操作,就更惨了。还是那 ...

我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存
else
存。
您觉得可以吗

使用特权

评论回复
17
ningling_21| | 2016-10-14 10:54 | 只看该作者
dupengshixu 发表于 2016-10-14 08:42
我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存

这个片内的不是真的EEPROM

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dupengshixu + 1 感谢版主大人
18
NE5532| | 2016-10-15 14:18 | 只看该作者
dupengshixu 发表于 2016-10-14 08:42
我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存

不行,单片机的欠压检测是为了拉住程序不乱来,E2写入的时候如果这个电路动作,写入就废了。你的想方设法保证电源稳定时才操作E2

使用特权

评论回复
19
xinxi| | 2016-10-15 16:34 | 只看该作者
本帖最后由 xinxi 于 2016-10-15 16:35 编辑




在 写入eeprom命令 之前 掉电,  你怎么搞的,  你都调电了 神仙也难写啊, 没你这样玩的啊,    你在写入命令之后  延时1秒 掉电  肯定好用了,.   都要写数据了  还掉电 , 真是的

使用特权

评论回复
20
瞎折腾| | 2016-10-15 19:31 | 只看该作者
书上是严禁掉电写的,但是你硬件上应该可以修正,比如你的稳压电路,如果你是12v输入加7805的话,你可以在7805前边加一个大一点的电容,然后检测7805前边的电压,这样就应该可以了!不知道我说的对不对,应该不影响芯片的5v或者3。3的运行,要不你可以直接弄ad检测啊!那样就肯定没有问题了啊!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
dupengshixu + 1 谢谢
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

73

帖子

2

粉丝