国学芯用 发表于 2020-6-16 15:07:51

关于掉电保存数据,分享一下

今天在QQ群里和祁绪电子(做开发板的)聊天, 提到掉电保存数据

我们一般会建议客户把每次修改的数据放在RAM,在单片机即将掉电的时间把数据统一保存到EEPROM,这样以防擦除超过10万次,增强单片机使用寿命,
同时也会改善屏闪的问题,很多涉及调光的,往EEPORM保存数据,写一次,屏闪一次 ,如果改用这个办法,就会改善很多。
但是EEPROM擦除需要时间,我们建议客户在上电的时候就先去擦,然后在掉电的时候就可以直接写了,不会来不及
这样 这个STC8G系列的IAP-TPS单独出来就方便操作了

wochai 发表于 2020-6-16 15:55:18

“我们建议客户在上电的时候就先去擦,然后在掉电的时候就可以直接写了,不会来不及”
这样有个问题,如果参数不是每次都修改,就无谓的消耗生命了。

cloudboy 发表于 2020-6-16 16:28:48

wochai 发表于 2020-6-16 15:55
“我们建议客户在上电的时候就先去擦,然后在掉电的时候就可以直接写了,不会来不及”
这样有个问题,如果 ...

而且上电的瞬间突然掉电会不会导致问题。。。。

lb0857 发表于 2020-6-16 17:12:10

N多年前被歪果仁的MCU内部的所谓eeprom坑过   目前还是心有余悸情愿外置24c一粒   不再使用内部丰富的eep资源{:lol:}   当然如有大家认可过的方法和型号愿意重新拾起信心{:loveliness:}{:titter:}

zhenglingo 发表于 2020-6-16 17:56:18

如果在检测掉电后,写入数据失败,又是个问题。。。

wye11083 发表于 2020-6-16 21:56:53

本帖最后由 wye11083 于 2020-6-16 22:03 编辑

cloudboy 发表于 2020-6-16 16:28
而且上电的瞬间突然掉电会不会导致问题。。。。

不会。再加一片809S,2.93V释放复位,用比较器做中断源,电容放大点,这样就能确保万无一失了。当然要妥善处理好中断嵌套的问题,如果是掉电中断则程序应直接挂起避免后续跑飞误操作。

理论上,STC应当单独供电,不要和系统3.3并一起,避免干扰(加一片SS24就解决了),电容按100uF计,当掉电中断触发时,立马关掉所有外设输出,电流能控制在5mA以内吧。这样的话,电压从3.2V(假设SS24掉压)掉到2.93V大约需要50ms时间,足够写flash了(时间估算按1C=1V·1A/1s?来计算,则100uF=1V·100uA/1s,0.27V==27uA,这样5mA的时间=27uA/5mA=50ms。电容量的公式记不清了,但是大体计算不会有太大偏差)。

wye11083 发表于 2020-6-16 22:04:20

zhenglingo 发表于 2020-6-16 17:56
如果在检测掉电后,写入数据失败,又是个问题。。。

flash还好了。只要保证电荷泵正常工作(输入电压足够)一般不会失败,除非是MLC或TLC单元,时间不够会造成关联单元失效。

bccuje_love 发表于 2020-6-16 22:14:55

想得太简单了,汽车电子试一试

国学芯用 发表于 2020-6-17 09:12:02

zhenglingo 发表于 2020-6-17 14:07:14

wye11083 发表于 2020-6-16 22:04
flash还好了。只要保证电荷泵正常工作(输入电压足够)一般不会失败,除非是MLC或TLC单元,时间不够会造 ...

这个问题,之前有个项目用过备份两套参数放在不同的扇区解决突然掉电问题,如果参数比较多不敢用掉电检测啊

john78 发表于 2020-6-17 19:03:17

91L的方法,用AvR的年代,论坛讨论过。现在不能搜索了

mengtiantang 发表于 2020-6-17 23:29:37

参数变化时擦除,掉电时写入,有擦除才写入

qjp1988113 发表于 2020-6-19 12:08:15

wye11083 发表于 2020-6-16 22:04
flash还好了。只要保证电荷泵正常工作(输入电压足够)一般不会失败,除非是MLC或TLC单元,时间不够会造 ...

楼主思路不错啊,我之前用STC做的一个小产品,就用了这个办法掉电保存EEPROM。

zhonghua_li 发表于 2020-6-19 14:43:46

想象很美好,现实很残酷。
我敢保证。楼主的方法,会出问题。

国学芯用 发表于 2020-6-19 14:54:05

zhonghua_li 发表于 2020-6-19 14:43
想象很美好,现实很残酷。
我敢保证。楼主的方法,会出问题。

方案公司的工程师   多年测试出的结果    请放心使用

不舍的六年 发表于 2020-6-19 17:19:38

上电的时候擦,掉电的时候写,除非能保证100%的写数据不失误。失误一次数据全没了。感觉风险还是有点高。

小李非刀 发表于 2020-6-19 17:37:50

wochai 发表于 2020-6-16 15:55
“我们建议客户在上电的时候就先去擦,然后在掉电的时候就可以直接写了,不会来不及”
这样有个问题,如果 ...

就是因为一些数据一直在变化,但又要掉电保持,才有此要求。当然,也可以判断,有变化才更新。

foxpro2005 发表于 2020-6-20 22:43:40

对于这种需求,以及考虑数据安全,想了一种方法: 可以使用两个页面来做乒乓操作,即两个页面轮换来写入新的数据! 如下:
1)先描述一下存储的数据格式 :
数据头标识符(2个字节,如: 0xFA 0xFA) + 数据版本标识符(1个字节: 0~255每次更新时递增) + 数据长度(1个字节,这个为可选项) + 实际数据内容 + 校验字节(校验和或CRC都可以,这个也为可选项) + 数据尾标识符(2个字节,如: 0xF5 0xF5)
2)具体操作:使用两个页面轮换擦写,弄一个变量记录数据来源于哪个页面,掉电时就去写另外一个页面。
a. 上电时,读取并检查两个页面内容,只擦除旧版本数据的页面(若已擦除过了全为0xFF,则无需再进行擦除操作了 )
b. 掉电时,如果数据有修改需要存储, 将新数据写到另外一个页面(上电时已擦除的那个页面)。


eddia2012 发表于 2020-6-21 22:38:35

楼上思路不错

freshuman 发表于 2020-10-9 19:48:58

lb0857 发表于 2020-6-16 17:12
N多年前被歪果仁的MCU内部的所谓eeprom坑过   目前还是心有余悸情愿外置24c一粒   不再使用内部丰富的eep ...

我也被坑过多少回的,连STC佬大的竹笙泉也坑过了,但是现在新唐的003就没有遇到过了;心想应该是华邦作EEPROM出生的,自然好一点;

cc1987 发表于 2020-10-10 08:05:08

{:smile:}思路不错

AWEN2000 发表于 2020-10-10 09:10:00

Eeprom需要擦除???
第一次听到这样的说法
您的EEPROM是flash吧?

michael.yang 发表于 2020-10-10 10:42:37

AWEN2000 发表于 2020-10-10 09:10
Eeprom需要擦除???
第一次听到这样的说法
您的EEPROM是flash吧?

没错,有些内部eeprom就是flash来的

mtdzok 发表于 2020-10-10 16:29:29

AWEN2000 发表于 2020-10-10 09:10
Eeprom需要擦除???
第一次听到这样的说法
您的EEPROM是flash吧?

是的,所有的STC所谓EEPROM都是在flash程序存储器中辟出一部分做为EEPROM用,不是真正的EEPROM,要页擦除。使用要有些技巧。
页: [1]
查看完整版本: 关于掉电保存数据,分享一下