FatFS简介

---恢复内容开始---

1.1 简介

  随着信息技术的发展,当今社会的信息量越来越大,以往由单片机构成的系统简单地对
存储媒介按地址、按字节的读/写已经不能满足人们实际应用的需要,于是利用文件系统对
存储媒介进行管理成了今后单片机系统的一个发展方向。目前常用的文件系统主要有微软的
FATl2、FATl6、FAT32、NTFS 以及Linux 系统下的EXT2 和EXT3 等。由于微软Windows
的广泛应用,在当前的消费类电子产品中,用得最多的还是FAT 文件系统,如U 盘、MP3、
MP4 和数码相机等,所以找到一款容易移植和使用、占用硬件资源相对较小而功能又强大
的FAT 开源文件系统,对于单片机系统设计者来说是很重要的。

  FatFs Module 是一种完全免费开源的FAT 文件系统模块,专门为小型的嵌入式系统而
设计。它完全用标准C 语言编写,且完全独立于I/O 层,可以移植到 8051、PIC、AVR、SH、
Z80、H8 和ARM 等系列单片机上且只需做简单的修改。它支持FATl2、FATl6 和FAT32,
支持多个存储媒介,有独立的缓冲区,可以对多个文件进行读/写。

  FatFs Module 有个简化版本Tiny-FatFs,它跟完全版FatFs 不同之处主要有两点:

(1) 占用内存更少,只要1 KB RAM; 

(2) 1 次仅支持 1 个存储介质。

完全版FatFs 和Tiny-FatFs 的用法一样,仅仅是包含不同的头文件,本文主要以完全版
讲解FatFs 的使用。

1.2 特性

(1)Windows 兼容的FAT 文件系统;
(2)平台无关,容易移植;
(3)代码量小;
(4)多种配置选项:
   支持多卷(物理驱动器或分区);
   多个ANSI/OEM 代码页包括DBCS;
   支持长文件名,ANSI/OEM 或Unicode;
   支持RTOS;
   支持多种扇区大小;
   只读、最小化的API 和I/O 缓冲区等。

1.3 应用

FatFs Module 一开始就是为了能在不同的单片机上使用而设计的,所以具有良好的层次
结构,如图 1.1 所示。

技术分享

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

  中间层FatFs Module 实现了FAT 文件读/写协议。FatFs Module 的完全版提供的是ff.c、
ff.h,简化版Tiny-FatFs 提供的是tff.c、tff.h 。除非有必要,使用者一般不用修改,使用时将
需要版本的头文件直接包含进去即可。

  需要使用者编写移植代码的是FatFs Module 提供的底层接口,它包括存储媒介读/写
接口Disk I/O 和供给文件创建修改时间的实时时钟。

  本文讲解时移植硬件平台为ZLG 公司的SmartCortexM3-1700 和普通U 盘。LPC1768
是一款32 位 Cortex-M3 内核的单片机,具有多达64 KB 的SRAM、512 KB 的内部Flash 和
丰富的外设。软件平台是Keil 集成开发环境。

1.3.1 FatFs 软件包中相关文件

1. 平台无关

(1)ffconf.h FatFs 模块配置文件

(2)ff.h FatFs 和应用模块公用的包含文件

(3)ff.c FatFs 模块

(4)diskio.h FatFs and disk I/O 模块公用的包含文件

(5)integer.h 数据类型定义

(6)option 可选的外部功能

2. 平台相关(不属于 FatFs 需要由用户提供)

(1)diskio.c FatFs 与disk I/O 模块接口层文件

1.3.2 FatFs 应用范围

支持FAT12、FAT16 和FAT32;
可打开的文件:无限制,依赖于有效的存储器;
支持最多 10 个卷;
文件大小:与FAT 类型有关(upto 4G-1 bytes);
卷大小:与FAT 类型有关(upto 2T bytes on 512 bytes/sector);
簇大小:与FAT 类型有关(upto 64K bytes on 512 bytes/sector);
扇区大小:与FAT 类型有关(upto 4K bytes)。

FatFs 模块在移植时需先注意以下两点:

•ANSI C

FatFs 模块是用ANSI C 编写的中间件,只要编译器遵循ANSI C,它都是平台无关的。

•整型大小

FatFs 假定 char/short/long 的长度为8/16/32 位,而int 为 16 位或 32 位,这些相应的定
义位于integer.h 文件。这在大多数的编译器上都不会是问题,但是当与预定义的内容发生冲
突时,需要用户注意。

1.3.3 FatFs 配置

文件系统的配置项都在ffconf.h 文件之中。

(1) _FS_TINY :这个选项在R0.07 版本之中开始出现,在之前的版本都是以独立的C

文件出现,现在通过一个宏来修改使用起来更方便;
(2) _FS_MINIMIZE、_FS_READONLY、_USE_STRFUNC、_USE_MKFS、
_USE_FORWARD 这些宏是用来对文件系统进行裁剪的,下面的 1.3.4 小节中有详细介绍;
(3) _CODE_PAGE :本选项用于设置语言码的类型,对应的字库可以在网上下载

 

 

 

 

---恢复内容结束---

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。