前言:本人移植的FATS的STM32F1代码已经上传到我的资源,如果有需要的可以点击下面链接:https://download.csdn.net/download/qq_40831778/11916818
一、 概述
1、 文件系统简介:
(1)文件系统:管理和存储文件信息的软件机构。
(2)常用的文件系统:
- FAT/FATFS
- NTFS(基于安全性的文件系统,是Wundow NT采用的独特的文件系统结构。
- CDFS:CDFS是大部分光盘的文件系统
2、 FATFS文件系统简介:
FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计,完全用标准C语言编写,具有良好的硬件平台独立性,可移植到8051、PIC、ARM等系列单片机上而只需做简单的修改。它支持FAT12、FAT16、FATI32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单片机做了优化。
3、 FATFS文件系统特点:
- Window兼容的FAT文件系统(支持FAT12/FAT16/FAT32)。
- 代码量少、效率高。
- 与平台无关、移植简单,全部通过C语言编写。
- 多种配置选项:支持多卷(物理驱动器或分区,最多10个卷)、多个ANSI/OEM代码页、支持长文件名、支持RTOS、支持多种扇区大小等。
4、 文件系统主要文件介绍:
文件名 | 功能 | 说明 |
ffconf.h | FATFS模块配置文件 | 需要根据需求来配置参数 |
ff.h | FATFS和应用模块公用的包含文件 | 不需要修改 |
ff.c | FATFS模块源码 | 不需要修改 |
diskio.h | FATFS和disk I/O模块公用的包含文件 | 不需要修改 |
diskio.c | FATFS和disk I/O模块接口层文件 | 与平台相关的代码,需要用户根据存储介质来编写函数 |
interger.h | 数据类型定义 | 与编译器有关 |
二、开始移植
1、我们打开下载好的FATS源码,正常来说会有两个文件夹,我们打开src文件夹,此文件夹里面都是我们需要的FATS源码,
2、大家注意到src里面还有一个文件夹,这个是可选的外部功能(比如支持中文等)。一般我们使用中文的话,将cc926.c添加到工程里面就好了。
3、我们需要将源码添加到STM32文件里,正常来说,我们只要将ff.c,cc936.c,diskio.c,添加到工程里面就好了。,之后配置好头文件 。
4、ffconf.h配置说明
这 ffconf.h 的头文件里面是关于 FATFS 的各种设置,我们可以根据自己的需 要来裁剪 FATFS,已达到自己想要的标准。我们来看一下它都有那些设置:
1) _FS_TINY
这个设置是配置是使用标准模式,还是微小模式。我们使用标准模式, 这里设置为:0。
2) _FS_READONLY
是否使用只读模式,我们选择可读可写。设置为:0。
3) _FS_MINIMIZE
这个设置是选择是否裁剪掉一些函数,具体裁剪那些,大家可以查看下 面的设置说明,我们这里使用的全功能模式。设置为:0。
4) _USE_STRFUNC
这个用来设置是否支持字符串类操作,我们选择使用。设置为:1。
5) _USE_MKFS
使用使用格式化,我们这里选择使用。设置为:1。
6) _USE_FASTSEEK
使用使能快速定位,我们选择使用。设置为:1。
7) _USE_LABEL
是否启用磁盘卷标功能。使用也可以,不使用也可以。我们这里使用。 设置为:1。
8) _USE_FORWARD
这个是在 TINY 模式下的设置,我们这里使用标准模式,不理它。
9) _CODE_PAGE
这个用于设置语言类型。我们使用的中文。设置为:936
10) _USE_LFN
该选项用于设置是否支持长文件名(还需要_CODE_PAGE 支持),取值 范围为 0~3。0,表示不支持长文件名,1~3 是支持长文件名,但是存储地方 不一样。我们这里就默认使用 FATFS 本身的存储方式了。设置为:1。
11) _MAX_LFN
设置最大文件名长度,我们直接设置最大。设置为:255。
12) _LFN_UNICODE
是否使用 FATFS 的字符编码。我们不使用。设置为:0
13) _FS_RPATH
这里也是一些函数裁剪,我们这里设置为:1。
14) _VOLUMES
这里设置的是支持的卷轴数量,我们挂载 SD 卡,有时候可以挂载下
FLASH,所以这里我们设置为两个:2。
15) _MAX_SS
这里是设置扇区缓冲的最大值,我们设置为:512。
16) _MULTI_PARTITION
是否使用多重分区分配。我们这里设置为:0。
17) _USE_ERASE 使用使用扇区擦除。我们这里不那么麻烦,想使用的时候在设置。设置 为:0。
18) _WORD_ACCESS
这里定义使用权限。一般不使用。我们设置为:0。
19) _FS_REENTRANT
20) _FS_TIMEOUT
21) _SYNC_t
22) _FS_LOCK
这几个设置,我们都没有使用到,所以直接保持默认状态就好。
4、 diskio.c 函数介绍
(1)disk_initialize()函数
2) disk_status()函数
3、disk_read()函数
4) disk_write()函数
5) disk_ioctl()函数
6) get_fattime()函数
三、fats的使用
我们首先需要添加SPI通信协议,之后我们根据自己所要使用的模块,更改ffconf.h文件,以及 diskio.c 里面的函数就可以正常使用了。
最后,看到我这篇文章的朋友,如果我的文章真的帮助到了你,记得帮我点个赞,如果希望和我共同学习,共同交流,可以关注我一下。本人QQ:2992789432