amoBBS ladbrokes立博论坛

 找回密码
 注册
搜索
bottom↓
查看: 1227|回复: 58
打印 上一主题 下一主题

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

  [复制链接]
跳转到指定楼层
1
发表于 2019-6-17 00:36:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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均为单片机内部自带。原理图相当于最少单片机系统。
2
发表于 2019-6-17 00:53:42 | 只看该作者
为什么不在数据变化时就写入eeprom,非要等掉电再写?
3
发表于 2019-6-17 01:14:17 | 只看该作者
hidden 发表于 2019-6-17 00:53
为什么不在数据变化时就写入eeprom,非要等掉电再写?

EEPROM寿命有限,数据变化比掉电要频繁很多
4
发表于 2019-6-17 04:39:43 来自手机 | 只看该作者
用铁电,一直写。
5
发表于 2019-6-17 06:10:20 来自手机 | 只看该作者
能否示波器挂出掉电波形,是不是在写的时候电压掉的太多
6
发表于 2019-6-17 06:55:55 来自手机 | 只看该作者
下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧
7
发表于 2019-6-17 07:53:32 来自手机 | 只看该作者
cpu都掉电了,电容才加几倍,还得给板用。怎么也得加个几百倍才能看出效果吧
8
发表于 2019-6-17 08:01:01 | 只看该作者
1:下载软件中禁止低压写eeprom  选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下
9
发表于 2019-6-17 08:34:30 | 只看该作者
不行就来个法拉电容吧,小容量的也不贵啊
10
发表于 2019-6-17 08:41:32 | 只看该作者
看一下掉电检测后,电压下降的情况吧!
11
发表于 2019-6-17 08:54:08 | 只看该作者
楼主都不会 检测下 你检测到掉电 到你写完成  电压下降了多少!
12
发表于 2019-6-17 08:56:18 | 只看该作者
用示波器看看,写EEPROM时,电压的情况。
13
发表于 2019-6-17 09:06:53 | 只看该作者
1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太快,防电源供电不稳
2,有可能电路尽量早的预判掉电,然后利用电源掉下至无法供电的一段时间写EEPROM
14
发表于 2019-6-17 09:07:29 | 只看该作者
很大概率是你保存数据时,电压已经不正常。
15
发表于 2019-6-17 09:07:56 来自手机 | 只看该作者
怀疑是掉电检测的问题
16
发表于 2019-6-17 09:18:28 | 只看该作者
要提供原理图才好分析,否则只能靠猜了
17
发表于 2019-6-17 09:38:29 | 只看该作者
法拉电容解决你问题。。。。
18
发表于 2019-6-17 09:39:16 | 只看该作者
直接换铁电,贵不几个钱,但能保证数据的可靠
19
发表于 2019-6-17 09:44:51 | 只看该作者
EEPROM和FLASH速度慢,成本允许的话,还是FRAM可靠
20
发表于 2019-6-17 09:58:53 | 只看该作者
在CPU电源和系统电源间串一个二极管,这样后面系统电源掉电也不会拉低CPU电源,CPU供电用1000uF可以保证完成存储器的写完
21
 楼主| 发表于 2019-6-17 09:59:31 | 只看该作者
ddz123abcdef 发表于 2019-6-17 06:55
下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧

掉电检测电路用单片机自身带的低压检测4。64V。没有外接掉电检测电路。
22
 楼主| 发表于 2019-6-17 10:02:22 | 只看该作者
lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom  选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下 ...

你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大部份95%以上是可以保存的。有问题的部份即使加大,也一样保存不了。
23
发表于 2019-6-17 10:20:57 来自手机 | 只看该作者
mountainqy 发表于 2019-6-17 10:02
你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大 ...

我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。
24
 楼主| 发表于 2019-6-17 10:21:21 | 只看该作者
modbus 发表于 2019-6-17 09:18
要提供原理图才好分析,否则只能靠猜了

不必要原理图,原理图也只是与掉电检测无关的外接电路。掉电检测电路和EEPROM均为是单片机内部自带的。相当于最小单片机系统
25
 楼主| 发表于 2019-6-17 10:28:12 | 只看该作者
wye11083 发表于 2019-6-17 10:20
我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。 ...

我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。
26
发表于 2019-6-17 10:28:43 | 只看该作者
每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。
27
发表于 2019-6-17 10:41:54 来自手机 | 只看该作者
mountainqy 发表于 2019-6-17 10:28
我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大 ...

对,就是这5%是代码不够严谨造成的。你不测怎么会知道有没有bug。这类隐藏的问题调试都很难复现。
28
 楼主| 发表于 2019-6-17 11:00:51 | 只看该作者
weavr 发表于 2019-6-17 10:28
每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。 ...

哈哈,我正是这么做的,上电时擦除清空,掉电时直接入。
29
发表于 2019-6-17 11:04:09 | 只看该作者
兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂用比较多的时间;所以写就不够时间了,所有需要在程序中加个判断是否需要修改数据,如果需要
就要提前擦除。掉电的时候就直接写eeprom就没问题了;

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

或者你测试一下,值保存一个数据,是不是100%;看看问题出在哪里才好解决问题。
30
 楼主| 发表于 2019-6-17 11:15:41 | 只看该作者
leicai05 发表于 2019-6-17 11:04
兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂 ...

是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的芯片,一点问题都没有,但最近几批次就有这问题。我现在怀疑:这部份有问题的芯片,在掉电检测发生中断时,在此电压下写入EEPROM已不稳定了。
31
发表于 2019-6-17 11:22:02 | 只看该作者
我觉得问题在于掉电检测跟系统电源没有用二极管隔离,前面电压接个小电容,经过二极管后接个大电容再给系统供电,大电容保证足够的写入时间,
32
发表于 2019-6-17 11:58:01 | 只看该作者
好像必须把禁止低压写eeprom选上eeprom才可靠
33
发表于 2019-6-17 12:22:35 | 只看该作者
感觉掉电保存怎么搞都不靠谱,除非MCU和存储器部分有独立后备电源,这样就能放放心心的搞了。
34
发表于 2019-6-17 12:27:37 | 只看该作者
fram 或 mram
35
发表于 2019-6-17 12:50:39 | 只看该作者
mountainqy 发表于 2019-6-17 11:15
是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的 ...

基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定的。楼主可以写个测试程序验证一下,在掉电里写个计数,看看是不是只写了一次,只有写一次才是稳定的。
36
发表于 2019-6-17 12:54:53 | 只看该作者
以空间换寿命!每次数据改变时数据写在向上增长的地址空间,写满再擦除。
37
 楼主| 发表于 2019-6-17 17:29:44 | 只看该作者
weavr 发表于 2019-6-17 12:50
基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定 ...

你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。
38
发表于 2019-6-17 18:04:22 | 只看该作者
和36L一样的方法,再加个备份区。flash写满备份再擦除,就算在擦除过程中断电或复位数据也不会丢。
39
发表于 2019-6-17 18:22:29 | 只看该作者
mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...

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

另一個可能是電壓檢測的部分出問題, 而不是在EEPROM. 用這個方法也可以看出來.
40
发表于 2019-6-17 18:42:54 | 只看该作者
楼主用可调电源,慢慢调低到检测到低压中断吸入EEPROM,然后又调回正常值,这样看你是否能保存?
凡是掉电检测保存不了EEPROM的,基本都是下面3个问题之一:
1、检测到低压至保存完成,电压降落太多,导致擦除写入EEPROM失败。
2、未去掉“低压时禁止EEPROM操作”选项(使用内部低压检测时)。
3、未去掉“允许低压复位(禁止低压中断)”选项(使用内部低压检测时)。

其实掉电检测最可靠的是检测220V的50HZ,能在几ms时间就能检测到断电,其次是用比较器检测稳压前的电压(比如输入12V、24V)。
41
发表于 2019-6-17 18:43:01 | 只看该作者
mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...

写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能),我认为应该是这个逻辑。
42
发表于 2019-6-17 18:51:30 | 只看该作者
HalenYU 发表于 2019-6-17 09:06
1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太 ...

加个上电计时,到时间才可以写EEPROM
43
发表于 2019-6-17 20:21:54 | 只看该作者
新出的STC8把这个功能给阉割了,低压检测电压才设为3V。
只能用比较器检测稳压前的电压了。
44
发表于 2019-6-17 22:20:02 | 只看该作者
这个需要一个几秒的,简单的ups电路的。想那么多办法,跑偏了意义不大的。
45
 楼主| 发表于 2019-6-21 22:52:48 | 只看该作者
weavr 发表于 2019-6-17 18:43
写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能), ...

谢谢,按你的思路修改程序后,问题解决。原来有问题的板现在可以正常存取数据。经核对芯片手册,掉电后硬件不断置位LVDF,也就是重复进入掉电中断。
46
发表于 2019-6-21 23:07:10 | 只看该作者
楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估计也很小呀
47
 楼主| 发表于 2019-6-21 23:28:05 | 只看该作者
sdlibin007 发表于 2019-6-21 23:07
楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估 ...

谢谢,这说明与电容大小无关了。谢谢,楼上各位的关注: 在网友weavr的提示下,问题已解决。具体解决方法请参看楼上贴子。 结贴
48
发表于 2019-6-21 23:43:08 | 只看该作者
一个2200uf的大电容供电,即使掉电后也有足够的时间保存数据
49
发表于 2019-6-22 00:22:23 | 只看该作者
果然是5%的程序bug
50
发表于 2019-6-22 08:16:09 来自手机 | 只看该作者
精彩   哈哈哈   果然是程序问题  学习了   
51
发表于 2019-6-22 11:04:31 来自手机 | 只看该作者
本帖最后由 jjl3 于 2019-6-22 11:12 编辑

都知道要做一个好的系统,电源一定要稳定,但实际做时都忘记了这句话。掉电写入eeprom,应该检测的是上级电压!例如,MCU和eeprom都是5V时,应该检测产生5V的电压掉电,在写入eeprom时要保证5V电压稳定!
52
发表于 2019-6-22 14:35:08 | 只看该作者
"我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。"

>>> 千万不要有这种想法,不然以后出现较棘手bug,自己是永远找不出来的。
53
发表于 2019-6-22 15:27:08 | 只看该作者
lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom  选择.
2:mcu供电加二极管 增加电解电容   保存时间计算一下 ...

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


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

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

哈哈,你基本提醒的,有可能就是楼主没考虑到的
56
发表于 2019-6-24 19:13:14 | 只看该作者
供电串个二极管,检测二极管前面的电压作为掉电检测,应该更靠谱一些,只检测电容的话检测到掉电了估计电都快放没了。
57
发表于 2019-6-26 14:21:20 | 只看该作者
使用内部FLASH 做EEPROM的单片机,在电池供电的场合试用时,一定要注意将LVD电压设置高点。或者设置非EEPROM的flash区,禁止IAP擦写。否则就容易出现,修改保存时,导致MCU的code区被修改。。从而造成死机。。。
58
发表于 2019-6-26 14:22:11 | 只看该作者
最好的办法,就是外挂一个xx24C0x .
59
发表于 2019-6-26 14:22:14 | 只看该作者
我去 我之前也是遇到这个问题 今天看了恍然大悟,感谢坛和各位大佬带给我的知识,我就是做个计时器,用来记录总共使用了多长时间 之前一直不行,听君一席话 ,胜读万卷书 哈哈哈哈哈谢谢 谢谢
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|ladbrokes立博论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-7-5 15:12

ladbrokes立博论坛, 原"中国电子开发网"

© 2004-2018 www.4op7mp.com, 原www.ourdev.cn, 原www.ouravr.com

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