搜索
bottom↓
回复: 32

请问原因?断电保存到M24C02,上电读出,偶尔读出错误

[复制链接]

出0入99汤圆

发表于 2019-11-8 15:22:26 | 显示全部楼层 |阅读模式
本帖最后由 lovewind 于 2019-11-8 15:27 编辑

用的是ST的 m24c02,和at24c02有点不同,代码改了一点可以读写,用的模拟IIC

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

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

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

但是大概率是不会丢失的,不知道怎么办避免这个问题呢?或者问题出现在哪里?
不确定是不是某些原因让整个片子擦除了?目前硬件是带写保护引脚控制的,程序也用到了写保护控制IO

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2019-11-8 15:31:07 | 显示全部楼层
备份!!!!相互校验

出0入13汤圆

发表于 2019-11-8 15:53:12 | 显示全部楼层
用了超级电容,是不是上电后电压稳定时间长了,而程序在电压还未完全稳定时就已经去读eeprom了呢?导致数据出错,重置数据
话说几年前用电容+spiflash保存断电内容也出现过类似情况

出0入99汤圆

 楼主| 发表于 2019-11-8 15:56:09 | 显示全部楼层
weiwei4 发表于 2019-11-8 15:53
用了超级电容,是不是上电后电压稳定时间长了,而程序在电压还未完全稳定时就已经去读eeprom了呢?导致数据 ...

看到有人说上电1S后再去读?难道是电容再充电,电压不稳定?试试改改能否降低概率

出0入0汤圆

发表于 2019-11-8 16:16:21 | 显示全部楼层
感觉为了安全还是加校验,然后多读几次,写的时候也读出来确认

出0入0汤圆

发表于 2019-11-8 16:25:25 | 显示全部楼层
很可能是eeprom的工作电压比MCU高,所以表面上看MCU还在运行,其实EEPROM因为低电压不工作了。

出0入22汤圆

发表于 2019-11-8 16:25:38 | 显示全部楼层
上电马上读大概率出问题,延时一段时间就好了

出0入42汤圆

发表于 2019-11-8 16:30:14 | 显示全部楼层
加校验和备份是解决这种数据出错问题最可靠的办法

出0入0汤圆

发表于 2019-11-8 16:32:28 | 显示全部楼层
换spi的93C

出0入99汤圆

 楼主| 发表于 2019-11-8 16:33:34 | 显示全部楼层
shiva_shiva 发表于 2019-11-8 16:25
很可能是eeprom的工作电压比MCU高,所以表面上看MCU还在运行,其实EEPROM因为低电压不工作了。
...

有可能待测试

出0入0汤圆

发表于 2019-11-8 16:45:15 | 显示全部楼层
用WP管脚了吗?

出0入99汤圆

 楼主| 发表于 2019-11-8 16:46:03 | 显示全部楼层

用了,只是写的时候才打开写的

出0入0汤圆

发表于 2019-11-8 17:00:29 | 显示全部楼层
ST m24c确实和AT有区别,我一直都没有调试通过。后来用微芯的24lc。看下时序时间上有什么出路。

出0入442汤圆

发表于 2019-11-8 18:12:19 来自手机 | 显示全部楼层
jiaowoxiaolu 发表于 2019-11-8 16:25
上电马上读大概率出问题,延时一段时间就好了

如果写的不对,可能是没等它写完-根据手册,没写完时sda不响应。另外,部分iic是可以支持多字节快速写的。至于读失败,一般是上电io模式,建议初始化完之后先发一个stop,然后后续操作就ok了。

出140入158汤圆

发表于 2019-11-8 18:23:32 | 显示全部楼层
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理,就算5Kv干扰工业现场,丢数据几率为零。十多年工业产品经验,字字珠玑,不信罢就。

出0入99汤圆

 楼主| 发表于 2019-11-8 18:32:33 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

牛逼,涨姿势

出0入0汤圆

发表于 2019-11-8 19:01:48 来自手机 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

这位大胸弟应该是广府人士啊

出0入0汤圆

发表于 2019-11-8 19:57:00 | 显示全部楼层
上电读取错误时延时再试,不要让程序轻易的写默认值
用两个区域存储相同的内容,修改时也一样,每次读取时如果1区错误就再尝试读2区
这样可以防止正在写时断电引起的写错误

出0入55汤圆

发表于 2019-11-8 19:58:36 来自手机 | 显示全部楼层
本帖最后由 jssd 于 2019-11-8 20:10 编辑

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

出1325入193汤圆

发表于 2019-11-8 20:03:21 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

点赞  上电延时加上

出0入55汤圆

发表于 2019-11-8 20:12:09 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

这个是个好办法!不过我们用铁电,贵!

出0入99汤圆

 楼主| 发表于 2019-11-8 21:25:29 | 显示全部楼层
jssd 发表于 2019-11-8 19:58
这现象我们也遇到过,但有点不一样的是:我们用的是铁电,外部总线结构,操作后就马上保存,开机读取。。
...

没用专门的复为新片就是,上电复位阻容。。。看来程序先优化看看效果

出0入4汤圆

发表于 2019-11-8 22:29:32 | 显示全部楼层
shiva_shiva 发表于 2019-11-8 16:25
很可能是eeprom的工作电压比MCU高,所以表面上看MCU还在运行,其实EEPROM因为低电压不工作了。
...

整个系统中应该确保MCU最后复位工作,虽然简单,但总是出问题

出0入8汤圆

发表于 2019-11-9 08:45:27 | 显示全部楼层
这个问题比较常见,带外部EE的产品设计完成后要反复的上下电测试,一般要注意EE的电压工作范围,单片机的复位电压,另外不同供电范围芯片对应时钟频率可能不同,设计时要留有一定裕量

出0入0汤圆

发表于 2019-11-9 09:24:22 来自手机 | 显示全部楼层
掉电保存是OK的吗?还是上电读出错误?

出0入0汤圆

发表于 2019-11-9 22:54:10 | 显示全部楼层
jssd 发表于 2019-11-8 19:58
这现象我们也遇到过,但有点不一样的是:我们用的是铁电,外部总线结构,操作后就马上保存,开机读取。。
...

这不就是电压问题吗?还没达到EEPROM的工作电压就去读。

出0入0汤圆

发表于 2019-11-10 08:27:24 来自手机 | 显示全部楼层
上电复位不可靠导致的

出0入8汤圆

发表于 2019-11-10 09:13:57 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

这样读写速度不能高了

出0入55汤圆

发表于 2019-11-10 12:29:05 | 显示全部楼层
gliet_su 发表于 2019-11-9 22:54
这不就是电压问题吗?还没达到EEPROM的工作电压就去读。

是的。                     

出0入55汤圆

发表于 2019-11-10 12:29:21 | 显示全部楼层
北国风光 发表于 2019-11-10 08:27
上电复位不可靠导致的

我也同意               

出0入4汤圆

发表于 2019-11-11 09:18:03 | 显示全部楼层
读EEPROM时有干扰了.  1.上电延时一段时间.  2.延时再读N次. 3. 多处备份

出0入0汤圆

发表于 2019-11-11 10:20:53 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

前辈能详细说说吗 3备份怎么理解?  我用来存储设备参数,这种校验是整个存储区校验还是多少地址到多少地址一个校验

出0入0汤圆

发表于 2022-1-27 21:30:57 | 显示全部楼层
amigenius 发表于 2019-11-8 18:23
24C成熟到不行。正解是:前8个字节不使用,3备份,每包带校验。 SCL,SDA 用2.2K上拉并102到地, 这样处理 ...

因为当前应用的原因,找到了两年多前的这个帖子。我和32楼类似,也是想请教一下,校验怎么做较好,还有就是 “前8个字节不使用”,应该指的是第0 页吧,暂时在其他地方没找到这种建议,这个经验或建议是怎么来的,是因为硬件/物理上的原因,还是因为软件可能有更多机会操作前8个字节,或第0页? 希望能了解得详细一些,望不吝指教,多谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-16 06:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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