STM32 Fatfs文件系统移植

时间:2024-03-18 14:12:04

@[fatfs32]

记一次fatfs文件系统移植问题

(1)问题描述:
由于在SD卡读写实验时,将SD卡第0个扇区写入内容并清除扇区,导致SD卡中的Fatfs信息丢失。用读卡器在电脑上用WINHEX格式化工具,将SD卡重新格式化为Fat32格式,但是在STM32上还是无法读取到正确的簇数和卡容量,也无法获取文件目录。
(2)解决途径:
从网上查得使用winhex工具查看SD卡分区情况,顺便修复了SD卡分区。
通过WINHEX重新查看了SD卡物理磁盘存储情况,如图所示:选择tool栏中的打开磁盘,不要选上面的逻辑分区,看下面物理存储设备中:第1个是电脑磁盘,第二个就是SD卡了。
STM32 Fatfs文件系统移植
打开SD卡之后,如图所示:
STM32 Fatfs文件系统移植

一共有三个部分:1.开始扇区;2.fat32分区;3.未分区区域。在1st sector一栏可以看到,开始扇区的第一个扇区数是0,FAT32分区的第一个扇区数是2048(这就是问题的关键了)。
通过在STM32上对移植的FATFS文件系统代码的分析,如图所示:
STM32 Fatfs文件系统移植

Bsect这个参数代表了FAT32文件系统在SD卡中的起始扇区,被注释掉的值是原始值,通过check_fs()函数后面的注释可以看出,这是对FAT32文件系统进行确认。若是bsect=0的话,在0扇区的位置不是FAT32的起始位置,所以一直无法正确读取文件目录和文件簇数。把bsect = 2048后,问题迎刃而解,可惜自己没在STM32上做一个文件系统界面,没法上图。。。。有需要代码的请留言。