OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7726|回复: 4

Flash存储数据损坏的问题

[复制链接]

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2012-8-29
在线时间
0 小时
发表于 2013-11-22 10:33:56 | 显示全部楼层 |阅读模式
一个应用中,每次关机前,要把这次操作的工作数据记录到单片机外部的Nand Flash中. 每次开机前,去读取上次操作的数据.

现在发现偶尔有数据损坏. 无法确定是开机读的时候读取错误,还是关机前记录数据的时候写入错误,抑或Flash在写入完成后存储时间段的过程中,数据损坏.

写的时候有"和校验"写入.读的时候会读取"和校验"

请问有没有什么容错技术来处理这个问题; 

我现在做的是关机写数据到2个地址段(A,B ), 读的时候先读A的数据,如果读到A的数据"和校验"无误,就不读取第2个B Flash地址的数据.

我现在的疑问是,如果写的过程中有误,那么我是同时写入2个地址的,那岂不是2个备份都会有误? 

想的另一个方法干脆在开辟一块flash地址C,写入开机时候读取正确的数据.但关机时刻,不写当次工作的数据进入这个C块,这个C块作为上次成功读取数据的备份.

这样,如果写入过程中,2个AB块都坏掉,下次开机,就直接用C块

请问有人有什么好的方法解决这个问题吗?









正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2012-8-29
在线时间
0 小时
 楼主| 发表于 2013-11-22 10:36:16 | 显示全部楼层
回复【楼主位】ivory:
---------------------------------
另外,关机前,RAM中的数据会否损坏呢? 因为是把RAM中的数据写入到Flash中去的.
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-11-22 11:31:46 | 显示全部楼层
回复【2楼】ivory:
---------------------------------
得看你的内存管理怎么做咯
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2067
金钱
2067
注册时间
2012-5-26
在线时间
292 小时
发表于 2015-11-11 11:49:06 | 显示全部楼层
回复【2楼】ivory:
---------------------------------
现在也遇到和LZ类似的问题,也是有一部分内存数据在使用过程中需要写到外部flash中,开机的时候会读取。用的也是开辟两个地址,并使用校验和。
在使用中会概率出现读取错误,应该是数据校验和有问题,但是找不到原因,出现概率也不大。
不知道LZ后来是怎么解决的?
活着才是王道!健康是一切的前提!
回复 支持 反对

使用道具 举报

13

主题

296

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2067
金钱
2067
注册时间
2012-5-26
在线时间
292 小时
发表于 2015-11-12 11:38:29 | 显示全部楼层
在网上找了一些资料和看了一些帖子,可能是在读写flash时被中断和os的任务调度打断造成
我这个是上了OS系统的
只能先在要读写外部flash的地方加上禁止系统任务调度,再测试看看了
活着才是王道!健康是一切的前提!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 02:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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