文件系统FATFS学习笔记一

在不使用文件系统的时候,我们操作SPI Flash 芯片W25QXX系列。一般需要两个函数:读函数和写函数。

例如:需要记录:欢迎关注redeemer奇。
首先把这些文字转化成 ASCII 码,存储在数组中,然后调用 W25QXX_Write 函数,把数组内容写入到 SPI Flash 芯片的指定地址上,在需要的时候从该地址把数据读取出来,再对读出来的数据以 ASCII 码的格式进行解读。

但是,这样直接存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何种格式来解读数据。如果想存放图片、视频,就更加复杂。

因此就引入了文件系统。

1、文件系统简介

1.1、文件系统原理

文件系统的实质是一种高效的管理方式。它是为了存储和管理数据,而在存储介质建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。

在使用文件系统前,要先对存储介质进行格式化。格式化先擦除原来内容,在存储介质上新建一个文件分配表和目录。这样,文件系统就可以记录数据存放的物理地址,剩余空间。

使用文件系统时, 数据都以文件的形式存储。写入新文件时,先在目录中创建一个文件索引,它指示了文件存放的物理地址,再把数据存储到该地址中。当需要读取数据时,可以从目录中找到该文件的索引,进而在相应的地址中读取出数据。具体还涉及到逻辑地址、簇大小、不连续存储等一系列辅助结构或处理过程。

文件系统的存在使我们在存取数据时,不再是简单地向某物理地址直接读写,而是要遵循它的读写格式。如经过逻辑转换,一个完整的文件可能被分开成多段存储到不连续的物理地址,使用目录或链表的方式来获知下一段的位置。

1.2、文件系统的种类

  1. 常见的 windows 下的文件系统格式包括 FAT32、 NTFS、 exFAT。
  2. 另一种FatFs 是面向小型嵌入式系统的一种通用的FAT 文件系统。它完全是由 AISI C 语言编 写并且完全独立于底层的 I/O 介质。因此它可以很容易地不加修改地移植到其他的处理器当中,如 8051、 PIC、 AVR、 SH、 Z80、 H8、 ARM 等。 FatFs 支持 FAT12、 FAT16、FAT32 等格式,

FatFs 文件系统的源码可以从FatFs官网下载:http://elm-chan.org/fsw/ff/00index_e.html

2、FatFs的结构

2.1、FatFs层次结构

FatFs层次结构

  1. 应用层。使用者无需理会 FATFS 的内部结构和复杂的 FAT 协议,只需要调用 FATFS 模块提供给用户的一系列应用接口函数,如 f_open, f_read, f_write 和 f_close 等,就可 以像在 PC上读/写文件那样简单。
  2. 中间层 FATFS 模块。 实现了 FAT 文件读/写协议。 FATFS 模块提供的是 ff.c 和ff.h。除非 有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。
  3. 需要我们编写移植代码的是 FATFS模块提供的底层接口,它包括存储媒介读/写接口(disk I/O) 和供给文件创建修改时间的实时时钟。

2.2、FatFs源文件的目录结构

  1. 从官网下载FatFs源文件
    下载源文件
    笔者下载的版本是R0.14。
  2. 打开文件夹
    目录结构

(1)、documents 文件夹里面是一些使用帮助文档;
(2)、source 才是 FatFs 文件系统的源码。
(3)、LICENSE里面是一些说明。我也没仔细看具体内容。

  1. 打开documents文件
    documents
    (1)、doc:里面是各个函数的用法;
    (2)、res:里面是一些图片和示例;
    (3)、00index_e.html:点击进去就可以进入官网;
    (4)、css_e.css:我也没搞懂具体干吗的。不需要考虑。
  2. 打开source文件
    source

这一版本里面没有option 文件夹、integer.h文件。是由于将两个文件里面的内容优化到ffsystem.c和ffunicode.c里面了。

diskio.c 文件是 FatFs 移植最关键的文件,它为文件系统提供了最底层的访问 SPI Flash芯片的方法, FatFs 有且仅有它需要用到与 SPI Flash 芯片相关的函数。 diskio.h 定义了FatFs 用到的宏,以及 diskio.c 文件内与底层硬件接口相关的函数声明。

  • 00history.txt :介绍了 FatFs 的版本更新情况。
  • 00readme.txt :说明了当前目录下 diskio.c 、 diskio.h、 ff.c、 ff.h、 ffconf.h、 ffsystem.c、ffunicode.c的功能
  • diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
  • ff.c: FatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。
  • ffconf.h:主要是关于FatFs的配置宏定义
  • ffsystem.c:可选的O / S相关功能的示例
  • ffunicode.c:是简体中文支持所需要添加的文件,包含了简体中文的 GBK 和 Unicode 相互转换功能函数。

若仅为使用文件系统,则只需要理解 ffconf.h 及 diskio.c 文件并会调用ff.c 文件中的函数就可以了。
阅读文件系统源码 ff.c 文件需要一定的功底,建议读者先阅读 FAT32 的文件格式,再去分析 ff.c 文件。

2.3、FatFs 程序结构

FatFs 程序结构网如下图:
FatFs 程序结构网

  1. 用户应用程序需要由用户编写,想实现什么功能就编写什么的程序,一般我们只用到 f_mount()、 f_open()、f_write()、 f_read()就可以实现文件的读写操作。
  2. FatFs 组件是 FatFs 的主体,文件都在源码文件夹中,只需要修改 ffconf.h和 diskio.c 两个文件。
  3. 底层设备输入输出要求实现存储设备的读写操作函数、存储设备信息获取函数等等。
  4. 我们使用 SPI Flash 芯片作为物理设备,使用SPI Flash 芯片的驱动程序。

结束

欢迎大家关注我的微信号:redeemer奇
里面惊喜,有大量的学习资料持续更新。各种开源项目!
一起交流!一起努力!

软件下载 | 学习视频 | 嵌入式书籍 | 项目资料 |公众号中持续更新…

redeemer奇

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redeemer奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值