当前位置: 代码迷 >> 综合 >> FatFs(通用FAT文件系统模块)下载与介绍
  详细解决方案

FatFs(通用FAT文件系统模块)下载与介绍

热度:38   发布时间:2023-12-15 18:52:26.0

1.FatFs(通用FAT文件系统模块)下载与介绍
2.FatFs移植——基于STM32 SD卡
3.FatFs学习(1)——枚举:返回值FRESULT

注:本文基于R0.14版本,给出的源码、翻译以及分析不保证与其他版本适合。

FatFs下载与介绍

  • FatFs——通用FAT文件系统模块
    • 1 . 特征
    • 2. 层级结构
    • 3. 源码下载地址
    • 4. 源码文件结构
      • 4.1 documents文件夹
        • 4.1.1 documents/doc/
        • 4.1.2 documents/res/
      • 4.2 source文件夹
        • 4.2.1 底层source/diskio.csource/diskio.h
        • 4.2.2 应用接口source/ff.csource/ff.h
        • 4.2.3 宏配置source/ffconf.h
        • 4.2.4 操作系统相关source/ffsystem.c
        • 4.2.5 unicode编码source/ffunicode.c
    • 5. FatFs补丁

FatFs——通用FAT文件系统模块

??FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I/O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。
??“FatFs模块是为教育,研究和开发开放的免费软件。您可以在个人项目或商业产品中使用,修改和/或重新分发它,而不受您的责任限制。”

1 . 特征

  • DOS / Windows兼容的FAT / exFAT文件系统。
  • 平台无关。易于移植。
  • 程序代码和工作区的占用空间非常小。
  • 支持以下各种配置选项:
    • ANSI / OEM或Unicode中的长文件名。
    • exFAT文件系统,64位LBA和GPT可存储大量数据。
    • RTOS的线程安全。
    • 多个卷(物理驱动器和分区,最多10个卷)。
    • 可变扇区大小。
    • 多个代码页,包括DBCS。
    • 只读,可选API,I / O缓冲区等…

2. 层级结构

FatFs层级结构如下:
FatFs层级结构
??(1)应用层调用FatFs模块接口,FatFs调用底层接口,实现对USB、SD卡等存储设备的操作。
??(2)需提供RTC时钟给FatFs模块。

3. 源码下载地址

??FatFs官方下载地址:http://elm-chan.org/fsw/ff/archives.html

??在该页中有FatFs和Petit FatFs。
???Petit FatFs是用于小型8位微控制器的FatFs模块的子集。它是按照ANSI C编写的,并且与磁盘I/O层完全分开。即使RAM大小小于扇区大小,也可以将其合并到内存有限的微型微控制器中。
??简单来说,Petit FatFs属于FatFs的阉割版,功能比较简单,占用资源小。我们这里选择完整版的FatFs。
??页面中有至今为止已发布的版本及其发布时间,可以下载任一版本,目前最新版本为0.14(本文同样基于0.14),点击版本即可下载。

FatFs Archives

4. 源码文件结构

??压缩包下载后解压,有两个文件夹(/documents/source)和一个txt文件(LICENSE.txt)。
??/documents是关于FatFs的一些资料,/source文件夹下是FatFs的源码,LICENSE.txt则是FatFs的许可证书。

FatFs结构1

4.1 documents文件夹

FatFs documents
??00index_e.html相当于FatFs的主页。
??updates.txt记录了各个版本的更新。

4.1.1 documents/doc/

??doc文件夹存放了html格式的说明文档,里面有函数的解释。

FatFs documents/doc/

4.1.2 documents/res/

??res文件夹提供一些应用示例(app1~6.c)、原理示意图以及格式化对照表(mkfs.xlsx
FatFs documents/res/

4.2 source文件夹

??source文件夹是FatFs的源码。
??FatFs源码不多,只有4个C文件和3个H文件(0.14版本)。
FatFs source

4.2.1 底层source/diskio.csource/diskio.h

??diskio是FatFs的IO层实现,官方提供了框架,移植时只需要完善其中的一些函数即可,十分友好。

函数 作用
disk_initialize 初始化驱动
disk_status 获取驱动状态
disk_initialize 初始化驱动
disk_read 读扇区
disk_write 写扇区
disk_ioctl 用于实现各种各样的功能

4.2.2 应用接口source/ff.csource/ff.h

??ff.c/ff.h是应用接口的实现,属于FatFs源码,移植无需修改。应用时只需要调用其中函数即可。
??常用的文件的开/关(f_open/f_close)、读/写(f_read/f_write) 以及目录的相关操作接口都在这里。由于函数较多,这里不深入研究。

4.2.3 宏配置source/ffconf.h

??ffconf.h内是关于FatFs的配置选项。这个文件增加了可移植性。我们可以通过配置相关选项使能/禁止某些功能,控制内存资源的消耗。这些宏的解释,后期通过其他文章说明。

4.2.4 操作系统相关source/ffsystem.c

??ffsystem.c是FatFs的OS相关函数示例代码。如果你移植在操作系统上,且配置FF_USE_LFN==3FF_FS_REENTRANT为真,那么就需要将该文件添加到工程内。
??该文件内函数已预置了部分操作系统的样例,包括Win32uITRONuC/OS-IIFreeRTOSCMSIS-RTOS,基本上在函数内只需要选择其中一种,友好到爆。下面是其中一个函数:

/*------------------------------------------------------------------------*/
/* Release Grant to Access the Volume */
/*------------------------------------------------------------------------*/
/* This function is called on leaving file functions to unlock the volume. */void ff_rel_grant (FF_SYNC_t sobj	/* Sync object to be signaled */
)
{
    /* Win32 */ReleaseMutex(sobj);/* uITRON */
// sig_sem(sobj);/* uC/OS-II */
// OSMutexPost(sobj);/* FreeRTOS */
// xSemaphoreGive(sobj);/* CMSIS-RTOS */
// osMutexRelease(sobj);
}

??FF_USE_LFN==3:启用 LFN,且使用堆上的动态工作缓冲区。
??FF_FS_REENTRANT为真:启用重写入。

4.2.5 unicode编码source/ffunicode.c

??ffsystem.c用于unicode编码,里面有大量的unicode相关数组。
??FF_USE_LFN为真时必须包含此文件。
??当将FatFs用 DBCS 配置 LFN 时,这个模块将在.const部分占用大量内存。如果系统使用Unicode进行代码转换,则应该修改此模块以使用该函数,以避免无谓的内存消耗。

??DBCS包含:
????932 - Japanese (DBCS) 、
????936 - Simplified Chinese (DBCS)、
????949 - Korean (DBCS)、
????950 - Traditional Chinese (DBCS)

5. FatFs补丁

??FatFs补丁网址:http://elm-chan.org/fsw/ff/patches.html
??网址上会公布已发现并解决的BUG,以补丁形式发布。以R0.14版本为例,该版本有三个补丁。因此,下载FatFs R0.14源码后,使用前按日期顺序给源码打补丁。(从最早发布的开始)

FatFs 补丁


??以上是本文的全部,很荣幸写的文章被阅读完。
??刚入门的小白,如果本文有错欢迎大家提醒,十分感谢。