中文 | English
FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API (框架图如下所示),并具有以下特性:
本示例中将使用 EtherKit 板载 GD Flash 结合 RT-Thread FAL 组件,使用 littlefs 构建文件系统。
本例程的文件系统初始化源码位于 ../board/ports/filesystem/drv_filesystem.c 中:
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-02-07 newflydd@gmail.com the first version
*/
#define DBG_TAG "drv.fs"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <rtthread.h>
#include <fal.h>
#include <dfs_fs.h>
int initFileSystem()
{
fal_init();
// register onchip flash tail area as littlefs
struct rt_device* flashDev = fal_mtd_nor_device_create("param");
if (RT_NULL == flashDev)
{
LOG_W("create fal device failed");
return RT_ERROR;
}
if (RT_EOK != dfs_mount("param", "/", "lfs", 0, RT_NULL))
{
LOG_W("mount lfs failed once, try to format it");
if (RT_EOK != dfs_mkfs("lfs", "param"))
{
LOG_W("mkfs lfs failed");
return RT_ERROR;
}
LOG_I("mkfs lfs success");
if (RT_EOK != dfs_mount("param", "/", "lfs", 0, RT_NULL))
{
LOG_W("mount lfs failed");
return RT_ERROR;
}
}
LOG_I("mount lfs success");
return RT_EOK;
}
INIT_ENV_EXPORT(initFileSystem);
RT-Thread Studio:在RT-Thread Studio 的包管理器中下载EtherKit 资源包,然后创建新工程,执行编译。
IAR:首先双击mklinks.bat,生成rt-thread 与libraries 文件夹链接;再使用Env 生成IAR 工程;最后双击project.eww打开IAR工程,执行编译。
编译完成后,将开发板的Jlink接口与PC 机连接,然后将固件下载至开发板。
按下复位按键重启开发板,观察开发板终端日志。
执行以下指令开始 FAL 读写测试:
> fal probe param param
> fal bench 4096 yes