FDS的掉电分析

如果芯片在上一次操作Flash时遭遇了意外掉电 ,会发生什么呢? 1. 写入过程掉电 一个Record的写入按照如下顺序执行: TL Part ID Part Content IC Part 如果在前三步意外掉电,IC Part由于没有开始写入,所以File ID仍然是原始值0xFFFF。 File ID = 0xFFFF的数据也会被视为脏数据,在读取、更新、删除操作的时候,脏数据会被忽略。GC 过程会删除脏数据,收回空间。 如果在第四步掉电,IC Part有两种可能: 写入失败:File ID仍然是0xFFFF,情况同上 写入错误:CRC 校验将无法通过,应用代码可以得知 所以一旦我们开启了CRC校验,即可解决第四步出现的意外掉电情况。 (经过我有限的测试,在第四步掉电时,只遇到“写入失败”,完全没有遇到“写入错误”,一个猜测是芯片电源管脚上的电容余电保护Flash将单个Word写入完毕。) 2. 删除、更新过程掉电 […]

FDS的GC操作

本文介绍FDS库的GC操作。 1. GC是什么 在FDS的概念中,写入Flash的数据以Record的形式保存。Record的格式为: Flash只能以32-bit的字(Word)为单位进行写操作。Record Header包含三个字,分别是: TL Part: Record Key和Data Length IC Part: File ID和CRC Value ID Part: Record ID 有效的Record Key范围是(0x0001 ~ 0xBFFF)。如果Record Key == 0x0000,表示它是一条无效数据,或脏数据(Dirty Record)。 删除Record,实际是将该数据设置为脏数据。 更新Record,实际是将该数据设置为脏数据,再写入一个新数据。 […]