FlashDB文件系统支持片上存储、外部存储器、操作系统文件系统接口。
FlashDB文件系统支持的底层接口有:FAL、C语言标准文件操作接口、POSIX 标准文件接口。
FlashDB 主要适用于少量数据存储的应用场景
在MCU的移植过程中主要使用FAL作为底层接口。
FAL 的作用是实现存储系统分区管理,可以对指定分区进行读写访问操作。
FAL 可以同时支持多个类型的存储器:片上FLASH、外部Nor Flash、等其他类型的存储器。
FAL移植步骤:
1.定义Flash Device 的参数类型,实现FLASH 初始化、读、写、擦除接口:
const struct fal_flash_dev stm32_onchip_flash =
{
.name = "stm32_onchip", //设备名
.addr = 0x08000000, //存储器的起始地址
.len = 256*1024, //存储器的大小
.blk_size = 2*1024, //最小的可擦除页的尺寸
.ops = {init, read, write, erase}, //flash 驱动接口
.write_gran = 32 //最小的允许的写入粒度
};
2. 在fal_cfg.h文件中定义 存储设备表 与存储分区表:
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtconfig.h>
#include <board.h>
#define NOR_FLASH_DEV_NAME "norflash0"
/* ===================== Flash device Configuration ========================= */
extern const struct fal_flash_dev stm32f2_onchip_flash;
extern struct fal_flash_dev nor_flash0;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&stm32f2_onchip_flash, \
&nor_flash0, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "bl", "stm32_onchip", 0, 64*1024, 0}, \
{FAL_PART_MAGIC_WORD, "app", "stm32_onchip", 64*1024, 704*1024, 0}, \
{FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME, 0, 1024*1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", NOR_FLASH_DEV_NAME, 1024*1024, 1024*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */
3.另外对于SPI Flash 可以使用SFUD(spi flash 万能驱动)
支持两种类型的数据库:
字符串可以直接进行存储。
其他类型的数据可以用blob(标记数据、数据长度)数据块进行存储。
可以存储时间戳的数据信息,并可以按照时间戳的顺序输出数据结果。
定义FlashDB 配置文件
#ifndef _FDB_CFG_H_
#define _FDB_CFG_H_
/* using KVDB feature */
#define FDB_USING_KVDB
#ifdef FDB_USING_KVDB
/* Auto update KV to latest default when current KVDB version number is changed. @see fdb_kvdb.ver_num */
/* #define FDB_KV_AUTO_UPDATE */
#endif
/* using TSDB (Time series database) feature */
#define FDB_USING_TSDB
/* Using FAL storage mode */
#define FDB_USING_FAL_MODE
/* the flash write granularity, unit: bit
* only support 1(nor flash)/ 8(stm32f2/f4)/ 32(stm32f1) */
#define FDB_WRITE_GRAN 32
/* MCU Endian Configuration, default is Little Endian Order. */
/* #define FDB_BIG_ENDIAN */
/* log print macro. default EF_PRINT macro is printf() */
/* #define FDB_PRINT(...) my_printf(__VA_ARGS__) */
/* print debug information */
#define FDB_DEBUG_ENABLE
#endif /* _FDB_CFG_H_ */