RTthread的FAL组件介绍

RTthread的FAL组件介绍


文章目录

  • RTthread的FAL组件介绍
  • 前言
  • 一、FAL组件下载安装及配置
  • 二、FAL组件使用
    • 1.分区介绍
    • 2.数据处理函数
        • 向分区写入数据
        • 从分区读取数据
        • 擦除分区数据
        • 擦除整个分区数据
        • 查找 Flash 分区
  • 总结


前言

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


废话不多说,开始!

一、FAL组件下载安装及配置

打开rt-thread setting 文件,左上角添加软件包,搜索fal,可以找到fal组件,版本号v1.0.0:

RTthread的FAL组件介绍_第1张图片

保持原始配置即可:

RTthread的FAL组件介绍_第2张图片

点击退出即可完成自动安装,编译,结果如下:

RTthread的FAL组件介绍_第3张图片

二、FAL组件使用

1.分区介绍

分区路径packages\fal-v1.0.0\samples\porting\fal_cfg.h。

代码如下(示例):

#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 */

这里解释一下:以 {FAL_PART_MAGIC_WORD, “app”, “stm32_onchip”, 641024, 7041024, 0}这一行数据为例:
FAL_PART_MAGIC_WORD :是默认的数据,不用理它;
“app” :是我们建立的分区名称;
“stm32_onchip” :是指片内FLASH还是片外FLASH,这里是片内
641024 : 代表所分配空间的起始地址;也就是前64k空间分配给了"bl",“app” 所用空间大小由641024开始,共计704*1024 大小;
最后的 0 :Flash 的操作函数,如果没有 init 初始化过程,第一个操作函数位置可以置空。

当然,这些是程序默认配置,我们需要根据不同的需要去修改占用空间的大小,若是想增加删除分区,按照程序中相同的格式去更改就可以了,修改时注意各分区的大小及起始地址不要发生冲突。

修改后正常输出如下:

RTthread的FAL组件介绍_第4张图片
好,完成分区。

2.数据处理函数

fal数据处理即为对flash进行相应操作,包含数据擦除、读取及写入。

向分区写入数据
int fal_partition_write(const struct fal_partition *part, uint32_t addr, const uint8_t *buf, size_t size)
参数 描述
part 分区对象
addr 相对分区的偏移地址
buf 存放待写入数据的缓冲区
size 待写入数据的大小
return 返回实际写入的数据大小

从分区读取数据
int fal_partition_read(const struct fal_partition *part, uint32_t addr, uint8_t *buf, size_t size)
参数 描述
part 分区对象
addr 相对分区的偏移地址
buf 存放待读取数据的缓冲区
size 待读取数据的大小
return 返回实际读取的数据大小
擦除分区数据
int fal_partition_erase(const struct fal_partition *part, uint32_t addr, size_t size)
参数 描述
part 分区对象
addr 相对分区的偏移地址
size 擦除区域的大小
return 返回实际擦除的区域大小
擦除整个分区数据
int fal_partition_erase_all(const struct fal_partition *part)
参数 描述
part 分区对象
return 返回实际擦除的区域大小
查找 Flash 分区
const struct fal_partition *fal_partition_find(const char *name)
参数 描述
name Flash 分区名称
return 如果查找成功,将返回 Flash 分区对象,查找失败返回 NULL

总结

本文介绍fal分区的创建及相关api函数的介绍,后面会着重讲述fal组件的应用。

你可能感兴趣的:(RTThread,单片机,stm32,iot,嵌入式硬件,arm)