电源周期之间的 EEPROM 磨损均衡

问题描述 投票:0回答:1

我有一个带有 2kb 内存的 EEPROM,可用于存储一些数据 - 每次写入 8 个字节。 我需要每秒写入这些数据,目前我没有能力将 EEPROM 更改为 FRAM 或更好的 EEPROM,所以我必须使用我拥有的(AT24C32,其中 2kb 用于此目的免费)。

每秒写入此 EEPROM 可能会很快杀死它,因为它没有那么多的写入周期(它是一个每天至少运行 12 小时的设备)。

我尝试研究磨损均衡算法,因为这应该将磨损均匀地分布在 2kb 上,并且应该增加 EEPROM 的寿命。

我遇到的主要问题是我需要在电源周期之间保存数据。 假设该设备以 8 字节格式保存时间,我已经看过一些磨损均衡算法的示例,但是在电源周期之间工作的算法通常将当前内存索引保持在静态位置,这意味着虽然磨损会扩散在大部分 2kb 中,索引的 1 个字节仍然会被写入,如果我们每秒写入该静态内存,假设每天 12 小时,它应该会在一个月左右的时间内消失。

是否有一种磨损均衡算法可以对位置进行动态记忆,以便整个 2kb 会均匀磨损而不会遇到这种可能的问题?

c++ c memory arduino eeprom
1个回答
0
投票

有一种非常简单的方法可以做到这一点,只要 8 字节记录中至少有一个位模式不是合法值即可。如果它们是时间戳,则可能很容易做到这一点(并且在 2kb 中存储更多时间戳可能比每个时间戳存储 8 个字节更容易)。

目前,我们假设合法记录都包含至少一个非零字节。

在这种情况下,我们首先将内存初始化为 0,表示它是空的。然后我们将非零值写入连续的位置,并且(可能)使用 RAM 中的一个位置来指示下一次写入的位置。

当系统开机时,我们找到零和非零位置之间的边界,初始化计数器,然后开始。

看起来你的EEPROM是由每页32字节组成的。因此,您可以擦除一个页面,然后用数据填充该页面。在写入该页的最后一个 8 字节块之前,您会擦除下一页,因此在任何给定时间,至少有一个 8 字节块已被擦除,因此如果断电,您将能够找到最后写入的记录的位置。

© www.soinside.com 2019 - 2024. All rights reserved.