请问flash擦,写时掉电,会出现什么结果

iwillalwaysloveyou 2008-06-16 11:41:25
加精
rt
...全文
5069 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
河边禾 2021-07-13
  • 打赏
  • 举报
回复

我也碰到了这种情况,多写了一份备份文件,同时加上了校验位
但是我发现,一旦文件出错(写文件时掉电),两个文件都会有问题
根本没有办法恢复啊,求帮助.....

xgbing 2012-07-28
  • 打赏
  • 举报
回复
检测掉电电路,很多没有使用这个也可以正常工作
xgbing 2012-07-28
  • 打赏
  • 举报
回复
一般的做法是:
(1)在数据中添加CRC校验
(2)写两份数据,若读取CRC校验失败,则可以读取备份的数据。


如果有文件系统,文件系统有日志信息,可以修复文件错误。
有时电脑断电时开机windows会扫描磁盘,这就是在修改断电时的文件系统错误。
a841114 2012-07-27
  • 打赏
  • 举报
回复
学习了
guangbiao_w 2011-06-03
  • 打赏
  • 举报
回复
已阅。
sunvin 2011-03-11
  • 打赏
  • 举报
回复
同时和使用的FLASH结构有关,以8位 SLC工艺,掉电时写到怎样就是怎样;
譬如写入0x1 0x2 0x3 0x4,写到0x3时断电,此时FLASH中有如下可能
0x1 0x2 01111111 0xff;
0x1 0x2 00111111 0xff;
0x1 0x2 00011111 0xff;
0x1 0x2 00001111 0xff;
0x1 0x2 00000111 0xff;
0x1 0x2 00000011 0xff;

如果是MLC结构,同样写到0x3,那第3个字节可能结果就是
11111111
10111111
01111111
01011111
00111111
00101111
00011111
00010111
00001111
00001011
00000111
00000011
fzzz123 2011-03-05
  • 打赏
  • 举报
回复
让他是啥
用户 昵称 2010-04-09
  • 打赏
  • 举报
回复
俺们做卡的都有防掉电机制。
kevinyujm 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 yangb_soso 的回复:]
软件实现掉电保护,那么首先必须硬件电路上有相应的掉电警告中断,而且必须有足够的时间供软件响应。纯靠软件是无法实现的。
---------------------------------------------------------------

非也非也,可以通过一些标记或算法做,
比如你要改写某扇区内容,
1、先把该扇区内容备份到一个特殊的扇区;
2、在某个地方写一个特殊的标记;
……
[/Quote]

这个过程“备份->置标记->写->清标记”的办法,是个可行的办法,也是目前比较通行的办法。
但是要注意:这个标记必须是单独占用一个无用的扇区(没有实际有用数据的扇区),保证对标记的操作不会影响到实际数据。
二是这只能保证数据能恢复到之前的状态,不能确保数据结构的完整性。譬如你有一个数据结构有16字节(它们之间是有逻辑关系的),跨两个扇区保存,现在要全面更新这16个字节的数据,如果发生某个扇区没有成功更新(即恢复到之前的数据),就会发生新旧数据同时存在的情况,程序利用这些数据来操作,就有可能发生错误。所以,还需进一步的机制来保证“整体数据结构”的完整性,譬如某个文件的一部分数据坏掉了,那么就把整个文件无效掉。
kevinyujm 2010-04-09
  • 打赏
  • 举报
回复

对于NorFlash,写flash是先擦除后写入:擦除的结果是这个sector/block的所有数据位都被置1,所谓的写数据其实就是将某些位“变0”的操作。
既然是掉电,那么掉电的时机你是没办法控制的。
也就可能出现擦除时掉电和写时掉电。
不管哪种情况,最后的结果都是无法预料的。
如果你要保证数据无误,需要进行校验工作。
hanlingdx 2010-04-08
  • 打赏
  • 举报
回复
我写芯片时按了个取消,那个ARM芯片就“unable to halt arm core”了。谁救救我!!!!!!!!!
zhsh_email 2010-04-01
  • 打赏
  • 举报
回复
mark
爪哇鹅 2009-09-15
  • 打赏
  • 举报
回复
里面的数据出现错误,读不出来了
CyberLogix 2009-09-14
  • 打赏
  • 举报
回复
学习了
j260749883 2009-09-02
  • 打赏
  • 举报
回复
这个估计芯片公司都有考虑吧,都有各自的措施和办法的。
zzzzz11111xxxxx 2009-09-01
  • 打赏
  • 举报
回复
实践一把试试看最好了
dxdraw 2009-08-06
  • 打赏
  • 举报
回复
最好的办法是保证不要掉电,最好有备用电源。
eshowjow 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 wf_car 的回复:]
如果是这么个要求让我重新设计一下硬件的话会有如下几个部分:
1.电源管理芯片,检测掉电事件的发生;
2.储能元件,在掉电发生后能满足执行掉电保护的操作即有足够的时间存储一些标志位和必要的数据;
然后结合前面大家提到的软件掉电保护方法来实现。
如果根据楼上所说“掉电保护不是重新擦写那么简单,首先要有一个机制能知道发生了掉电事件”,那么上述硬件改动是必须的。
[/Quote]
赞成。
LanceJin 2009-07-11
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 lin0119 的回复:]
对于一块数据,末尾加一个CRC校验字,在读出后判断数据是否正确。
如果存储空间足够,另外增加一个镜像备份,可靠性会更高。
[/Quote]
CRC校验是检验数据是否正确而已,是因为NAND Flash的bit反转特性,就是说某一个bit或多个bit的值会突然变掉,导致数据不正确。CRC纠错的能力很弱,现在一般也就是4 bit。这跟掉电可能导致写过程不可预知的错误完全是两码事。至于镜像备份,写镜像时就不会掉电了吗?!!
ccyy2002 2009-07-10
  • 打赏
  • 举报
回复
52楼基本上已经说清楚了,一个电源检测芯片,一个储能元件(比如大点的电容)结合软件判断以及提前保存现场就能很好的实现掉电保护了
还是硬件上做些改动吧,成本又没多少,想纯软件实现感觉比较难。
加载更多回复(54)

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧