gpt4 book ai didi

memory - 断电时如何防止 "partial write"数据损坏?

转载 作者:IT王子 更新时间:2023-10-28 23:36:56 26 4
gpt4 key购买 nike

在嵌入式环境中(使用 MSP430),我看到一些数据损坏是由于部分写入非 volatile 内存而导致的。这似乎是由于写入期间的功率损耗(写入 FRAM 或信息段)造成的。

我正在使用 CRC 验证存储在这些位置的数据。

我的问题是,防止这种“部分写入”损坏的正确方法是什么?目前,我已修改我的代码以写入两个单独的 FRAM 位置。因此,如果一个写入中断导致无效的 CRC,则另一个位置应保持有效。这是一种常见的做法吗?我是否需要为任何非 volatile 内存实现这种双重写入行为?

最佳答案

一个简单的解决方案是维护 两个 版本的数据(在闪存的不同页面中),当前版本和以前的版本。每个版本都有一个标题,其中包含一个序列号和一个验证序列号的单词 - 只是序列号的 1 的补码,例如:

---------
| seq |
---------
| ~seq |
---------
| |
| data |
| |
---------

关键是在写入数据的时候seq~seq两个字都写last

在启动时,您读取具有最高有效序列编号的数据(可能考虑回绕——尤其是对于短序列词)。当您写入数据时,您会覆盖并验证 最旧的 block 。

只要最后写入 CRC,您已经使用的解决方案就是有效的,但它缺乏简单性并且会产生不必要或不希望的 CRC 计算开销。

在 FRAM 上,您不必担心耐用性,但这是闪存和 EEPROM 的问题。在这种情况下,我使用回写式缓存方法,其中数据保存在 RAM 中,并且在修改时启动或重新启动计时器(如果它已经在运行) - 当计时器到期时,数据被写入 - 这可以防止突发写入避免破坏内存,甚至在 FRAM 上也很有用,因为它最大限度地减少了数据写入的软件开销。

关于memory - 断电时如何防止 "partial write"数据损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com