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 - 测试文件上的错误
相关推荐
anghost1501 小时前
基于单片机的超市储物柜设计
单片机·嵌入式硬件·超市储物柜设计
qq_526099134 小时前
工控机的用途与介绍:工业自动化的重要引擎
嵌入式硬件·自动化·电脑
尘似鹤5 小时前
旋钮键盘项目---foc讲解(开环)
单片机·嵌入式硬件
意法半导体STM326 小时前
STM32N6引入NPU,为边缘AI插上“隐形的翅膀”
单片机·ai·npu·st·stm32n6·边缘人工智能
范纹杉想快点毕业12 小时前
嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
linux·服务器·数据库·笔记·单片机·嵌入式硬件·fpga开发
Wallace Zhang13 小时前
STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译
ide·stm32·嵌入式硬件
3D打印-HUSTAIBO21 小时前
【电气】NPN与PNP
单片机·嵌入式硬件
ksk自在无敌1 天前
ESP8266的AP模式与STA编写,
stm32·单片机·嵌入式硬件
晶振厂家-晶发电子1 天前
怎么判断晶振的好坏,有什么简单的办法
单片机·嵌入式硬件
jllllyuz1 天前
SysTick定时器的工作原理是什么
stm32·单片机·嵌入式硬件