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 - 测试文件上的错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件

无后端高效获取网络时间的组件 废话不多说,直接上源码m_NowSerivceTime 一个基于你发行游戏地区的时间偏移, 比如北京时区就是 8, 巴西就是-3,美国就是-5using Newtonsoft.Json; 如果这里报错, 就说明项目没有 NewtonsoftJson插件…

华为ensp中nat server 公网访问内网服务器

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月15日17点30分 💯趣站推荐💯 前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,…

R语言学习笔记-1

1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…

二、FIFO缓存

FIFO缓存 1.FIFO缓存介绍2.FIFO缓存实现3.FIFO缓存总结 1.FIFO缓存介绍 FIFO(First-In-First-Out)缓存 是一种简单的缓存淘汰策略,它基于先进先出的原则来管理数据。当缓存达到容量限制并需要淘汰元素时,最先进入缓存的元素会被移…

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点 一、引言 在当今的分布式系统开发领域,Spring Cloud和Spring Cloud Alibaba都是极为重要的框架。它们为构建大规模、高可用、分布式的应用系统提供了丰富的工具和组件。本文将深入探讨Spring C…

MultiRECloudSim使用

MultiRECloudSim使用 简介 MultiRECloudSim是一个用于云计算环境下的模拟器相关工具,它主要用于模拟和评估云计算中的资源分配、任务调度等多种场景。它可能是基于CloudSim这个基础的云计算模拟器进行扩展而来,CloudSim提供了基本的云计算模拟功能,如数据中心、虚拟机、任务…

账号下的用户列表表格分析

好的,这是您提供的 el-table 组件中所有列的字段信息,以表格形式展示: 列标题 (label)字段属性 (prop)对齐方式 (align)宽度 (width)是否可排序 (sortable)说明IDidcenter100否管理员的唯一标识符头像avatarcenter90否管理员的头像 URL 或路…

GPT-SoVITS语音合成模型部署及使用

1、概述 GPT-SoVITS是一款开源的语音合成模型,结合了深度学习和声学技术,能够实现高质量的语音生成。其独特之处在于支持使用参考音频进行零样本语音合成,即使没有直接的训练数据,模型仍能生成相似风格的语音。用户可以通过微调模…

TongWe7.0-东方通TongWeb控制台无法访问 排查

问题描述:无法访问TongWeb的控制台 逐项排查: 1、控制台访问地址是否正确:http://IP:9060/console #IP是服务器的实际IP地址 2、确认TongWeb进程是否存在,执行命令:ps -ef|grep tongweb 3、确认TongWeb服务启动…

研发文档管理系统:国内外9大选择比较

文章主要对比了9款国内外研发文档管理系统:1.PingCode; 2. Worktile; 3. 飞书; 4. 石墨文档; 5. 腾讯文档; 6. 蓝湖; 7. Confluence; 8. Notion; 9. Slab。 在企业研发过…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景: TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候,有的采购申请的品名、规格、品牌为空 原因分析: 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下,只需修…

Ubuntu 20.04 24.04 双网卡 Bond 配置指南

前言:在现代服务器管理中,网络的稳定性和可靠性至关重要。为了提高网络的冗余性和负载能力,我们经常需要配置多个网络接口以实现链路聚合或故障转移。Ubuntu系统自17.10版本起,引入了Netplan作为新的网络配置抽象化工具&#xff0…

OCR实践—PaddleOCR

有个项目需求,对拍摄的问卷图片,进行自动得分统计【得分是在相应的分数下面打对号】,输出到excel文件 原始问卷文件见下图,真实的图片因使用手机拍摄的图片,存在一定的畸变, 技术调研 传统方法 传统方法…

Gitee与idea的项目提交步骤

1. 准备工作 确保你已经安装了Git,并且你的计算机上已经配置了Git。如果你还没有安装Git,可以从Git官网下载并安装。 2. 创建Gitee账户和仓库 访问Gitee官网并注册一个账户(如果你还没有的话)。登录你的Gitee账户。点击右上角的…

三相异步电动机没有气压怎么办?

三相异步电动机作为工业和商业应用中最常见的电动机类型之一,广泛应用于各类机械设备及自动化系统中。其运行依赖于电能的转换,然而在某些情况下,可能会出现电动机驱动设备无法获得气压的情况。 一、三相异步电动机工作原理 三相异步电动机…

ubuntu+ros新手笔记(五):初探anaconda+cuda+pytorch

深度学习三件套:初探anacondacudapytorch 系统ubuntu22.04 ros2 humble 1.初探anaconda 1.1 安装 安装过程参照【详细】Ubuntu 下安装 Anaconda 1.2 创建和删除环境 创建新环境 conda create -n your_env_name pythonx.x比如我创建了一个名为“py312“的环境…

【测试】Pytest

建议关注、收藏! 目录 功能pytest 自动化测试工具。 功能 单元测试:用于验证代码的最小功能单元(如函数、方法)的正确性。 简单的语法:不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试:P…

707. 设计链表 链表的知识复习

707. 设计链表 class MyLinkedList {public:struct LinkedNode {int val;LinkedNode *next;LinkedNode(int val):val(val),next(nullptr){}};MyLinkedList(){dummyhead new LinkedNode(0);size0; }int get(int index) {if(index < 0 || index > size){return -1;}Linke…

【中间件介绍及案例分析】

中间件介绍及案例分析 一、中间件的定义 中间件是一种位于操作系统、网络和数据库之上&#xff0c;应用软件之下的软件。它的主要作用是为处于不同系统中的软件组件提供通用服务&#xff0c;使得这些软件组件能够更好地通信、协同工作&#xff0c;并且帮助开发人员更高效地构…

题解 - 统计成绩

题目描述 每次考试或测试后&#xff0c;老师们都要进行成绩统计。假如某次期末考试有语文、数学、英语三门课&#xff0c;现请你编程输出总成绩最高分以及每门学科的最高分。 输入 输入共n1行。 第1行是一个正整数n&#xff08;1≤n≤100&#xff09;&#xff0c;表示学生人数…