打印

EEPROM的奇怪问题!

[复制链接]
2605|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
PICC9.80和谐版   IDE8.80    片子是1939
上电时,需要读一次EEPROM数据。读之前先判断WRERR位,若为1,则我认为上次写EEPROM有问题,则不读EEPROM了,采用默认值运行后续程序;若WRERR为0,则正常读EEPROM,然后运行后续程序。
现在的问题是,经常发现上电时WRERR为1!如果断电后马上上电(2秒内),则WRERR基本为0;但若断电后停一会再上电(几秒吧),则几乎每次都发现WRERR为1!跟断电时间竟然有关系??

另外,即使WRERR为1了,我若强行读EEPROM,发现数据也很正常,并无紊乱数据。看1939手册,WRERR是表示写EE过程被异常中断的标志位呀,既然写的时候有异常,那么再读出来也应该是很乱的数据呀。

闹了一晚上,愁啊!
沙发
Ryanhsiung| | 2012-3-2 08:21 | 只看该作者
这个位的上电状态是未知的,是1 是0很正常。 一般为0. 断电马上上电,MCU没有彻底掉电,实质寄存器很多都还没有丢掉。

222.png (14.18 KB )

222.png

使用特权

评论回复
板凳
yewuyi| | 2012-3-2 08:38 | 只看该作者
你真是个神仙,此乃绝路,回头是岸。。。。。。

你见过谁家MCU的特殊寄存器在断电后还能正常保持的吗?这是最基本的常识啊。。。

1、要想实现EEPROM的读写断电时的异常检查,一般是在EEPROM数据后面附加一个CRC16的校验,写EEPROM的时候,先写数据再写CRC16值。
2、还有一个办法就是设计一个掉电检测电路并在MCU的VCC上接一个稍微大点的电解电容,利用电容续电,当掉电后靠这个电容可以把余下的EEPROM数据写完。

使用特权

评论回复
地板
tmark| | 2012-3-2 10:59 | 只看该作者
这个数据可以

使用特权

评论回复
5
yewuyi| | 2012-3-2 11:15 | 只看该作者
979832楼的图不是1939的手册吧。我贴出1939的手册。图中的q,是说按一定条件置位。不过,POR是上电复位吗,我不确定。BOR是欠压复位,这个我知道。 3楼说特存断电后都不能保持,我有保留。 ...
电子老鹰 发表于 2012-3-2 10:25


不是不能保持,是不能确定一定会保持。

无需保留,呵呵。。。

使用特权

评论回复
6
kvdong| | 2012-3-2 11:17 | 只看该作者
POR是上电复位
你的图上不是很清楚的说明了POR和BOR时此位状态未知了吗

使用特权

评论回复
7
电子老鹰|  楼主 | 2012-3-2 11:17 | 只看该作者
我查了,POR是上电复位。所以此位上电时确实不确定,不能作为判断依据。
5楼说的是啥意思?

使用特权

评论回复
8
电子老鹰|  楼主 | 2012-3-2 11:19 | 只看该作者
啊,回复完已刷新,6、7楼都出来了。谢谢各位,结贴!

使用特权

评论回复
9
yesful| | 2012-3-2 23:35 | 只看该作者
我一般给要保存的数据分两个区,一个是数据存储区,一个是备份区,两个都加CRC16校验,当读数据存储区的数据不对时,再读备份区的数据,如果再不对,那就读默认值了~~~:lol

使用特权

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

本版积分规则

34

主题

274

帖子

3

粉丝