当前位置:   article > 正文

尝试使用CubeMX做stm32开发之十四:FatFs的基础知识_stm32 cubemx fatfs

stm32 cubemx fatfs

一、文件系统概念

文件系统:在存储介质中建立一种组织架构,以更好地储存和管理数据

文件系统一般包含:操作系统引导区、目录、文件等

文件系统中数据以文件的形式存储

文件系统中数据的存取需要遵循特定的格式

与直接操作存储介质相比(stm32中的flash存取函数),在文件系统中,一个完整的文件可以被分开为多个片段,存储到不连续的物理地址中;这些不连续的地址之间通过目录或链表的方式建立联系

二、FatFs概念

常用的文件系统有多种:FAT/FATFS、NTFS、CDFS、exFAT

其中,FatFs具有一些特点:免费开源;代码量小,裁剪方便,适合小型嵌入式系统;支持FAT12、FAT16、FAT32;支持多种存储媒介;基于ANSI C,独立于底层,平台兼容性好,可移植性强

源码下载地址:官网FatFs - Generic FAT Filesystem ModuleOpen source FAT filesystem for embedded projectshttp://elm-chan.org/fsw/ff/00index_e.html

系统包结构: 

文件名

功能

说明

ffconf.h

FATFS模块配置文件

需要根据需求来配置参数

ff.h

FATFS和应用模块公用的包含文件

不需要修改

ff.c

FATFS模块源码

不需要修改

diskio.h

FATFS和disk I/O模块公用的包含文件

不需要修改

diskio.c

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

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

interger.h

数据类型定义

与编译器有关

option文件夹

可选的外部功能(比如支持中文等)

汉字实验把字库放到SPI FLASH需要修改

diskio.c和diskio.h是硬件层,需要根据存储介质修改;尤其是diskio.c,所谓文件系统移植,相当一部分工作量在于对这个文件的修改

ff.c和ff.h是FATFS的文件系统层和文件系统的API层,一般情况下开发者直接调用即可

ffconf.h文件包含相关配置宏,所谓文件系统裁剪,主要是对其中的宏定义进行修改

系统组织架构:

其中,FatFs module一般不需要开发者修改,只需要对Low Level disk I/O layer进行适当的开发和调整,根据硬件的具体情况

大体上可以将FatFs划分为两个层级:Application Interface(应用接口)和Media Access Interface(MAI,媒体访问接口)

Application Interface(应用接口)——FatFs与应用层之间的接口函数

  • File Access(文件访问)
    • f_open - 打开/创建一个文件
    • f_close - 关闭一个打开的文件
    • f_read - 从文件中读取数据
    • f_write - 向文件写入数据
    • f_1seek - 移动读/写指针,扩展大小
    • f_truncate - 截断文件大小
    • f_sync - 刷新缓存数据
    • f_forward - 将数据转发到流
    • f_expand - 为文件分配一个连续块
    • f_gets - 读取一个字符串
    • f_putc - 写一个字符
    • f_puts - 写一个字符串
    • f_printf - 编写格式化字符串
    • f_tell - 取当前读/写指针
    • f_eof - 文件结尾测试
    • f_size - 获取文件大小
    • f_error - 测试错误
  • Directory Access(目录访问)
    • f_opendir - 打开一个目录
    • f_closedir - 关闭一个打开的目录
    • f_readdir - 读取目录项
    • f_findfirst - 打开目录并读取匹配的第一项
    • f_findnext - 读取匹配的下一项
  • File and Directory Management(文件和目录管理)
    • f_stat - 检查文件或子目录是否存在
    • f_unlink - 移除文件或子目录
    • f_rename - 重命名/移动文件或子目录
    • f_chmod - 更改文件或子目录属性
    • f_utime - 更改文件或子目录的时间戳
    • f_mkdir - 创建子目录
    • f_chdir - 更改当前目录
    • f_chdrive - 更改当前驱动器
    • f_getcwd - 检索当前目录和驱动器
  • Volume Management and System Configuration(卷管理和系统配置)
    • f_mount - 注册/注销卷的工作区
    • f_mkfs - 在逻辑驱动器上创建FAT卷
    • f_fdisk - 在物理驱动器上创建分区
    • f_getfree - 获取卷上的可用空间
    • f_getlabel - 获取卷标
    • f_setlabel - 设置卷标
    • f_setcp - 设置活动代码页

Media Access Interface(MAI,媒体访问接口)——FatFs与存储介质之间的接口函数

由于FatFs模块是独立于平台和存储介质的文件系统层,因此它与物理设备(如存储卡、硬盘和任何类型的存储设备)完全分离。因此存储设备控制模块不包含在FatFs中,FatFs通过MAI函数访问存储设备控制模块。

  • Storage Device Controls
    • disk_status - 获取设备状态
    • disk_initialize - 初始化设备
    • disk_read - 读数据
    • disk_write - 写数据
    • disk_ioct1 - 控制设备相关功能
  • Real Time Clock
    • get_fattime - 获取当前时间

三、小结

        FatFs文件系统适合stm32f103这种中小型嵌入式平台,开发者需要进行的工作主要集中在ffconf.h和diskio.c这两个文件中,并在实际中能够熟练调用ff.c中的API函数,但前提是对FatFs的整个架构有清晰的认识。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/464020
推荐阅读
相关标签
  

闽ICP备14008679号