打印
[MCU]

数据损坏的问题

[复制链接]
1564|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
focusdoit|  楼主 | 2013-11-24 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个应用中,每次关机前,要把这次操作的工作数据记录到单片机外部的Nor Flash中. 每次开机前,去读取上次操作的数据,存到SRAM中.

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

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

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

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

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

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

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

另外,关机前SRAM中的数据会否在开机上电,断电时候损坏呢? 因为是把Flash中的数据读到RAM中,把RAM中的数据写入到Flash中去的.

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

相关帖子

沙发
chenyu988| | 2013-11-24 15:11 | 只看该作者
我觉得应该先把数据损坏的根本原因先找到再说吧

使用特权

评论回复
板凳
focusdoit|  楼主 | 2013-11-24 20:41 | 只看该作者
chenyu988 发表于 2013-11-24 15:11
我觉得应该先把数据损坏的根本原因先找到再说吧

现在就是找不到啊

使用特权

评论回复
地板
jt4117| | 2013-11-24 20:56 | 只看该作者
感觉是程序原因。 自己好好查查吧。 这个问题很容易查啊。 比如关机前写入nor FLASH的数据。 写完了在读出来,看看是不是自己写的那个数据。 如果是, 就关机。 如果再次开机时读nor flash数据对不上,那好好查查开机读取的程序代码。 比如初始化函数。 初始化顺序。 等等。 千万别总是怀疑硬件有问题。 很多软件工程师都有这毛病,对自己很有信心。 一出问题就去找硬件工程师。折腾半天换来换去最后还是自己代码有问题。

使用特权

评论回复
5
chenyu988| | 2013-11-24 21:10 | 只看该作者
focusdoit 发表于 2013-11-24 20:41
现在就是找不到啊

可以用串口打印看看啊

使用特权

评论回复
6
focusdoit|  楼主 | 2013-11-24 21:44 | 只看该作者
jt4117 发表于 2013-11-24 20:56
感觉是程序原因。 自己好好查查吧。 这个问题很容易查啊。 比如关机前写入nor FLASH的数据。 写完了在读出 ...

不好查,在实验室里,感觉无论怎么野蛮操作,关机,开机,都没问题.但是客户有抱怨.

使用特权

评论回复
7
focusdoit|  楼主 | 2013-11-24 21:48 | 只看该作者
jt4117 发表于 2013-11-24 20:56
感觉是程序原因。 自己好好查查吧。 这个问题很容易查啊。 比如关机前写入nor FLASH的数据。 写完了在读出 ...

只是根据客户的抱怨,推断出是什么数据错误.但很难重现这个错误.除非在源代码里直接设置坏数据,表现的和客户的抱怨的现象一致.
然后推断这个数据怎么会发生错误.

使用特权

评论回复
8
ayb_ice| | 2013-11-25 08:17 | 只看该作者
写,逐字节检验

使用特权

评论回复
9
lk07828| | 2013-11-25 12:17 | 只看该作者
关机前,写完数据后再读出来确认一下。。。

使用特权

评论回复
10
江枫渔火| | 2013-11-25 12:34 | 只看该作者
数据损坏应该有两种可能:
1,写入的数据本来就不对了
2,写入对的,但flash没给你保存对。

第一种,又分两种情况:
1,你程序不对,中间数据的产生或读取有异常情况,有隐蔽的漏洞。
2,你程序对,发出去的数据在硬件线路上被干扰,出现位错误。要么是现场干扰较严重和复杂,要么是操作时序控制不严,余量不大,要么两种情况兼备。

第二种,大多是flash芯片有坏点,换个芯片或屏蔽坏点。

使用特权

评论回复
11
dqyubsh1| | 2013-11-25 16:02 | 只看该作者
没看到你是如何判断关机掉电过程的,包括硬件怎样实现掉电检测,留给软件可靠保存数据的时间是多少,如果电源有波动,即,掉电后又飞快地上电,这个过程软件如何处理?这些问题才是根本,软件硬件谁也跑不掉。

你可以这样测试,飞快地拔插销,并飞快地插上,循环1000次。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝