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或分区,方便开发者进行调试、测试;
- 第一步很重要 因为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();
...
...
}
- 最后看一下效果:
原文地址:https://www.cnblogs.com/Monarch-T/p/12557936.html
- python接口自动化4-绕过验证码登录(cookie)
- 洛谷P1313 计算系数【快速幂+dp】
- python接口自动化5-Json数据处理
- Numpy教程第1部分 - 阵列简介(常用基础操作总结)
- Session和Cookies的基本原理
- 浅析Numpy.genfromtxt及File I/O讲解
- 损失函数详解
- 排查Java的内存问题
- 使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API
- 设计模式六大原则(5):迪米特法则
- Selenium2+python自动化61-Chrome浏览器(chromedriver)
- 区块链可以减少社会不平等吗?
- 【干货】不止准确率:为分类任务选择正确的机器学习度量指标(附代码实现)
- python爬虫beautifulsoup4系列1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法