一个应用中,每次关机前,要把这次操作的工作数据记录到单片机外部的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中去的.
请问有人有什么好的方法解决这个问题吗?
|