FATFS 文件系统

FATFS 文件系统

一.    概念

1.    定义

负责 管理 和 存储 文件信息 的 软件机构 ,叫做文件管理系统。

2.    使用场景:

FatFs是用于小型嵌入式系统的通用FAT / exFAT文件系统模块。FatFs模块是按照ANSI C(C89)编写的,并且与磁盘I / O层完全分开。因此,它独立于平台。它可以并入资源有限的小型微控制器中,例如8051,PIC,AVR,ARM,Z80,RX等。此处还提供了适用于小型微控制器的Petit FatFs模块。

3.    特点:

    DOS / Windows兼容的FAT / exFAT文件系统。

    平台无关。易于移植。

    程序代码和工作区的占用空间非常小。

    支持以下各种配置选项:

    ANSI / OEM或Unicode中的长文件名。

    exFAT文件系统,64位LBA和GPT可存储大量数据。

    RTOS的线程安全。

    多个卷(物理驱动器和分区)。

    可变扇区大小。

    多个代码页,包括DBCS。

    只读,可选API,I / O缓冲区等...

二.    分类:

-NTFS: 基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构

-CDFS:CDFS是大部分的光盘的文件系统

三.    FATFS 模块层次结构:

     

1.    底层接口

包括存储媒介读/写接口(disk I/O)和供给文件创建修改时间的实时时钟,需要我们根据平台和存储介质编写移植代码。

2.    中间层FATFS模块

实现了FAT 文件读/写协议。FATFS模块提供的是ff.c和ff.h。除非有必要,使用者一般不用修改,使用时将头文件直接包含进去即可。

3.    最顶层是应用层

使用者无需理会FATFS的内部结构和复杂的FAT 协议,只需要调用FATFS模块提供给用户的一系列应用接口函数,如f_open,f_read,f_write 和f_close等,就可以像在PC 上读/写文件那样简单。

四.    下载地址:

http://elm-chan.org/fsw/ff/00index_e.html

此地址不仅仅包含资料包下载,还包括文件系统一些知 识,包括函数说明,函数调用实例等。

五.    FATFS 文件系统文件介绍

1.    FatFs 文件系统包结构

文件名

功能

说明

ffconf.h

FatFs模块的配置文件

需要用户根据需求来配置

ff.h

FatFs和应用程序模块的通用包含文件

不需要修改

ff.c

FatFs模块源码

不需要修改

diskio.h

FatFs和disk I / O模块的公共包含文件

不需要修改

diskio.c

FatFs 和disk I / O 模块接口层文件

与平台相关的代码,需要用户根据存储介质来编写函数。

ffunicode.c

可选的Unicode 相关的转换函数

ffsystem.c

可选的与操作系统对接的各接口相关实现示例

2.    配置文件参数讲解

http://elm-chan.org/fsw/ff/doc/config.html#fs_readonly

六.    应用层函数说明

FatFs为应用程序提供各种文件系统功能,如下所示。

档案存取

f_open-打开/创建文件

f_close-关闭打开的文件

f_read-从文件读取数据

f_write-将数据写入文件

f_lseek-移动读/写指针,扩展大小

f_truncate-截断文件大小

f_sync-刷新缓存的数据

f_forward-将数据转发到流

f_expand-将连续块分配给文件

f_gets-读取字符串

f_putc-写一个字符

f_puts-写一个字符串

f_printf-编写格式化的字符串

f_tell-获取当前的读/写指针

f_eof-测试文件结尾

f_size-获取大小

f_error-测试错误

目录访问

f_opendir-打开目录

f_closedir-关闭打开的目录

f_readdir-读取目录项

f_findfirst-打开目录并读取匹配的第一项

f_findnext-阅读下一个匹配的项目

文件和目录管理

f_stat-检查文件或子目录是否存在

f_unlink-删除文件或子目录

f_rename-重命名/移动文件或子目录

f_chmod-更改文件或子目录的属性

f_utime-更改文件或子目录的时间戳

f_mkdir-创建一个子目录

f_chdir-更改当前目录

f_chdrive-更改当前驱动器

f_getcwd-检索当前目录和驱动器

卷管理和系统配置

f_mount-注册/注销卷的工作区

f_mkfs-在逻辑驱动器上创建FAT卷

f_fdisk-在物理驱动器上创建分区

f_getfree-获取卷上的可用空间

f_getlabel-获取卷标

f_setlabel-设置卷标

f_setcp-设置活动代码页

七.    FATFS 移植步骤

1.    添加源码文件。

根据上面的介绍,其中,ff.c、ff.h、ffconf.h、diskio.c、diskio.h 这六个文件是最基本的,必须要包含在我们的项目中!除此之外,根据自己的配置:

如果需要 FatFs 支持可重入, 则 必须要包含 ffsystem.c, 且必须实现 ffsystem.c 中的 ff_req_grant(), ff_rel_grant(), ff_del_syncobj() 和 ff_cre_syncobj() 这四个函数!

如果需要 FatFs 支持长文件名,则必须要包含 ffunicode.c,如果配置长文件名模式为 3 (FF_USE_LFN == 3),则必须同时包含 ffsystem.c, 且必须实现 ffsystem.c 中的 ff_memalloc() 和 ff_memfree() 这两个函数。

2.    确定好数据类型

在ff.h 里面去定义好数据的类型。这里需要了解你用的编译器的数据类型,并根据编译器定义好数据类型。

3.    配置

通过ffconf.h配置FATFS的相关功能,以满足需要。

4.    Disk驱动函数编写:

打开diskio.c,进行底层驱动编写,一般需要编写6 个接口函数

5.    实现 get_fattime

  如果在 ffconf.h 中配置了 FF_FS_NORTC == 0,则必须自己实现函数 DWORD get_fattime (void); 该函数返回一个 4 字节的时间戳!

  如果在 ffconf.h 中配置了 FF_FS_NORTC == 1,则可省略该函数的实现!

6.    应用层使用

  经过以上步骤之后,就可以在项目中使用 FatFs了。可用的接口全部在于 ff.h 中,其与标准 C 语言中各函数用法基本一致!

发布了105 篇原创文章 · 获赞 30 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/happygrilclh/article/details/102725843