zoukankan      html  css  js  c++  java
  • 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 设备

    本文出自T-大帅的博客,转载必须注明出处。 https://www.cnblogs.com/Monarch-T/
  • 相关阅读:
    拓展欧几里得
    使用BIOS进行键盘输入和磁盘读写
    直接定址表
    指令系统总结
    端口
    内中断
    标志寄存器
    call 和 ret 指令
    编写包含多个功能子程序的中断例程
    字符串的输入
  • 原文地址:https://www.cnblogs.com/Monarch-T/p/12557936.html
Copyright © 2011-2022 走看看