探讨Nor Flash掉电对数据完整性的影响及策略

探讨Nor Flash掉电对数据完整性的影响及策略 在研究Nor Flash的掉电问题时首先需要了解其物理特性。在写入数据之前必须先进行擦除操作。擦除后数据状态为全0xFF此时进行的写入操作实质上是将数据从1状态改为0状态。值得注意的是尽管通常先擦除后写入但实际中每个位置在擦除后是可以进行多次写入的只要每次写入都是改变某些bit的状态即可。例如在擦除后数据为0xFF的状态下我们可以依次写入0x0F、0x01和0x00相应的读出数据也会依次变化。然而一旦数据达到0x00状态就无法再被改写因为此时每个bit都是0改写必须先擦除恢复为0xFF状态后再进行。【 U-Boot中的应用 】U-Boot中巧妙利用了Nor Flash的这一特性。当使用冗余env功能时flash上会维护两份env数据我们称之为envA和envB。为了区分哪份env的数据是新的U-Boot采用了FLAG_BOOLEAN策略。该策略在env的头部结构中使用了一个字节flags来表示其有效性。例如当前A有效而B无效时A的flags为0x1B的flags为0x0。在读取时系统可以根据这些flags来判断哪份env是新的。