【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使用的思路介绍的更多相关文章

  1. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  2. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(八)-认识内存管理

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  3. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(七)-准备移植FatFs

    [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 [STM3 ...

  4. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(五)-文件管理初步介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  5. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡

    由于一张SD卡要能读写,涉及到的技术有些多,我打算分以下几篇博客 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含 ...

  6. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  7. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  8. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(四)-介绍库函数,获取一些SD卡的信息

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...

  9. 第36章 SDIO—SD卡读写测试

    第36章     SDIO—SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...

随机推荐

  1. Swift-技巧(一)缩放并填充图片

    摘要 直接操作图片来实现它的缩放或者填充多余空间,首选 UIGraphicsBeginImageContext 函数来实现,它就相当于一个画布,你甚至可以用它来涂鸦. 最近有一个需求,就是将图片先等比 ...

  2. 基于Lucene的全文检索实践

    由于项目的需要,使用到了全文检索技术,这里将前段时间所做的工作进行一个实践总结,方便以后查阅.在实际的工作中,需要灵活的使用lucene里面的查询技术,以达到满足业务要求与搜索性能提升的目的. 一.全 ...

  3. LeetCode 114. 二叉树展开为链表 C++

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  4. c++学习笔记1(引用)

    引用 格式:类型名&引用名=某变量名: 概念 实例:编写交换整型变量的函数对比 不用引用 实机操作 使用引用 实机操作 实例2:用作函数的返回值 可对函数返回值赋值 常引用 使用格式,在引用前 ...

  5. OAuth 2.0 扩展协议之 PKCE

    前言 阅读本文前需要了解 OAuth 2.0 授权协议的相关内容, 可以参考我的上一篇文章 OAuth 2.0 的探险之旅. PKCE 全称是 Proof Key for Code Exchange, ...

  6. JSRE中的多任务与多线程

    前言 ​ 这几天在爱智官网看了下JSRE其他的Api,看了一个比较有意思的模块 - 多任务模块task,大致看了下他们的接口说明和案例,感觉和多线程差不多,然后就准备去看下实现方式,找了很久没有找到源 ...

  7. Python 深拷贝和浅拷贝的区别

    python的复制,深拷贝和浅拷贝的区别    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用  ...

  8. 【linux系统】命令学习(四)统计命令

    sort 排序 -b 忽略开头的空白符 -f 将小写字母看做为大写字母 -h 根据存储容量排序(kb mb hb )从小到大 -n 按数字排序 -o 把结果写入文件 -r 以相反的顺序来排序 -t 指 ...

  9. 微信公众号生成海报(uniapp)

    前言 这几天接到一个需求,要在公众号内生成分享海报.之前有做过H5和小程序的,心想直接复制过来就行了.没想到踩了不少的坑,搞了好几天终于搞好了,特此分享一下,希望能对大家有所帮助. 效果图 代码实现 ...

  10. [luogu5666]树的重心

    考虑枚举一个点k,求其为重心的方案数暴力的做法是,将其作为根搜索,设最大子树大小为s1,次大为s2,对割掉的子树分类讨论:1.在子树中,分两种情况(都可以用线段树合并来做) (1)从s1中切掉一棵大小 ...