mountainqy 发表于 2019-6-17 00:36:29

请教:掉电检测后写入EEPROM不可靠,如何处理

本帖最后由 mountainqy 于 2019-6-17 10:23 编辑

用STC15系列,一百块芯片中总有哪么几个EEPROM不能可靠保存数据。我是在检测到掉电(低压检测电压设为4。6V)中断后,马上关中断EA,切断所有输出以省电,然后马上写入要保存的6个参数。百分之95以上均是可靠保存的,但总有那么几块板不稳定。这不稳定的,即使把存电电容加大原来的2倍3倍以上均还是不稳定。有时部分数据能保存,有时这部份数据都不能保存,估计是检测到掉电电压时写EEPROM已不可靠了。我这分析对不?EEPROM的工作电压最低是多少?资料上没有明确的说明

说明:1、这是小部份有问题(少于5%),并非大倍份。有问题的加大数倍电容也一样有问题,没问题的,不加电容也一样没问题。
         2、示波器测试,从5V跌到4V,时间大于150ms;
         3、不能在修改时保存,写EEPROM期间会影响系统正常工作。
      4、掉电检测电路及EEPROM均为单片机内部自带。原理图相当于最少单片机系统。

hidden 发表于 2019-6-17 00:53:42

为什么不在数据变化时就写入eeprom,非要等掉电再写?

aytc100 发表于 2019-6-17 01:14:17

hidden 发表于 2019-6-17 00:53
为什么不在数据变化时就写入eeprom,非要等掉电再写?

EEPROM寿命有限,数据变化比掉电要频繁很多

lingdianhao 发表于 2019-6-17 04:39:43

用铁电,一直写。

mtswz.213 发表于 2019-6-17 06:10:20

能否示波器挂出掉电波形,是不是在写的时候电压掉的太多

ddz123abcdef 发表于 2019-6-17 06:55:55

下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧

ddz123abcdef 发表于 2019-6-17 07:53:32

cpu都掉电了,电容才加几倍,还得给板用。怎么也得加个几百倍才能看出效果吧

lb0857 发表于 2019-6-17 08:01:01

1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下

leiyitan 发表于 2019-6-17 08:34:30

不行就来个法拉电容吧,小容量的也不贵啊

yangbo18416 发表于 2019-6-17 08:41:32

看一下掉电检测后,电压下降的情况吧!

kebaojun305 发表于 2019-6-17 08:54:08

楼主都不会 检测下 你检测到掉电 到你写完成电压下降了多少!

hzpyl 发表于 2019-6-17 08:56:18

用示波器看看,写EEPROM时,电压的情况。

HalenYU 发表于 2019-6-17 09:06:53

1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太快,防电源供电不稳
2,有可能电路尽量早的预判掉电,然后利用电源掉下至无法供电的一段时间写EEPROM

YS126 发表于 2019-6-17 09:07:29

很大概率是你保存数据时,电压已经不正常。

大傻师 发表于 2019-6-17 09:07:56

怀疑是掉电检测的问题

modbus 发表于 2019-6-17 09:18:28

要提供原理图才好分析,否则只能靠猜了

z123 发表于 2019-6-17 09:38:29

法拉电容解决你问题。。。。

yunqing_abc 发表于 2019-6-17 09:39:16

直接换铁电,贵不几个钱,但能保证数据的可靠

PPS 发表于 2019-6-17 09:44:51

EEPROM和FLASH速度慢,成本允许的话,还是FRAM可靠

LM1876 发表于 2019-6-17 09:58:53

在CPU电源和系统电源间串一个二极管,这样后面系统电源掉电也不会拉低CPU电源,CPU供电用1000uF可以保证完成存储器的写完

mountainqy 发表于 2019-6-17 09:59:31

ddz123abcdef 发表于 2019-6-17 06:55
下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧

掉电检测电路用单片机自身带的低压检测4。64V。没有外接掉电检测电路。

mountainqy 发表于 2019-6-17 10:02:22

lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下 ...

你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大部份95%以上是可以保存的。有问题的部份即使加大,也一样保存不了。

wye11083 发表于 2019-6-17 10:20:57

mountainqy 发表于 2019-6-17 10:02
你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大 ...

我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。

mountainqy 发表于 2019-6-17 10:21:21

modbus 发表于 2019-6-17 09:18
要提供原理图才好分析,否则只能靠猜了

不必要原理图,原理图也只是与掉电检测无关的外接电路。掉电检测电路和EEPROM均为是单片机内部自带的。相当于最小单片机系统

mountainqy 发表于 2019-6-17 10:28:12

wye11083 发表于 2019-6-17 10:20
我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。 ...

我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。

weavr 发表于 2019-6-17 10:28:43

每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。

wye11083 发表于 2019-6-17 10:41:54

mountainqy 发表于 2019-6-17 10:28
我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大 ...

对,就是这5%是代码不够严谨造成的。你不测怎么会知道有没有bug。这类隐藏的问题调试都很难复现。

mountainqy 发表于 2019-6-17 11:00:51

weavr 发表于 2019-6-17 10:28
每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。 ...

哈哈,我正是这么做的,上电时擦除清空,掉电时直接入。

leicai05 发表于 2019-6-17 11:04:09

兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂用比较多的时间;所以写就不够时间了,所有需要在程序中加个判断是否需要修改数据,如果需要
就要提前擦除。掉电的时候就直接写eeprom就没问题了;

你看看stc15是不是保存之前也需要擦除??

或者你测试一下,值保存一个数据,是不是100%;看看问题出在哪里才好解决问题。

mountainqy 发表于 2019-6-17 11:15:41

leicai05 发表于 2019-6-17 11:04
兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂 ...

是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的芯片,一点问题都没有,但最近几批次就有这问题。我现在怀疑:这部份有问题的芯片,在掉电检测发生中断时,在此电压下写入EEPROM已不稳定了。

rf_smart 发表于 2019-6-17 11:22:02

我觉得问题在于掉电检测跟系统电源没有用二极管隔离,前面电压接个小电容,经过二极管后接个大电容再给系统供电,大电容保证足够的写入时间,

modbus 发表于 2019-6-17 11:58:01

好像必须把禁止低压写eeprom选上eeprom才可靠

sunnyplus 发表于 2019-6-17 12:22:35

感觉掉电保存怎么搞都不靠谱,除非MCU和存储器部分有独立后备电源,这样就能放放心心的搞了。

liquan1010 发表于 2019-6-17 12:27:37

fram 或 mram

weavr 发表于 2019-6-17 12:50:39

mountainqy 发表于 2019-6-17 11:15
是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的 ...

基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定的。楼主可以写个测试程序验证一下,在掉电里写个计数,看看是不是只写了一次,只有写一次才是稳定的。

yy625 发表于 2019-6-17 12:54:53

以空间换寿命!每次数据改变时数据写在向上增长的地址空间,写满再擦除。

mountainqy 发表于 2019-6-17 17:29:44

weavr 发表于 2019-6-17 12:50
基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定 ...

你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。

skype 发表于 2019-6-17 18:04:22

和36L一样的方法,再加个备份区。flash写满备份再擦除,就算在擦除过程中断电或复位数据也不会丢。

Jach 发表于 2019-6-17 18:22:29

mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...

樓主可以考慮在寫入前後輸出一個I/O信號, 用來觸發示波器觀看這期間的電壓狀況, 幫助分析問題.

另一個可能是電壓檢測的部分出問題, 而不是在EEPROM. 用這個方法也可以看出來.

小李非刀 发表于 2019-6-17 18:42:54

楼主用可调电源,慢慢调低到检测到低压中断吸入EEPROM,然后又调回正常值,这样看你是否能保存?
凡是掉电检测保存不了EEPROM的,基本都是下面3个问题之一:
1、检测到低压至保存完成,电压降落太多,导致擦除写入EEPROM失败。
2、未去掉“低压时禁止EEPROM操作”选项(使用内部低压检测时)。
3、未去掉“允许低压复位(禁止低压中断)”选项(使用内部低压检测时)。

其实掉电检测最可靠的是检测220V的50HZ,能在几ms时间就能检测到断电,其次是用比较器检测稳压前的电压(比如输入12V、24V)。

weavr 发表于 2019-6-17 18:43:01

mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...

写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能),我认为应该是这个逻辑。

hefq 发表于 2019-6-17 18:51:30

HalenYU 发表于 2019-6-17 09:06
1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太 ...

加个上电计时,到时间才可以写EEPROM

su33691 发表于 2019-6-17 20:21:54

新出的STC8把这个功能给阉割了,低压检测电压才设为3V。
只能用比较器检测稳压前的电压了。{:huffy:}

moon2jin 发表于 2019-6-17 22:20:02

这个需要一个几秒的,简单的ups电路的。想那么多办法,跑偏了意义不大的。

mountainqy 发表于 2019-6-21 22:52:48

weavr 发表于 2019-6-17 18:43
写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能), ...

谢谢,按你的思路修改程序后,问题解决。原来有问题的板现在可以正常存取数据。经核对芯片手册,掉电后硬件不断置位LVDF,也就是重复进入掉电中断。

sdlibin007 发表于 2019-6-21 23:07:10

楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估计也很小呀

mountainqy 发表于 2019-6-21 23:28:05

sdlibin007 发表于 2019-6-21 23:07
楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估 ...

谢谢,这说明与电容大小无关了。谢谢,楼上各位的关注: 在网友weavr的提示下,问题已解决。具体解决方法请参看楼上贴子。 结贴

armku 发表于 2019-6-21 23:43:08

一个2200uf的大电容供电,即使掉电后也有足够的时间保存数据

zf12862177 发表于 2019-6-22 00:22:23

果然是5%的程序bug

ayumi8 发表于 2019-6-22 08:16:09

精彩   哈哈哈   果然是程序问题学习了   

jjl3 发表于 2019-6-22 11:04:31

本帖最后由 jjl3 于 2019-6-22 11:12 编辑

都知道要做一个好的系统,电源一定要稳定,但实际做时都忘记了这句话。掉电写入eeprom,应该检测的是上级电压!例如,MCU和eeprom都是5V时,应该检测产生5V的电压掉电,在写入eeprom时要保证5V电压稳定!

yoursnemo 发表于 2019-6-22 14:35:08

"我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。"

>>> 千万不要有这种想法,不然以后出现较棘手bug,自己是永远找不出来的。

web110 发表于 2019-6-22 15:27:08

lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下 ...

{:victory:}加二极管 电容

kinsno 发表于 2019-6-22 21:57:52

mountainqy 发表于 2019-6-21 22:52
谢谢,按你的思路修改程序后,问题解决。原来有问题的板现在可以正常存取数据。经核对芯片手册,掉电后硬 ...

你的这个问题出乎我的意料之外,我们做掉电检测,一般不是直接用个外部中断就搞定了吗,估计你用的不是这个方案,你是用系统自带的吧。。

老徐 发表于 2019-6-23 01:01:26

LM1876 发表于 2019-6-17 09:58
在CPU电源和系统电源间串一个二极管,这样后面系统电源掉电也不会拉低CPU电源,CPU供电用1000uF可以保证完 ...

哈哈,你基本提醒的,有可能就是楼主没考虑到的

hanbing333444 发表于 2019-6-24 19:13:14

供电串个二极管,检测二极管前面的电压作为掉电检测,应该更靠谱一些,只检测电容的话检测到掉电了估计电都快放没了。

changshs 发表于 2019-6-26 14:21:20

使用内部FLASH 做EEPROM的单片机,在电池供电的场合试用时,一定要注意将LVD电压设置高点。或者设置非EEPROM的flash区,禁止IAP擦写。否则就容易出现,修改保存时,导致MCU的code区被修改。。从而造成死机。。。

changshs 发表于 2019-6-26 14:22:11

最好的办法,就是外挂一个xx24C0x .

向北 发表于 2019-6-26 14:22:14

我去 我之前也是遇到这个问题 今天看了恍然大悟,感谢坛和各位大佬带给我的知识,我就是做个计时器,用来记录总共使用了多长时间 之前一直不行,听君一席话 ,胜读万卷书 哈哈哈哈哈谢谢 谢谢

changshs 发表于 2019-7-21 10:10:54

元件都是有误差的,一个产品,是个误差的集合体,我也搞电池一类的供电系统,也有这种问题。

xfdr 发表于 2019-7-21 15:06:58

学习了,原来是多次进入中断造成写数据不稳定

xuwuhan 发表于 2019-7-27 22:29:26

确实是个比较不容易注意到的问题,又学了一招
页: [1]
查看完整版本: 请教:掉电检测后写入EEPROM不可靠,如何处理