STM32F769I-disc片内flash对接fal框架(基于RT-thread)

STM32F769I-disc flash

目标:完成f769的片内flash驱动,并且对接fal
平台:STM32F769I并运行RT-thread内核

FAL介绍:FAL (Flash Abstraction Layer) Flash 抽象层是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API ,并具有以下特性:
支持静态可配置的分区表,并可关联多个 Flash 设备;

  • 分区表支持,自动装载。避免在多固件项目,分区表被多次定义的问题;
  • 代码精简,对操作系统无依赖,可运行于裸机平台,比如对资源有一定要求的 Bootloader;
  • 统一的操作接口。保证了文件系统、OTA、NVM(例如:EasyFlash)等对Flash有一定依赖的组件,底层 Flash 驱动的可重用性;
  • 自带基于 Finsh/MSH的测试命令,可以通过Shell 按字节寻址的方式操作(读写擦)Flash或分区,方便开发者进行调试、测试;
  1. 第一步很重要 因为FAL需要Flash支持,所以要添加如下代码,到board下的kconfig中
	config BSP_USING_ON_CHIP_FLASH
		bool "Enable ON_CHIP_FLASH"
		default y


2. 在env下输入menuconfig进入配置界面,在 Hardware Drivers Config → On-chip Peripheral Drivers中确认BSP_USING_ON_CHIP_FLASH呗选中了;进入RT-Thread online packages → system packages选中fal: Flash Abstraction Layer implement. Manage flash device and partition.使能RT_thread中的fal框架,使用最新版本,然后保存并推出配置;
3. 此时,工程中多了一个fal-latest的文件夹,这就是fal框架,同时由于fal需要fal_cfg.h配置文件,而配置完以后,不会帮你自动添加,所以我们需要手动加一个;我们可以将/sample/porting目录下的fal_cfg.h文件复制到inc目录下;
4. 在env中使用scons工具编译工程
5. 回到工程,,我们可以发现Drivers中有一个文件drv_flash_fx.c(由于我是f769所以这里是drv_flash_f7.c),这里可以看到对on_chip_flash的支持![]
(https://img2020.cnblogs.com/blog/1544288/202003/1544288-20200324113859291-808772565.jpg)
6. 打开fal_cfg.h文件,我对此稍作修改,只用到了on_chip的部分;标号1和标号2的位置,是我选择上一张图片中的函数替换了原来的stm32f2_onchip_flash这个函数;标号3的位置我把norflash0的两个分区删除了(如果以后有需要的话,可以自己查询芯片手册添加);
7. 最后在main.c中编写

//记得要添加fal的头文件
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <fal.h>
static int fal_test(const char *partiton_name);
int main(void)
{
    fal_init();
    ...
    
    ...
}
  1. 最后看一下效果:

PS:更正上面的一个错判,需要把 {FAL_PART_MAGIC_WORD, "bl", "onchip_flash_32k", 0, 64*1024, 0}, 中onchip_flash_32k位置的名字改成和on_chip支持函数的中的命名一样 否则就会报错,显示找不到flash 设备

posted @ 2020-03-24 11:41  T大帅  阅读(1915)  评论(2编辑  收藏  举报