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
}
输出的日志


5.注意事项

6.细节说明
FDB_WRITE_GRAN是一个很重要的参数,如果你没设置对,运行的时候就会报各种错误
#define FDB_WRITE_GRAN 1

对于Flash我们需要知道它的一些基本参数,上面的最小写入就是和FDB_WRITE_GRAN有挂钩
最小写入 = 4字节 —> FDB_WRITE_GRAN = 32bit
最小写入 = 1字节 —> FDB_WRITE_GRAN = 8bit
演示一个错误示例,我使用的是最小写入=4字节的flash,但是设置FDB_WRITE_GRAN = 8bit(1字节)

正确示例:

7954

被折叠的 条评论
为什么被折叠?



