前提
Flash
存储编程特点
Flash
写:由1变为0,变为0后,不能通过写再变为1。
Flash
擦除:由0变为1,不能按位擦除,必须将整个block一起擦除,把一个block或整个Flash的内容都变成1。
当在一个block中进行存储时,一旦对某一block中的某一位写0,再要改变成1,则必须先对整个block进行擦除,然后才能修改。
没有VFS之前的Flash数据存取方式
先把整个block读到RAM中,在RAM中修改其内容,再擦除整个block,最后写入修改后的内容。
缺陷:
1)
在Flash擦写过程中掉电,会造成整个块的数据丢失
2)
每修改一次数据,对块进行了一次擦除,频繁的读-擦除-写操作,会影响Flash的使用寿命,每次需要花比较多的时间来完成数据修改操作,影响系统性能
3)
每次进行Flash擦写之前,至少需要一个块大小的RAM为其备份,有时可能会造成RAM资源紧张
4)
一旦出现坏块,则存储在该块的相关信息永久失效,造成系统崩溃
VFS主要特点
1) 动态映射逻辑扇区到物理地址;
2)物理块进行寿命均衡,记录Flash的擦写次数;
3) 掉电数据恢复
4) 记录坏块
存储空间管理
VFS
对应用数据使用的Flash块空间进行管理,将每个物理块划分成若干个物理扇区, 以扇区为最小单位进行数据存取, 每个物理扇区由512+4字节=516字节组成 ,512字节为有效数据空间,另外4字节(32位)用于存放逻辑扇区id和当前状态。定义如下:
扇区状态
|