今天小编要和大家分享的是存储技术相关信息,接下来我将从一个基于Flash的掉电数据存取方案设计kFlashFile,车载硬盘尚未存储数据 硬盘上的数据存储地址这几个方面来介绍。

存储技术相关技术文章一个基于Flash的掉电数据存取方案设计kFlashFile车载硬盘尚未存储数据 硬盘上的数据存储地址

存储技术相关技术文章一个基于Flash的掉电数据存取方案设计kFlashFile

kFlashFile

一、简介

kFlashFile 是一个基于 NOR Flash 的轻量级文件数据存储方案,用于需要断电数据保存的项目。

kFlashFile 主要为 i.MXRT 系列设计,但其分层框架设计使其也可轻松移植到其他 MCU 平台。

kFlashFile 从设计上分为三层:

最底层是 Driver 层:即 Low-level 驱动,这层是 MCU 相关的,对于 i.MXRT 来说,就是 FlexSPI 模块的驱动。

中间是 Adapter 层:主要用于适配底层 Driver,不同 MCU 其 Driver 接口函数可能不同,因此会在这一层做到接口统一。

最顶层是 API 层:纯软件逻辑设计来实现文件数据存储,提供了四个非常简易的 API。

二、设计

2.1 API 定义

kFlashFile 是一个文件数据存储的设计,file_read()、file_save()是两个必备的 API,此外也提供业界通用 API 接口 file_init()、file_deinit()。

kflash_file_init(): 用于初次分配 Flash 空间来存储文件数据,并且指定文件长度。如果当前指定的 Flash 空间里存在有效文件数据,那么继续复用。kflash_file_read(): 用于获取当前有效存储的文件数据,文件数据可以部分读取。

kflash_file_save(): 用于实时写入最新的文件数据,文件数据可以部分更新。

kflash_file_deinit(): 用于清除当前分配的 Flash 空间里的文件数据,以便下次重新分配。

2.2 空间分配

kFlashFile 将分配的 Flash 空间分成两个部分,前面是文件数据区(Data Sectors),后面是文件头区(Header Sectors)。

文件数据区:从区内起始地址开始按序存放一份份文件数据,只要文件数据出现无法覆盖的更新(即 Flash 无法改写的特性),便会在下一个新地址重新存储。如果数据区满了,便擦除区内起始地址处的历史文件数据,继续循环存储。