基于STM32F407内部Flash的FATfs文件系统移植

时间:2024-04-02 16:39:50

STM32F407单片机内部flash空间比较小,所以内部flash的数据组织形式为FAT12格式;

移植过程需要用到的知识为 FATFS文件系统源码包,FAT12文件格式。这两方面具体知识,自行百度,这里不再介绍。

切入正题,进行具体的文件系统移植。

 

一、修改ffconf.h文件

基于STM32F407内部Flash的FATfs文件系统移植

 

二、修改diskio.c文件

(1)、disk_status函数,返回磁盘状态,直接返回0;

基于STM32F407内部Flash的FATfs文件系统移植

(2)、disk_initialize函数,初始化磁盘,直接返回0

基于STM32F407内部Flash的FATfs文件系统移植

(3)、disk_read函数,读磁盘扇区数据

基于STM32F407内部Flash的FATfs文件系统移植

(4)、disk_write函数,将数据写入磁盘扇区

基于STM32F407内部Flash的FATfs文件系统移植

(5)、disk_ioctl函数,控制磁盘指定特性函数

基于STM32F407内部Flash的FATfs文件系统移植

 

三、Flash格式化成FAT12格式

该部分需要注意的是,FAT12格式化的数据内容必须正确,否则会导致Flash磁盘挂载不上。(这部分圈起来划重点啦,网上找不到第二例这么详细的,哈哈。。。)

(1)按照FAT12文件格式定义一个FAT12数据结构体;

基于STM32F407内部Flash的FATfs文件系统移植

(2)将结构体数据变量进行初始化,并且写入0x08060000地址,也就是stm32F407 Flash中第7个扇区,文件系统大小为100KB;

基于STM32F407内部Flash的FATfs文件系统移植

 

四、文件系统操作测试

 

基于STM32F407内部Flash的FATfs文件系统移植

基于STM32F407内部Flash的FATfs文件系统移植

                               

测试结果:

(1)、引导扇区(0x08060000)

基于STM32F407内部Flash的FATfs文件系统移植

(2)、FAT1表(0x08060200)

基于STM32F407内部Flash的FATfs文件系统移植

 

(3)、FAT2表(0x08061400)

基于STM32F407内部Flash的FATfs文件系统移植

 

(4)、根目录(0x08062600)

基于STM32F407内部Flash的FATfs文件系统移植

基于STM32F407内部Flash的FATfs文件系统移植

 

(5)、数据区(0x08064200)

基于STM32F407内部Flash的FATfs文件系统移植

基于STM32F407内部Flash的FATfs文件系统移植

 

至此,文件系统移植完毕。(为了省时间直接从word文档拷贝过来的,没排版好,各位见谅!)