请教:掉电检测后写入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均为单片机内部自带。原理图相当于最少单片机系统。 为什么不在数据变化时就写入eeprom,非要等掉电再写? hidden 发表于 2019-6-17 00:53
为什么不在数据变化时就写入eeprom,非要等掉电再写?
EEPROM寿命有限,数据变化比掉电要频繁很多 用铁电,一直写。 能否示波器挂出掉电波形,是不是在写的时候电压掉的太多 下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧 cpu都掉电了,电容才加几倍,还得给板用。怎么也得加个几百倍才能看出效果吧 1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容 保存时间计算一下 不行就来个法拉电容吧,小容量的也不贵啊 看一下掉电检测后,电压下降的情况吧! 楼主都不会 检测下 你检测到掉电 到你写完成电压下降了多少! 用示波器看看,写EEPROM时,电压的情况。 1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太快,防电源供电不稳
2,有可能电路尽量早的预判掉电,然后利用电源掉下至无法供电的一段时间写EEPROM 很大概率是你保存数据时,电压已经不正常。 怀疑是掉电检测的问题 要提供原理图才好分析,否则只能靠猜了 法拉电容解决你问题。。。。 直接换铁电,贵不几个钱,但能保证数据的可靠 EEPROM和FLASH速度慢,成本允许的话,还是FRAM可靠 在CPU电源和系统电源间串一个二极管,这样后面系统电源掉电也不会拉低CPU电源,CPU供电用1000uF可以保证完成存储器的写完 ddz123abcdef 发表于 2019-6-17 06:55
下载软件中就有一条,禁止低压写eeprom吧。换个可靠的掉电检测电路吧
掉电检测电路用单片机自身带的低压检测4。64V。没有外接掉电检测电路。 lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容 保存时间计算一下 ...
你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大部份95%以上是可以保存的。有问题的部份即使加大,也一样保存不了。 mountainqy 发表于 2019-6-17 10:02
你好,不能禁止。本身就是检测到低压才认为是掉电,才需要写EEPROM的。保存时间已足够多了。正常情况下大 ...
我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。 modbus 发表于 2019-6-17 09:18
要提供原理图才好分析,否则只能靠猜了
不必要原理图,原理图也只是与掉电检测无关的外接电路。掉电检测电路和EEPROM均为是单片机内部自带的。相当于最小单片机系统 wye11083 发表于 2019-6-17 10:20
我觉得你得查代码逻辑。也许它都没正常执行。你看看eeprom是不是上一次的内容。 ...
我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。 每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。 mountainqy 发表于 2019-6-17 10:28
我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大 ...
对,就是这5%是代码不够严谨造成的。你不测怎么会知道有没有bug。这类隐藏的问题调试都很难复现。 weavr 发表于 2019-6-17 10:28
每次掉电都要写的话,建议在上电时擦除,擦除比较耗时间,电流也大。掉电时只写不擦。 ...
哈哈,我正是这么做的,上电时擦除清空,掉电时直接入。 兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂用比较多的时间;所以写就不够时间了,所有需要在程序中加个判断是否需要修改数据,如果需要
就要提前擦除。掉电的时候就直接写eeprom就没问题了;
你看看stc15是不是保存之前也需要擦除??
或者你测试一下,值保存一个数据,是不是100%;看看问题出在哪里才好解决问题。 leicai05 发表于 2019-6-17 11:04
兄弟,提醒你一句,我用stm32的掉电保存是没有问题的,之前有个问题是写epprom之前是需要擦除的,
擦除会暂 ...
是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的芯片,一点问题都没有,但最近几批次就有这问题。我现在怀疑:这部份有问题的芯片,在掉电检测发生中断时,在此电压下写入EEPROM已不稳定了。 我觉得问题在于掉电检测跟系统电源没有用二极管隔离,前面电压接个小电容,经过二极管后接个大电容再给系统供电,大电容保证足够的写入时间, 好像必须把禁止低压写eeprom选上eeprom才可靠 感觉掉电保存怎么搞都不靠谱,除非MCU和存储器部分有独立后备电源,这样就能放放心心的搞了。 fram 或 mram mountainqy 发表于 2019-6-17 11:15
是的,我正在这么做的。在上电时就按读出数据,然后擦除扇区,掉电检测中断时,直接写入数据。以前批次的 ...
基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定的。楼主可以写个测试程序验证一下,在掉电里写个计数,看看是不是只写了一次,只有写一次才是稳定的。 以空间换寿命!每次数据改变时数据写在向上增长的地址空间,写满再擦除。 weavr 发表于 2019-6-17 12:50
基于电容加大也不行这条,考虑有可能是进入掉电后写入了多次,所以不管电容多大,最后写入的都是最不稳定 ...
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 和36L一样的方法,再加个备份区。flash写满备份再擦除,就算在擦除过程中断电或复位数据也不会丢。 mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...
樓主可以考慮在寫入前後輸出一個I/O信號, 用來觸發示波器觀看這期間的電壓狀況, 幫助分析問題.
另一個可能是電壓檢測的部分出問題, 而不是在EEPROM. 用這個方法也可以看出來.
楼主用可调电源,慢慢调低到检测到低压中断吸入EEPROM,然后又调回正常值,这样看你是否能保存?
凡是掉电检测保存不了EEPROM的,基本都是下面3个问题之一:
1、检测到低压至保存完成,电压降落太多,导致擦除写入EEPROM失败。
2、未去掉“低压时禁止EEPROM操作”选项(使用内部低压检测时)。
3、未去掉“允许低压复位(禁止低压中断)”选项(使用内部低压检测时)。
其实掉电检测最可靠的是检测220V的50HZ,能在几ms时间就能检测到断电,其次是用比较器检测稳压前的电压(比如输入12V、24V)。 mountainqy 发表于 2019-6-17 17:29
你的意思是有可能会出现多次进入掉电中断程序?这个我倒没想过,我试试在中断程序后加入陷阱看看。 ...
写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能),我认为应该是这个逻辑。 HalenYU 发表于 2019-6-17 09:06
1,加电容储能供EEPROM,但是频繁上下电也是不能保证效果的,频繁上下电电容充电不上,因此程序不要启动太 ...
加个上电计时,到时间才可以写EEPROM 新出的STC8把这个功能给阉割了,低压检测电压才设为3V。
只能用比较器检测稳压前的电压了。{:huffy:} 这个需要一个几秒的,简单的ups电路的。想那么多办法,跑偏了意义不大的。 weavr 发表于 2019-6-17 18:43
写完一次后,判断掉电标志,电压没恢复就一直等到死,电压恢复就给个重启命令(相当于原低压重启功能), ...
谢谢,按你的思路修改程序后,问题解决。原来有问题的板现在可以正常存取数据。经核对芯片手册,掉电后硬件不断置位LVDF,也就是重复进入掉电中断。 楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估计也很小呀 sdlibin007 发表于 2019-6-21 23:07
楼主说的这个加大几倍的电容,问题是你原先用的是多大的电容呀?如果原先的电容就非常小,你就是加大几倍估 ...
谢谢,这说明与电容大小无关了。谢谢,楼上各位的关注: 在网友weavr的提示下,问题已解决。具体解决方法请参看楼上贴子。 结贴 一个2200uf的大电容供电,即使掉电后也有足够的时间保存数据 果然是5%的程序bug 精彩 哈哈哈 果然是程序问题学习了 本帖最后由 jjl3 于 2019-6-22 11:12 编辑
都知道要做一个好的系统,电源一定要稳定,但实际做时都忘记了这句话。掉电写入eeprom,应该检测的是上级电压!例如,MCU和eeprom都是5V时,应该检测产生5V的电压掉电,在写入eeprom时要保证5V电压稳定! "我想不应该是软件问题。要是软件问题,那么所有的单片机都会有同样的问题。但实际上大部份能正常工作(大于95%),正常保存。这是已量产产品。但出现这5%不良的售后很头疼。"
>>> 千万不要有这种想法,不然以后出现较棘手bug,自己是永远找不出来的。 lb0857 发表于 2019-6-17 08:01
1:下载软件中禁止低压写eeprom选择.
2:mcu供电加二极管 增加电解电容 保存时间计算一下 ...
{:victory:}加二极管 电容 mountainqy 发表于 2019-6-21 22:52
谢谢,按你的思路修改程序后,问题解决。原来有问题的板现在可以正常存取数据。经核对芯片手册,掉电后硬 ...
你的这个问题出乎我的意料之外,我们做掉电检测,一般不是直接用个外部中断就搞定了吗,估计你用的不是这个方案,你是用系统自带的吧。。
LM1876 发表于 2019-6-17 09:58
在CPU电源和系统电源间串一个二极管,这样后面系统电源掉电也不会拉低CPU电源,CPU供电用1000uF可以保证完 ...
哈哈,你基本提醒的,有可能就是楼主没考虑到的 供电串个二极管,检测二极管前面的电压作为掉电检测,应该更靠谱一些,只检测电容的话检测到掉电了估计电都快放没了。 使用内部FLASH 做EEPROM的单片机,在电池供电的场合试用时,一定要注意将LVD电压设置高点。或者设置非EEPROM的flash区,禁止IAP擦写。否则就容易出现,修改保存时,导致MCU的code区被修改。。从而造成死机。。。 最好的办法,就是外挂一个xx24C0x . 我去 我之前也是遇到这个问题 今天看了恍然大悟,感谢坛和各位大佬带给我的知识,我就是做个计时器,用来记录总共使用了多长时间 之前一直不行,听君一席话 ,胜读万卷书 哈哈哈哈哈谢谢 谢谢 元件都是有误差的,一个产品,是个误差的集合体,我也搞电池一类的供电系统,也有这种问题。 学习了,原来是多次进入中断造成写数据不稳定 确实是个比较不容易注意到的问题,又学了一招
页:
[1]