FATFS文件系统
什么是文件系统?
文件系统简介
- 文件系统就是对存储在存储介质中的数据进行管理的程序。
- 因为呢,计算机的世界,一切的数据(视频,音乐,图片)以二进制代码表示,如果没有文件系统进行管理这么庞大的数据,那么对于使用者使用数据而言将是极为不方便的。
- 不使用文件系统,你想读取某个部分的数据,要找到数据位于的地址,你不会清楚文件大小,同时写入数据时,会存在数据覆盖问题
Windows文件格式
- windows为例,使用文件系统
- 清晰知道每个磁盘的剩余空间大小
- 多少文件夹
- 多少文件
- 文件格式
- FAT32
- NTFS
- exFAT
存储介质格式化
使用文件系统前需要注意的
- 需要对存储介质进行格式化。
- 格式化会在存储介质上新建一个文件分配表和目录。
- 这样文件系统就可以记录数据存放的物理地址和剩余空间
磁盘分区
文件系统的结构与特性
文件系统结构
在使用文件系统时,数据以文件的形式存储。写入新文件时,在目录中创建一个文件索引它指示了文件存放的物理地址,再把数据存储到该地址中。
当需要读取数据时,可以从目录中找到该文件的索引,进而读取数据。数据结构,链表辅助,在不连续空间存储。
目录存放着,文件的名称,占据大小空间,位置,
利用特殊数据结构,最大利用存储空间
文件系统空间示意图![请添加图片描述](https://i-blog.csdnimg.cn/blog_migrate/93e0b60d52bdc1f0a782ddb9e98e3a9c.png)
C语言中的文件操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYNMqwFe-1690026904862)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\1688638203364.png)]
FATFS文件系统介绍
它是面向小型嵌入式系统的一种通用的FAT文件系统。完全有AISIC语言编写,并且完全独立于底层的I/0介质。
很容易地移植进8051,PIC,AVR,ARM等。
- FATFS支持FAT12,FAT16,FAT32等格式。
- 利用其SPI Flash芯片驱动,将FATFS文件系统代码移植到工程之中,可利用各种文件系统函数,对flash操作
- 可从其官网下载源码
- 野火为例
- R0.14a版本
- 文件版本不用太过纠结,核心函数不会变,只是对bug进行修复
FATFS源码介绍
程序中的关系网络
FATFS移植需要用户修改的函数
FATFS中间层添加途径
1.通过源码移植
- 主要学习开发源码移植技巧
-
将源码拷贝至工程文件夹目录
-
添加进keil5工程
-
添加源码头文件路径
-
尝试构建程序,解决错误。(大部分内容在disio.c中修改)
- 部分函数未定义,(需要用户自己写,比如获取文件创建时间的函数),如果不要用到删除即可,注释,
- 实现未定义的函数在c文件中
-
实现FATFS和底层驱动的接口’
- disk_status获取设备状态的接口
- disk_initalize 初始化设备接口
disk_read
,disk_write
- disk_ioct 设备属性接口
-
修改ffconf.h头文件,配置FatFs文件系统的具体功能
- #define FF_USE-MKFS 1 格式化
- #define FF_CODE-PAGE 936 修改编码页,支持中文文件名
- #define FF_USE-LFN 1 支持长文件名
- #define FF_MAX_SS 4096 修改支持最大的设备扇区大小 与flash设备对应1个扇区(4字节)
使用过程
1.挂在文件系统在一个设备上
- 使用f_mount函数
2.打开一个文件
- f_open
3.数据的读取或写入
- f_read
- f_write
4.操作之后关闭文件
- f_close
2.STM32CubeMx
- 推荐使用这种方式,方便
- 注:这两种方法实现的工程文件仅部分不同,但效果一致
- 部分源码由cubeMx_ST工程师修改的,对多设备支持更好
4.操作之后关闭文件
- f_close
2.STM32CubeMx
- 推荐使用这种方式,方便
- 注:这两种方法实现的工程文件仅部分不同,但效果一致
- 部分源码由cubeMx_ST工程师修改的,对多设备支持更好