STM32-FATFS文件系统

一、FATFS文件系统介绍:

FATFS 是一个完全免费开源的 FAT/exFAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准 C 语言(ANSI C C89)编写,所以具有良好的硬件平台独立性,只需做简单的修改就可以移植到 8051、PIC、AVR、ARM、Z80、RX 等系列单片机上。它支持 FATl2、FATl6 和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对 8 位单片机和 16 位单片机做了优化。

二、FATFS的源码说明:

diskio.h:FATFS 和 diskI/O 模块公用的包含文件;

ff.c:FATFS 模块;

ff.h:FATFS 和应用模块公用的包含文件;

ffconf.h:FATFS 模块配置文件,宏定义对应的功能,代码中都有说明,具体的配置范围可以见官方配置说明;

ffsystem.c:根据是否有操作系统来修改这个文件;

ffunicode.c:可选,根据 ffconf.h 的配置,进行Unicode编码转换;

diskio.c:FATFS 和 diskI/O 模块接口层文件,需要根据硬件修改这部分的代码。

备注:diskio.c与硬件平台有关,其它与硬件平台无关

1.FATFS模块的所有配置项都是存放在 ffconf.h说明

_FS_TINY:选择FATFS或者TinyFATFS;

_FS_READONLY:只读或读写方式配置;

_FS_MINIMIZE:配置FATFS功能优化级别;

_USE_STRFUNC:配置是否支持字符串操作函数宏定义;

_USE_MKFS:配置用来定时是否使能格式化;

_USE_FASTSEEK:配置使能快速定位;

_CODE_PAGE:设置语言类型;

_USE_LFN:设置是否支持长文件名;

_LFN_UNICODE:使能或禁用Unicode编码;

_FS_RPATH:是否开启相对路径;

_VOLUMES:设置FATFS支持的逻辑设备数目;

_MAX_SS:扇区缓冲的最大值;

_MULTI_PARTITION:配置分区设置;

_USE_ERASE:配置扇区擦除功能;

_WORD_ACCESS:配置字节或者字访问方式;

_FS_REENTRANT:配置文件系统是否支持重入;

_FS_TIMEOUT:超时时间设置;

_FS_SHARE:设置文件支持的共享数目。

三、FATFS的移植:

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

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

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

①.disk_initalize函数:初始化磁盘驱动器;

②.disk_status函数:返回当前磁盘驱动器的状态;

③.disk_read函数:从磁盘驱动器上读取扇区;

④.disk_write函数:向磁盘写入一个或多个扇区;

⑤.disk_iotcl函数:控制设备指定特性和除了读/写外的杂项功能。

四、FATFS模块开放函数 :

  1. f_mount - 注册/注销一个工作区域(Work Area)
  2. f_open - 打开/创建一个文件
  3. f_close - 关闭一个文件
  4. f_read - 读文件
  5. f_write - 写文件
  6. f_lseek - 移动文件读/写指针
  7. f_truncate -截断文件
  8. f_sync - 冲洗缓冲数据 Flush Cached Data f_forward - 直接转移文件数据到一
    个数据流
  9. f_stat - 获取文件状态
  10. f_opendir - 打开一个目录
  11. f_closedir -关闭一个已经打开的目录
  12. f_readdir - 读取目录条目
  13. f_mkdir - 创建一个目录
  14. f_unlink -删除一个文件或目录
  15. f_chmod - 改变属性(Attribute)
  16. f_utime -改变时间戳(Timestamp)
  17. f_rename - 重命名/移动一个文件或文件夹
  18. f_chdir - 改变当前目录
  19. f_chdrive - 改变当前驱动器
  20. f_getcwd - 获取当前工作目录
  21. f_getfree - 获取空闲簇 Get Free Clusters
  22. f_getlabel - Get volume label
  23. f_setlabel - Set volume label
  24. f_mkfs - 在驱动器上创建一个文件系统
  25. f_fdisk - Divide a physical drive
  26. f_gets - 读一个字符串
  27. f_putc - 写一个字符
  28. f_puts - 写一个字符串
  29. f_printf - 写一个格式化的字符串
  30. f_tell - 获取当前读/写指针
  31. f_eof - 测试文件结束
  32. f_size - 获取文件大小
  33. f_error - 测试文件上的错误
相关推荐
电子小白1233 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
清风6666663 小时前
基于单片机的多传感器智能云梯逃生控制器设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计
小何code3 小时前
STM32入门教程,第10课(上),OLED显示屏
stm32·单片机·嵌入式硬件
来自晴朗的明天3 小时前
高速画板-USB模块的PCB设计5-USB2.0/3.0布局布线要求
单片机·嵌入式硬件·硬件工程
早日退休!!!6 小时前
ARM Cortex-M核 【保存上下文&恢复上下文】
arm开发·单片机·嵌入式硬件
来自晴朗的明天6 小时前
差分控多少Ω阻抗
单片机·嵌入式硬件·硬件工程
SystickInt7 小时前
mosbus复习总结(20260110)
stm32
点灯小铭7 小时前
基于单片机的多功能智能婴儿车设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
π同学8 小时前
基于RT-Thread的STM32开发第十一讲——编码器模式
stm32·rt_thread·双相编码器
码农小韩10 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习