EEPROM存储问题

[复制链接]
3946|37
 楼主| dupengshixu 发表于 2016-10-12 13:32 | 显示全部楼层 |阅读模式
楼主做一个电表,要存储用户用了多少度电,现在用Stc12c5a60s2芯片。
我发现一个问题,当我芯片执行EEPROM擦除命令之后,写入EEPROM命令之前掉电,数据就无**常存储。求指教啊
 楼主| dupengshixu 发表于 2016-10-12 14:51 | 显示全部楼层
是用低压检测电路吗
NE5532 发表于 2016-10-12 16:08 | 显示全部楼层
能确定擦除完成了么?
lihui567 发表于 2016-10-12 16:25 | 显示全部楼层
我最近也在用这个芯片,不明白楼主是怎么存储的最好是贴代码
 楼主| dupengshixu 发表于 2016-10-12 22:18 | 显示全部楼层
NE5532 发表于 2016-10-12 16:08
能确定擦除完成了么?

我程序是一个int型数据累加,然后不停的擦除数据再存数据。比如int从0开始,他累加到100,我掉电。会有两种可能,从100开始或者从0开始。所以我判断是我掉电时间的随意选导致我开机读取数据有两种可能。
NE5532 发表于 2016-10-13 08:53 | 显示全部楼层
从E2里读出来,然后累加,然后写回E2是么?你的描述不清楚,所以我不能确定你为什么只会看到0和100两个结果(如果是我说的那样,你可能看到任何结果)。

但是一个基本常识就是:单片机上电和掉电期间,当电源不稳定时,严禁读写E2,这个是原则。
cliffboy 发表于 2016-10-13 09:58 | 显示全部楼层
异常掉电无法排除的话就加上掉电保护电路吧
皈依 发表于 2016-10-13 10:36 | 显示全部楼层
掉电的时候做个电路,让电卸的慢一些
ningling_21 发表于 2016-10-13 12:04 | 显示全部楼层
dupengshixu 发表于 2016-10-12 22:18
我程序是一个int型数据累加,然后不停的擦除数据再存数据。比如int从0开始,他累加到100,我掉电。会有两 ...

换用铁电存储器试试,速度很快
hdwgt 发表于 2016-10-13 13:54 | 显示全部楼层
不是个伪命题吧?在写入之前掉电,当然存不进去数据了!
 楼主| 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);   //数码管显示
}
 楼主| dupengshixu 发表于 2016-10-13 16:14 | 显示全部楼层
hdwgt 发表于 2016-10-13 13:54
不是个伪命题吧?在写入之前掉电,当然存不进去数据了!

你觉得我11楼的思路可以用软件规避掉电存不进数据的功能吗。
NE5532 发表于 2016-10-13 16:33 | 显示全部楼层
dupengshixu 发表于 2016-10-13 16:14
你觉得我11楼的思路可以用软件规避掉电存不进数据的功能吗。

不能,因为你从硬件层违反了E2使用的基本要求,无论你软件怎么做,都注定会失败。
 楼主| dupengshixu 发表于 2016-10-13 16:42 | 显示全部楼层
NE5532 发表于 2016-10-13 16:33
不能,因为你从硬件层违反了E2使用的基本要求,无论你软件怎么做,都注定会失败。 ...

但是我有俩扇区,都保存同一个数据,哪怕一个出错,另一个也是正确的啊。
是不是有这么一种可能,写数据写一半的时候掉电了,只写入一部分数据,所以会出错啊?
NE5532 发表于 2016-10-13 16:49 | 显示全部楼层
E2写入伴随着擦除的过程,而且还取决于片内是否真的是E2,有的甚至是Flash,按片区操作,就更惨了。还是那句话,你违反了硬件基本要求,软件无论如何都会失败的。真想这么做,上面人家提的铁电适合你,不过价格翻倍。
 楼主| dupengshixu 发表于 2016-10-14 08:42 | 显示全部楼层
NE5532 发表于 2016-10-13 16:49
E2写入伴随着擦除的过程,而且还取决于片内是否真的是E2,有的甚至是Flash,按片区操作,就更惨了。还是那 ...

我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存
else
存。
您觉得可以吗
ningling_21 发表于 2016-10-14 10:54 | 显示全部楼层
dupengshixu 发表于 2016-10-14 08:42
我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存

这个片内的不是真的EEPROM

评分

参与人数 1威望 +1 收起 理由
dupengshixu + 1 感谢版主大人

查看全部评分

NE5532 发表于 2016-10-15 14:18 | 显示全部楼层
dupengshixu 发表于 2016-10-14 08:42
我看Stc12c5a60s2有个低压检测电路,另外我再加大7805的输出端电容(10V,2200Uf)
if(电压太低)
不存

不行,单片机的欠压检测是为了拉住程序不乱来,E2写入的时候如果这个电路动作,写入就废了。你的想方设法保证电源稳定时才操作E2
xinxi 发表于 2016-10-15 16:34 | 显示全部楼层
本帖最后由 xinxi 于 2016-10-15 16:35 编辑




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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

评分

参与人数 1威望 +1 收起 理由
dupengshixu + 1 谢谢

查看全部评分

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

本版积分规则

9

主题

73

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部