【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(四)-介绍库函数,获取一些SD卡的信息
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡
本篇要来介绍文件管理FatFs
官方的网站是:http://elm-chan.org/fsw/ff/00index_e.html
这是一个日本人写的,除了文件管理以外,还有其他的,例如解码JPEG、红外遥控等
在官网链接内,最下方有个Return,点击后就可以看到相关的开源库
以下开始正题(本文里提到的媒介,其实就是设备了,我不想改图了...)
打开官方网站,页面简单明了,就分为4个区块(以下图片为FatFs官网上截取的图片)
第一区块、介绍及特性(Features):FatFs是文件管理系统,可用于SD卡、硬盘(ATA)、RTC时钟,FTL和etc不清楚是什么,另外,也可以用于Flash或是EEPROM
第二区块、应用接口(Application Interface):FatFs提供了接口,使得我们的应用可以和它交互。官网左侧为一些接口的介绍,分四个部分
第一部分:File Access(文件存取)
f_open | 打开/创建文件 |
f_close | 关闭文件 |
f_read | 读取文件 |
f_write | 写入文件 |
f_lseek | 移动读/写指针,扩展大小 |
f_truncate | 截断文件 |
f_sync | 刷新缓存数据 |
f_forward | 转移文件数据到一个数据流 |
f_expand | 为文件分配一个连续的块 |
f_gets | 读取一个字符串(string) |
f_putc | 写入一个字符(character) |
f_puts | 写入一个字符串(string) |
f_printf | 写入一个格式化字符串 |
f_tell | 获取当前读/写指针 |
f_eof | 文件结束测试 |
f_size | 获取长度 |
f_error | 测试错误 |
第二部分:Directory Access(目录访问)
f_opendir | 打开一个目录 |
f_closedir | 关闭一个已打开的目录 |
f_readdir | 读取目录 |
f_findfirst | 打开一个目录并读取匹配的第一个项目 |
f_findnext | 查找下一个匹配的项目 |
第三部分:File and Dirextor Management(文件和目录管理)
f_stat | 检查文件或子目录是否存在 |
f_unlink | 删除文件或子目录 |
f_rename | 重命名/移动文件或子目录 |
f_chmod | 更改文件或子目录的属性 |
f_utime | 更改文件或子目录的时间戳 |
f_mkdir | 创建子目录 |
f_chdir | 更改当前目录 |
f_chdive | 更改当前驱动 |
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):你想管理的存储设备,必须要和FatFs链接。官网左侧为一些接口的介绍,分两个部分
第一部分:Storage Device Controls(存储设备控件)
disk_status | 获取设备状态 |
disk_initialize | 初始化设备 |
disk_read | 读取数据 |
disk_write | 写入数据 |
disk_ioctl | 控制设备相关功能 |
第二部分:Real Time Clock(实时时钟)
get_fattime | 获取当前时间 |
第四区块、资源(Resources):
在这4个区块里,第2、3区块就算是说明文档了
我们先看第4个区块:资源
下载一个FatFs版本看看,就《FatFs R0.11a》这个吧
解压后,里面有2个档案,doc和src
doc(documents)其实不用看,因为文件夹里面的网页链接,其实就是文章开头的官方链接
src(source)源码,核心和接口都在这了,打开文件夹,里面的内容如下图
图片内《ffconf.h》说的精简功能,指的是如果你只需要读,不需要写,那么可以在此头文件里设置,最终调用《f_open》《f_close》《f_read》即可,可节约文件管理,所需占用的空间
《diskio》指的底层就是你想读或写的设备,可能是SD卡,或是Flash...等等
其实文章到这里,该说的都差不多了,下面这张图,只是更详细描绘了各文件的功用
像是《f_open()》《disk_read()》这些函数,分别在第二区块和第三区块都能找到
其实最终,我们完成三个任务就好(了解第2、3点的红字,就能了解如何使用FatFs文件管理)
1、设定好《ffconf.h》的配置
2、连接我们的设备,修改《diskio.c》达成连接的目的(开源库FatFs需要连接我们的设备)
3、未来在我们的应用里,完全使用接口,来处理任何事情(调用开源库,实现文件管理的功能)
最后,来细讲一下《diskio.c》,文章前面提到的第三区块
如果你的应用,只要读的功能就好,那么你实现(修改)下面三个函数就好
《disk_status》
《disk_initialize》
《disk_read》
如果还想要写的功能,还必须额外实现下面三个函数
《disk_write》
《get_fattime》
《Disk_ioctl(CTRL_SYNC)》
如果想要格式化的功能,要实现下面两个函数
《Disk_ioctl(GET_SECTOR_COUNT)》
《Disk_ioctl(GET_SECTOR_SIZE)》
还有一些其他的,有时间再补上吧
《2021.01.16修改:我上方写着第四区块、资源(Resources)的图片,里面的FatFs module application note链接点击一下,就会发现如下这张图》
图片明确指示,如果你开启了哪个宏定义,需要调用哪个接口函数,一行一行来理解,disk_ioctl我统一用控制函数来代称
【1、不管任何时候(Always)】,你都需要实现三个函数:状态(disk_status)、初始化(disk_initialize)和读取(disk_read)
【2、如果只读 == 0(FF_FS_READONLY == 0)(0为否,意思就是:只读 == 否)】,你要实现三个函数:写入(disk_write)、读取当前时间(get_fattime)、控制函数(CTRL_SYNC,确保设备已完成挂起)
【3、如果需要格式化的功能(FF_USD_MKFS == 1)】,需要实现控制函数(GET_SECTOR_COUNT,检测可用扇区)、控制函数(GET_BLOCK_SIZE,检测块的大小)
【4、如果扇区扇区大小不同(FF_MAX_SS != FF_MIN_SS)】,需要实现控制函数(GET_SECTOR_SIZE)
【5、如果要擦除扇区上不需要的数据(FF_USE_TRIM == 1)】,需要实现控制函数(CTRL_TRIM)
【6、如果需要长文件名(FF_USE_LFN != 0)】,需要实现三个函数,ff_uni2oem、ff_oem2uni、ff_wtoupper
【7、如果需要重入功能(FF_FS_REENTRANT == 1)】,需要实现ff_cre_syncobj、ff_del_syncobj、ff_req_grant、ff_rel_grant
【8、如果设定长文件名时,宏定义设置3(FF_USE_LFN == 3)】,你额外还需要实现两个函数,ff_mem_alloc、ff_mem_free
本篇到这里就结束了,下一章开始移植的工作
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(六)-FatFs使用的思路介绍的更多相关文章
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs
[STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡
由于一张SD卡要能读写,涉及到的技术有些多,我打算分以下几篇博客 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(四)-介绍库函数,获取一些SD卡的信息
其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...
- 第36章 SDIO—SD卡读写测试
第36章 SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
随机推荐
- vue.js+elementUI文件上传、文件导入、文件下载
1.文件下载 <el-button plain @click ="exportVmExcel()" size='mini' icon="el-icon-downlo ...
- js 实现边缘撞击检测动画
js 实现边缘撞击检测动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- PTA 哈利·波特的考试 (25分)
PTA 哈利·波特的考试 (25分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...
- 论文解读(DeepWalk)《DeepWalk: Online Learning of Social Representations》
一.基本信息 论文题目:<DeepWalk: Online Learning of Social Representations>发表时间: KDD 2014论文作者: Bryan P ...
- 手把手教你学Dapr - 6. 发布订阅
上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...
- CVPR 之 老照片修复
周末闲来无事,随手整理电脑里的照片,望着一张物是人非的老相片,勾起了斑驳的回忆.忽尔转念一想,何不 PS 下,但 PhotoShop 有些大且不免费自己懒得装,于是,转向免费的图像复原软件. 网上搜来 ...
- [loj3528]位移寄存器
当$s=0$时(求最小值): 若$x_{0},x_{1},...,x_{n-1}$和$y_{0},y_{1},...,y_{n-1}$像题中所给的方式存储在$r[0][0..nk-1]$和$r[1][ ...
- [atAGC029F]Construction of a tree
构造一张二分图,左边是$n$个点,右边是$n-1$个集合,按照点属于集合连边 定义一组匹配的意义,即说明该点的父亲在该集合中选择 利用dinic求出二分图的最大匹配,若不为$n-1$则无解,否则考虑如 ...
- [atARC075F]Mirrored
假设$n=\sum_{i=0}^{k}a_{i}10^{i}$(其中$a_{k}>0$),则有$d=f(n)-n=\sum_{i=0}^{k}(10^{k-i}-10^{i})a_{i}$,考虑 ...
- Java 插入html字符串到PPT幻灯片
通过Java后端代码操作PPT幻灯片时,可直接在幻灯片中绘制形状,并在形状中添加文本字符串内容.本篇文章,介绍一种通过html字符串来添加内容到PPT幻灯片的的方法,可添加文字.图片.视频.音频等.下 ...