搜索
bottom↓
回复: 23

EEPROM执行被中断打断,在中断中重新写入会导致数据出错?

[复制链接]

出0入0汤圆

发表于 2019-10-11 16:22:02 | 显示全部楼层 |阅读模式
本帖最后由 擦鞋匠 于 2019-10-11 19:58 编辑

我使用的是SPI EEPROM 25LC512。

如果在程序运行过程中执行EEPROM_Read函数或者EEPROM_Write函数读写EEPROM地址A。
如果在某一时刻,突然系统掉电进入NMI不可屏蔽中断,在该中断中将重要参数写入到EEPROM地址B当中。

请问各位:
由于在主程序中正在执行EEPROM读写,现在中断突然打断原来的EEPROM读写时序,然后中断函数中又重新开始写入(并且该中断不可屏蔽),是否有可能会导致EEPROM写入函数写入数据发生错误?
恳请指教!感谢!

备注:
两次针对EEPROM的操作的地址不同。
在主程序中可能是读操作,也可能是写操作;在中断中是写操作。

备注2:
我在想一个办法,我不知道是否具有可行性。
由于在中断中对EEPROM写操作担心此刻EEPROM被主程序中占用,那如果我能在中断程序中执行某种操作,清除在主程序中未执行完成的动作,使得在中断程序中的执行写操作相当于重新开始即可。
如果在中断程序中清除主程序未执行完的动作,可能会导致在主程序中的读写操作操作失败(写入数据和读取数据丢失),不过,这个对于我当前应用没有关系。
如何执行这个清除操作呢(例如拉高CS或者拉低CS是否可以)?

编辑原因:增加备注。
编辑原因:再次增加备注。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入8汤圆

发表于 2019-10-11 16:24:33 | 显示全部楼层
SPI? 不会有什么影响的, SPI的特性就决定了不怕中断

出0入84汤圆

发表于 2019-10-11 16:30:17 | 显示全部楼层
不会,芯片会很耐心地等待你下面的时序到来,测试过IIC的,中断一两秒都会等待

出0入0汤圆

 楼主| 发表于 2019-10-11 16:34:19 | 显示全部楼层
补充下:
在主程序中可能是读操作,也可能是写操作,但在中断中时写操作
两次操作的EEPROM地址不同

出0入8汤圆

发表于 2019-10-11 17:24:49 | 显示全部楼层
对, 前提是不是在中断里面搞外设, 那样的话, 神仙也保证不了

出0入0汤圆

发表于 2019-10-11 17:28:32 | 显示全部楼层
如果是iic的,有可能会不对。spi没用过就不知道了。

出0入0汤圆

发表于 2019-10-11 17:31:49 来自手机 | 显示全部楼层
时序被打乱了

出0入0汤圆

 楼主| 发表于 2019-10-11 17:32:16 | 显示全部楼层
icoyool 发表于 2019-10-11 17:24
对, 前提是不是在中断里面搞外设, 那样的话, 神仙也保证不了

感谢阁下指教!
之所以在中断中写入EEPROM。是因为我需要在设备掉电时刻将重要参数写入EEPROM进行保存。我必须确保数据被准确保存,这是优先级最高的事情,所以我都使用NMI中断了。

出0入45汤圆

发表于 2019-10-11 17:37:41 | 显示全部楼层
擦鞋匠 发表于 2019-10-11 17:32
感谢阁下指教!
之所以在中断中写入EEPROM。是因为我需要在设备掉电时刻将重要参数写入EEPROM进行保存。 ...

http://www.eda365.com/thread-187412-1-2.html  
参看这片文章

出0入0汤圆

发表于 2019-10-11 17:51:58 | 显示全部楼层
楼主,可以会有问题,例如:主程序刚刚写了i2c,这时候中断来了,但是i2c内部正在保存刚刚写的内容(内部写是要时间的,WIP=1),这时候无法再写入;如果掉电开始到电源掉落到不能工作这段时间短,那就会丢失这次数据。这时候,跟在哪里调用已经没有关系了。

出0入8汤圆

发表于 2019-10-11 17:52:43 | 显示全部楼层
擦鞋匠 发表于 2019-10-11 17:32
感谢阁下指教!
之所以在中断中写入EEPROM。是因为我需要在设备掉电时刻将重要参数写入EEPROM进行保存。 ...

重要数据定时保存
数据->结构体-定时检测CRC--修改后立刻保存--
即使是死机了, 上电恢复到几分钟前的状态也是可以的,
不要在中断做保存的意思的让你不要和其它中断或主程序里的操作发生资源冲突, 如果只有一个中断在使用EEPROM, 倒也不是什么问题
但EEPROM写本来就很耗时, 写一次可能需要几百ms不等的时间, 在中断里面做反而会造成很多问题,比如串口通信问题, LED扫描不规则闪烁异常高亮等等

出0入0汤圆

发表于 2019-10-11 17:53:00 | 显示全部楼层
czzhouyun 发表于 2019-10-11 16:30
不会,芯片会很耐心地等待你下面的时序到来,测试过IIC的,中断一两秒都会等待 ...

打断是在起始信号和终止信号位置打断。这个风险比较大。

出0入0汤圆

发表于 2019-10-11 19:11:45 来自手机 | 显示全部楼层
会啊,写是个序列,一个序列未完成,你在中断里又来,序列就乱了

出0入0汤圆

 楼主| 发表于 2019-10-11 19:56:42 | 显示全部楼层
icoyool 发表于 2019-10-11 17:52
重要数据定时保存
数据->结构体-定时检测CRC--修改后立刻保存--
即使是死机了, 上电恢复到几分钟前的状 ...

请教阁下:
我在想一个办法,我不知道是否具有可行性,还请阁下赐教,不胜感激!
由于在中断中对EEPROM写操作担心此刻EEPROM被主程序中占用,那如果我能在中断程序中执行某种操作,清除在主程序中未执行完成的动作,使得在中断程序中的执行写操作相当于重新开始即可。
备注:如果在中断程序中清除主程序未执行完的动作,可能会导致在主程序中的读写操作操作失败(写入数据和读取数据丢失),不过,这个对于我当前应用没有关系。
如何执行这个清除操作呢(例如拉高CS或者拉低CS是否可以)?恳请指教!感谢!

出0入475汤圆

发表于 2019-10-11 20:06:56 来自手机 | 显示全部楼层
本来在一定程度上你这个就是架构错误的问题,既然你一定要这样做那么肯定就的有所牺牲。最简单的就是加一个互斥信号吧,中断外的写函数执行起步时候加一个全局标志,中断时候写之前看看有没有标志,有的话就不写或者其他一些合适的操作

出0入0汤圆

发表于 2019-10-11 21:41:18 来自手机 | 显示全部楼层
为什么要在中断处理?中断加个掉电标志,主程序一直检测这个标志就好了

出0入8汤圆

发表于 2019-10-11 22:29:34 | 显示全部楼层
擦鞋匠 发表于 2019-10-11 19:56
请教阁下:
我在想一个办法,我不知道是否具有可行性,还请阁下赐教,不胜感激!
由于在中断中对EEPROM写 ...

根本不用这么复杂,
就是你在中断里面保证不去动EEPROM这两个引脚就得了

出0入0汤圆

发表于 2019-10-12 13:33:04 | 显示全部楼层
读写EEPROM,要么全在主程序(推荐),要么全在中断

出0入0汤圆

 楼主| 发表于 2019-10-14 18:38:48 | 显示全部楼层
icoyool 发表于 2019-10-11 22:29
根本不用这么复杂,
就是你在中断里面保证不去动EEPROM这两个引脚就得了 ...

感谢阁下多次回复!
目前我已经放弃之前在中断中写入EEPROM方式,改为在主程序中间隔时间写入EEPROM方式。
再次感谢!

出0入0汤圆

发表于 2019-10-14 21:28:04 来自手机 | 显示全部楼层
间隔方式?间隔多久?

出0入4汤圆

发表于 2019-10-21 18:53:56 来自手机 | 显示全部楼层
没做备份判断,会不会很频繁写?

出0入0汤圆

 楼主| 发表于 2019-10-21 20:05:06 | 显示全部楼层
D.lovers 发表于 2019-10-21 18:53
没做备份判断,会不会很频繁写?


如果在中断中进行写入,不会特别频繁,因此不需要考虑擦写平衡。
试想,你不可能一天掉电上百次吧。就按照一天一百次,设计使用年限10年也才36万次,常规EEPROM能保证1百万次呢(手册上)。

如果周期写入,那就需要考虑擦写平衡啦。

出0入4汤圆

发表于 2019-10-26 22:09:33 | 显示全部楼层
擦鞋匠 发表于 2019-10-21 20:05
如果在中断中进行写入,不会特别频繁,因此不需要考虑擦写平衡。
试想,你不可能一天掉电上百次吧。就按 ...

之前有同事跟的项目就是一直有写eeprom,一个月项目出问题了

出0入0汤圆

发表于 2019-10-27 19:58:19 | 显示全部楼层
如果是频繁的数据读写,最好要加校验的,你不能保证存储器写的就是你的数据。也不能数据传输过程中是完整的。最后有校验信息,有冗余机制
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 21:55

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

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