yanghn2002

View My GitHub Profile

需要在 EEPROM 上面记录设备的运行、温度、电源这些数据,所以需要磨损均衡。我参考了一个开源实现,但这个实现一是在 Arduino 上的,不好移植,二是也不能完全满足我的需求,所以我最终还是重写了一版。

磨损均衡

磨损均衡的实现本身其实不复杂,就是在每 \(N_d\) 个字节前面加一个 \(N_i\) 字节长度的无符号整数 index ,然后 \({i_{min}}\) 即为数据起点, \({i_{max}}\) 为数据终点,旧数据会被新数据覆盖。

那么根据 \(n_i\) ,最大支持的数据写次数为:
\(C = 2^{8N_i}\)
消耗的物理空间为:
\(S = C{\cdot}(N_d+N_i)\)

分区

这就是我重写的最大理由,因为业务里面像设备的运行状态这种数据相较于电源异常的情况的写入频率要高得多,前面的循环写入方式会导致新数据覆盖旧数据,那么如果不进行逻辑隔离,偶发的数据会被大量常见数据覆盖掉,如果直接写入整个结构体,那么偶发数据很少改变又会浪费大量空间。所以我在前面磨损均衡的基础上对 EEPROM 进行了分区,每个分区对应虚拟的物理空间 $S$ 。