参考文档(国内):FAL 参考文档
一、概述
FAL (Flash Abstraction Layer) ,即 Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API。
对于 FAL 的依赖来说,对 RT-Thread 无依赖,也可用于裸机。但是,测试命令功能需要依赖 RT-Thread FinSH/MSH。
二、FAL 的使用
对于 FAL 的使用,详细介绍可以查看上面的参考手册,这里只是做一个简单的分析。
使用的开发板是正点原子的潘多拉开发板,所以下面的分析也是以这个开发板的 bsp 源码为基础,仅供参考。
1、 定义 Flash 设备
对于要定义的 Flash 设备。可以是片内 flash, 也可以是片外的 spi flash。
简单来说,就是定义具体的 Flash 设备对象,用户需要根据自己的 Flash 情况分别实现 init、 read、 write、 erase 这些操作函数。
1.1、 片内 Flash
对于 STM32L475 的片内 Flash 驱动,RT-Thread 为我们移植好了源码,只需要打开 “Enable on-chip FLASH” 选项即可。
/* bsp/stm32/libraries/HAL_Drivers/drv_flash/drv_flash_l4.c */
const struct fal_flash_dev stm32_onchip_flash =
{
"onchip_flash", /* Flash 设备的名字 */
STM32_FLASH_START_ADRESS, /* 对 Flash 操作的起始地址:0x08000000 */
STM32_FLASH_SIZE, /* Flash 的总大小:512 KB */
FLASH_PAGE_SIZE, /* Flash 块/扇区大小:2048 */
/* Flash 的操作函数 */
{
NULL, /* init 函数 */
fal_flash_read, /* read 函数 */
fal_flash_write, /* write 函数 */
fal_flash_erase /* erase 函数 */
}
};
/* 这里的分析以 write 函数为例 */
static int fal_flash_write(long offset, const rt_uint8_t *buf, size_t size)
{
/**
* RT-Thread 已经为我们实现了 stm32_flash_write 函数
* 这个函数也是调用了 stm32 HAL 库提供的接口
**/
return stm32_flash_write(