stm32专题十九:FatFs文件系统简介

FatFs文件系统简介:

在上一篇博客中,是使用SPI-FLASH存储整数、小数和字符串等,通过调用SPI_FLASH_BufferWrite函数,把数组内容写入到SPI Flash芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以ASCII码的格式进行解读。

但是,这样直接存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地存放着各种书籍,难以查找所需的文档。对于SPI Flash芯片或者SD卡之类的大容量设备,我们需要一种高效的方式来管理它的存储内容。

这些管理方式即为文件系统,它是为了存储和管理数据,而在存储介质建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。常见的 windows 下的文件系统格式包括 FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化先擦除原来内容,在存储介质上新建一个文件分配表目录。这样,文件系统就可以记录数据存放的物理地址,剩余空间。

目录和文件分配表:

stm32专题十九:FatFs文件系统简介_第1张图片

之前提到,把文件系统格式化后,会把目录存放在磁盘的开头。由上图所示,文件目录中有3条信息,记录了3个文件。每条目录信息又有很多细节,记录了文件的地址、大小、日期时间、权限等。看上去,似乎有目录就足够记录文件信息了,但还不够,继续往下看。

stm32专题十九:FatFs文件系统简介_第2张图片

可以看到,文件目录是记录了文件存储在哪个扇区,而文件分配表记录了这个扇区存储了哪些内容,以及这个内容的下一个部分的位置。那么现在就可以知道,读取文件的流程如下(以读取B.txt为例):

1 从文件目录中找到B.TXT开始的扇区(12);

2 当读取完第12个扇区后,从文件分配表中知道,接下来要读取12扇区的内容,依次...,当读完65扇区后,发现下一个指向FF,此时文件B.TXT全部读取完成;

接下来看删除文件对文件分配表的影响:

stm32专题十九:FatFs文件系统简介_第3张图片

由于新创建的D文件比较大,所以会占据原C文件的全部存储空间,然后在C文件的结尾还会占据一部分空间。那么此时,单凭文件目录已经无法知道D文件的具体存储细节了,因为D文件此时不是连续存储,来看此时文件目录的变化:

stm32专题十九:FatFs文件系统简介_第4张图片

文件分配表在此时就能发挥作用,如下图所示:

stm32专题十九:FatFs文件系统简介_第5张图片

最后一个问题,以什么形式来解读文件。在windows操作系统中,就是以后缀名来区分。如.txt以记事本打开(解读),.mp3以音乐播放器打开(解读)。

你可能感兴趣的:(stm32专栏)