【RT-Thread FAL组件】(Flash abstraction layer)Flash抽象层源码解读

RT-Thread FAL组件(Flash abstraction layer)

分区表一般在 fal_cfg.h 中定义(默认开启配置宏)

FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API (框架图如下所示),并具有以下特性:

支持静态可配置的分区表,并可关联多个Flash设备;

支持分区表的自动装载,可以避免多固件项目中,分区表被多次定义的问题;

代码精简,不依赖操作系统;

提供统一的操作接口,保证文件系统等对Flash有一定依赖型的组件对底层Flash驱动可重用性。
在这里插入图片描述

· 使用 fal package 需要在 RT-Thread 的包管理器中选择它

使用FAL的基本步骤:

  1. 打开FAL:从Env中打开fal软件包并下载到工程

  2. FAL移植:定义flash设备、定义flash设备表、定义flash分区表

    定义flash设备表之前需要flash设备

    flash设备可以有片内flash、片外flash

    /* ===================== 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,                                                     \
    }
    

    然后定义flash分区表

    #define NOR_FLASH_DEV_NAME             "norflash0"
    /* ====================== 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 */
    
  3. 调用fal_init初始化该库,移植完成后在应用层调用。
    在这里插入图片描述

· FAL API

在这里插入图片描述

· 源码实现细节

FAL目录
名称说明
inc头文件目录
src源文件目录
samples例程目录
  • /inc/fal_def.h 对象的结构体定义
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • /inc/fal.h

​ 该头文件下声明了与fal相关的初始化函数,操作分区的相关函数声明、不同类型的设备创建函数声明。
在这里插入图片描述
/src/fal.c

该源文件实现了fal_init()的函数定义,该函数完成所有的flash设备和flash分区的初始化。函数内部调用在其他源文件中定义的初始化函数。
在这里插入图片描述
fal_flash_init();
在这里插入图片描述
flash_partition_init()
在这里插入图片描述

  • /fal_rtt.c

​ 创建了相关结构体抽象,字符设备、块设备、mtd设备

/* ========================== block device ======================== */
struct fal_blk_device
{
    struct rt_device                parent;
    struct rt_device_blk_geometry   geometry;
    const struct fal_partition     *fal_part;
};

struct fal_mtd_nor_device
{
    struct rt_mtd_nor_device       parent;
    const struct fal_partition     *fal_part;
};

/* ========================== char device ======================== */
struct fal_char_device
{
    struct rt_device                parent;
    const struct fal_partition     *fal_part;
};

然后是对应的相应的ops实现,fal_rtt.c的函数框架如下:
在这里插入图片描述
最后有一个重要的函数
在这里插入图片描述
该函数实现了相关能够在控制台进行调试的相关函数实现,最后使用

MSH_CMD_EXPORT(fal, FAL (Flash Abstraction Layer) operate.);

将函数进行命令宏导出。

挂载Littlefs文件系统

ARM 官方推出的,专为嵌入式系统设计的文件系统,相比传统的文件系统,littlefs 具有以下优点:

  • 自带擦写均衡
  • 支持掉电保护
  • 占用的 RAM/ROM 少

在 RT-Thread 上运行的层级关系图:

在这里插入图片描述

应用littlefs文件系统的主要移植流程
  1. 使能DFS框架
  2. 配置littlefs
  3. 使能MTD设备
  4. 配置fal
  5. 使能外置FLASH
  6. 检查分区表
  7. 创建MTD设备并挂载文件系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值