GD32手把手教你移植FlashDB(片外Flash) – 1.FlashDB-sfud移植
GD32手把手教你移植FlashDB(片外Flash) – 2.FlashDB移植
GD32手把手教你移植FlashDB(片外Flash) – 3.FlashDB使用
示例代码: https://gitee.com/ljmRD/GD32F427_FlashDB
2.FlashDB移植
1.移植FlashDB
片外Flash使用的是fal_flash_sfud_port.c
2.开始修改
这时候编译会报一大堆的错误
1.修改fdb_cfg.h
外部Flash 填写 1
#define FDB_WRITE_GRAN 1
2.修改fal_cfg.h
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#define FAL_DEBUG 1
#define FAL_PART_HAS_TABLE_CFG
#define NOR_FLASH_DEV_NAME "norflash0"
extern struct fal_flash_dev nor_flash0;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&nor_flash0, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "KVDB", NOR_FLASH_DEV_NAME, 0, 1024 * 1024, 0}, \
{FAL_PART_MAGIC_WORD, "TSDB", NOR_FLASH_DEV_NAME, 1024 * 1024, 1024 * 1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */
3.fal_flash_sfud_port.c
#define FAL_USING_SFUD_PORT // 1.手动添加
struct fal_flash_dev nor_flash0 =
{
.name = FAL_USING_NOR_FLASH_DEV_NAME, // Flash 设备的名字
.addr = 0, // 对 Flash 操作的起始地址
.len = 16 * 1024 * 1024, // Flash 的总大小(16MB)
.blk_size = 4096, // Flash 块/扇区大小
.ops = {init, read, write, erase}, // Flash 的操作函数。 如果没有 init 初始化过程,第一个操作函数位置可以置空
.write_gran = 1 // 设置写粒度(nor flash: 1 bit/ stm32f4: 8 bit/ stm32f1: 32 bit/ stm32l4: 64 bit)
};
sfud_dev = sfud_get_device(SFUD_W25Q128_DEVICE_INDEX); // 2.修改这里
4.fal_def.h
日志输出(根据自己的需求修改)
到此编译应该是没有报错的了
在main()里面执行
#include "sfud.h"
#include "fal.h"
int main(void)
{
sfud_init(); // 初始化sfud
fal_init(); // 初始化fal
}
输出的日志