FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API ,FAL 框架图如下:
从上图可以看出FAL抽象层位于SFUD框架的上层,可以将多个Flash硬件(包括片内Flash和片外Flash)统一进行管理,并向上层比如OTA层提供对底层多个Flash硬件的统一访问接口,方便上层应用对底层硬件的访问操作。我上篇文章介绍的FOTA就是在FAL层之上做的,理解了这篇文章,FOTA的底层就理解了。参考文章:STM32通用Bootloader——FOTA
2.1 主要特点:
- 支持静态可配置的分区表,并可关联多个 Flash 设备;
- 分区表支持 自动装载 。避免在多固件项目,分区表被多次定义的问题;
- 代码精简,对操作系统 无依赖 ,可运行于裸机平台,比如对资源有一定要求的 Bootloader;
- 统一的操作接口。保证了文件系统、OTA、NVM(例如:EasyFlash) 等对 Flash 有一定依赖的组件,底层 Flash 驱动的可重用性;
- 自带基于 Finsh/MSH 的测试命令,可以通过 Shell 按字节寻址的方式操作(读写擦) Flash 或分区,方便开发者进行调试、测试;
-
2.2 如何移植:
项目地址:https://github.com/RT-Thread-packages/fal -
下载内容
对于使用rtthread完整版来说,对于使用者只需要勾选就可以了:
对于rtthread完整版的来说移植很简单,所以本次移植教程还是以rtthread nano为例,在上个移植完SFUD工程的基础上,继续移植FAL。2.2.1 下载FAL项目源码,并添加到工程目录中;
-
移植
fal的移植是建立在SFUD的底层驱动上的,所以如果没还没移植好SFUD,看上一篇文章一样先下源码。
-
Gitee仓库:RT-Thread-Mirror/fal - Gitee.comhttps://gitee.com/RT-Thread-Mirror/fal/tree/master
fal_cfg.h文件
-
导FAL软件包的目录如下,其中samples文件夹下为移植接口文件:
-
其中
fal_cfg.h
为fal 配置文件(Flash 设备配置和分区表配置) : -
-
入工程之后是这样样子的
-
在定义 Flash 设备表前,需要先定义 Flash 设备。可以是片内 flash, 也可以是片外基于 SFUD 的 spi flash:
定义片内 flash 设备可以参考 fal_flash_stm32f2_port.c 。
定义片外 spi flash 设备可以参考 fal_flash_sfud_port.c 。注意一下,因为我使用的是SPI-FLASH所以使用fal_flash_sfud_port.c这个.C文件,如果是片内flash请选其他啊,不过一般这个用的多吧
-
注意一下,因为我使用的是SPI-FLASH所以使用fal_flash_sfud_port.c这个.C文件,如果是片内flash请选其他啊,不过一般这个用的多吧 -
跟着套路先改fal_cfg.h文件
-
没有修改前 在fal.cfg.h 报错
-
还有一点需要注意 由于本文没有使用RT-THREAD 操作系统 所以需要将
-
"rtconfig.h"和
-
fal_cfg.h文件
-
FAL API说明文档 链接:
-
FAL API