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();
...
...
}
- 最后看一下效果:

PS:更正上面的一個錯判,需要把 {FAL_PART_MAGIC_WORD, "bl", "onchip_flash_32k", 0, 64*1024, 0}, 中onchip_flash_32k位置的名字改成和on_chip支持函數的中的命名一樣 否則就會報錯,顯示找不到flash 設備
