OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 怎么破?断电保存到EEPROM (M24C02),上电读出,偶尔读出错误!。。。

共7条 1/1 1 跳转至

怎么破?断电保存到EEPROM (M24C02),上电读出,偶尔读出错误!。。。

工程师
2019-11-09 23:21:07    评分

如题,其中MCU是STC单片机。EEPROM用的是意法半导体ST的 m24c02,和at24c02有点不同,代码改了一点可以读写,用的模拟IIC。


内容安排区间,比如:
0-1是标志字节,2-3是配置参数,N-M是存最新内容的区间

逻辑是:
1、开机读出参数,标志位的两个字节如果不是指定值就认为是出厂第一次运行,就把flash的初始值写进去。。。指定位字节就变成了指定内容
2、电压低的时候保存最新N-M区间的内容,用的是超级电容,通过串口测试,每次断电保存都保存好了,然后还可以串口发很多数据(故意死循环的),可以持续大概300-500ms甚至更长
3、开机读出如果是指定标志,就直接读取2-3的内容作为设置值

现在是,偶尔会出现参数丢失,恢复了默认值(被认为是出厂了,重新写了覆盖了),其实就应该是开机检验的时候,指定位置的字节对不上,重新写入了默认值

但是大概率是不会丢失的,不知道怎么办避免这个问题呢?或者问题出现在哪里?


不确定是不是某些原因让整个片子擦除了?目前硬件是带写保护引脚控制的,程序也用到了写保护控制IO




关键词: EEPROM     M24C02     24c02    

工程师
2019-11-09 23:24:41    评分
2楼

我的经验: 备份!!!!相互校验~


工程师
2019-11-09 23:29:27    评分
3楼

用了超级电容,是不是上电后电压稳定时间长了,而程序在电压还未完全稳定时就已经去读eeprom了呢?导致数据出错,重置数据
话说几年前用电容+spiflash保存断电内容也出现过类似情况


助工
2019-11-10 00:00:59    评分
4楼

很可能是eeprom的工作电压比MCU高,所以表面上看MCU还在运行,其实EEPROM因为低电压不工作了。


工程师
2019-11-10 00:02:21    评分
5楼
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理,就算5Kv干扰工业现场,丢数据几率为零。十多年工业产品经验,字字珠玑,不信罢就。



工程师
2019-11-10 00:36:00    评分
6楼

这现象我们也遇到过,但有点不一样的是:我们用的是铁电,外部总线结构,操作后就马上保存,开机读取。。
问题表现为:有时候开机读取数据会出错,但出错几率特别小!我们测试时就一直上电,断电,上电断电。。出现问题并没有规律。
一开始怀疑是干扰,但无论什么环境,加什么电容电阻都一样会出现!
然后我们注意到一个现象,就是有有些板子是无论如何都不会出现这个错误。
接着仔细对比两个不同,最终找到的原因是:
单片机的复位芯片触发的电压有两种,低一些的就会出现这个问题,高的(4.6V好像)就不会!
将所有的会出现问题的板子换掉复位芯片,一年多了,一点事都没有!已批量大约10K


专家
2019-11-10 11:17:09    评分
7楼

我们采取的方案和5楼的方案几乎一样。

我估计可能是在芯片内部在写入的时候未完成导致的吧



共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]