【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(五)-文件管理初步介绍
【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
终于要结束了,由于我的项目只要实现SD卡的读取,所以我并不会执行SD卡写入的相关CMD
至于FatFs,SD卡也只有做到读取的功能
但未来我想写个存储器W25Qxx+FatFs,研究下FatFs格式化和FatFs如何写入,就不局限于FatFs只做读取的功能了
以下是我这几篇博客的回顾,和一些牢骚....不想看的可以略过


【第一篇】介绍SD卡有两种通讯模式,SPI和SDIO,以及介绍寄存器
【第二篇】介绍发送CMD所需的格式(SD卡听从CMD命令来执行相关的操作),以及不同CMD的作用是什么
【第三篇】SD卡操作流程,经过一系列的操作,得知用户的SD卡是哪个版本,以及相关信息
【第四篇】我使用的是STM32,所以来看它的库函数,使用代码实现第三篇的流程
【第五篇】文件管理如何运作,但对于我们使用第三方库的来说,不一定要了解
【第六篇】FatFs思路介绍,有了思路,我们才知道要添加哪个文件,要修改哪个代码
【第七篇】准备移植FatFs,但目前我只需要读的功能,写和初始化的接口,并没有去实现
【第八篇】内存管理研究,因为想遍历SD卡的内容
【终篇】尝试遍历SD卡 我在写这几篇博客,我参考和查阅了大量资料
其中帮助最大的,就是正点原子和野火
我这里实话实说,我只买了原子的开发板(探索者板子)
以道德上来讲,我欠野火一个板子
我为什么会买正点原子的板子呢?因为我需要的一个功能,他有录视频,而野火没有
在买开发板前,我也看过了两家的视频教程
其实,在前面几章的视频(讲时钟、讲如何点亮LED之类的),相差不会很大
但是!后面几章就不一样了,我觉得正点原子录到进阶篇、高级篇这种的,越录越懒。。。
野火讲SDIO-SD卡,用了9个视频,正点原子只用了1个....
当然不止SDIO,FatFs也只用了1个....
更令人不能接受的,我感觉他好像一直照着PPT念,那我直接看PPT就好了?
正点原子也不全都是缺点,在他的论坛里,活跃人数是比野火论坛还多的,有问题的话也可以在上面提问,得到答案的几率会高那么一点点吧?
作为同样是苦逼的程序员,以上这些只能算是个人建议(观点仅仅代表个人)
希望大家能找到适合自己的学习方式吧
这里顺便放上正点原子和野火的论坛
【正点原子】http://www.openedv.com/forum.php
【野火】https://www.firebbs.cn/forum.php
有问题的话,可以在评论区留言,我能帮的我尽量帮
这里也谢谢大家的阅读
由于遍历SD卡,我担心用户SD卡内,有长文件名的档案,所以研究了这个东西
是否使用长文件名的设定,在《ffconf.h》里面,宏定义《_USE_LFN》就是了
它总共有4个数字可以设置,0、1、2、3
【0】下载开源库FatFs时,默认的值,只有0是不使用长文件名的,因为可以节省资源
【1】使用长文件名,用全局变量(BSS)的方式
【2】使用长文件名,用栈(STACK)的方式
【3】使用长文件名,用堆(HEAP)的方式,这需要内存管理,也就是malloc(内存申请)和free(内存释放)
至于长度(_MAX_LFN),按默认的值(255)吧
关于2、3点的地址,可以在这里修改(但我没尝试修改过,只是提供修改的地方在哪)
一旦我们决定使用长文件名的功能,还必须注意几点
首先,我使用的是《10b》版本,我原先用的是11a的,但是读取长文件名时(f_readdir),一直发生《FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */》错误
后来改回10b版本才正常,当初我脑子真是进水了,我是真的参照正点原子和野火的版本,但不知道为什么,就是看走眼,看到11a版本。。。
不说了,回到正题,我每篇有涉及到FatFs的博客,在开头都有给出FatFs官网
但请记住,官网会更新的,你所看到的图片,也都是最新版本的
如果你用的是旧版本的FatFs,那么你应该去看下载的开源库里,doc这个文件夹,如下图
对比你会发现,有些出入的,我这里只说右半边的,因为我使用的是《10b》这个版本
回到长文件的设定,官方说了,如果你要使用长文件(_USE_LFN >= 1),那么你要注意两个函数
《ff_convert》编码转换
《ff_wtoupper》字符转换
这两个函数,在下图可以找到,把某一个编码添加到项目即可
至于你是要添加哪一个呢?看你的应用
《cc932》日文
《cc936》简体中文
《cc949》韩文
《cc950》繁体中文
《ccsbcs》英文
正点原子用的是《_USE_LFN == 3》,用内存的方式来实现
你要使用《_USE_LFN == 3》的方式来实现,上图doc内也说了,要额外实现两个函数(对比《_USE_LFN == 1 或 2》的情况)
《ff_mem_alloc》内存申请
《ff_mem_free》内存释放
这两个函数,需要添加到《diskio.c》里面,代码如下


1 //动态分配内存
2 void *ff_memalloc (UINT size)
3 {
4 return (void*)mymalloc(SRAMIN,size);
5 }
6 //释放内存
7 void ff_memfree (void* mf)
8 {
9 myfree(SRAMIN,mf);
10 }
当然,你这么写的话,会牵扯到正点原子的另一个源文件《malloc.c》,上一篇博客有
然后就内存申请吧,下图截至正点原子源码《源码 实验45 视频播放器实验》
红框处是内存申请
第181行:f_readdir,就是遍历了,并且有使用长文件名的功能
至于《_USE_LFN == 1》《_USE_LFN == 2》
我在看野火的视频教程,里面有提到
是429挑战者的视频《25-SPI-FatFs文件系统(第3节-FATFS文件系统移植—包含超级详细的移植过程)》
野火资料:http://doc.embedfire.com/products/link/zh/latest/index.html
正点原子资料:http://www.openedv.com/docs/index.html
其实我脑子再次进水了,我发现,根本不需要长文件名,因为我设备没地方让我显示。。。
暂时先这样吧
未来去研究W25Qxx + FatFs
【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(终)-配合内存管理来遍历SD卡的更多相关文章
- 【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(六)-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总线,命令的相关介绍 ...
- STM32 内存管理实验
参考原文<STM32F1开发指南> 内存管理简介 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术.最主要的目的是如何高效.快速的分配,并且在适当的时候释放和回收内存资源.内存管 ...
随机推荐
- cm0 逆向分析
目录 cm0 逆向分析 前言 Strings工具复习 String工具使用说明 Strings工具解cm0题 cm0 逆向分析 前言 Emmmmm,我假装你看到这里已经学过了我的<恶意代码分析实 ...
- 动手个性化设置自己的 IntelliJ IDEA
前言 IDEA 是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA? 我们可以通过 Settings 功能来设置. Settings文件是 IDEA 的配置文件,通过它可以设置主题 ...
- 新手使用python以及pycharm看过来
前言 随着互联网时代的进步,人类与计算机之前的沟通交流越来越便捷,自此交流的媒介--编程语言吸引力更多的人学习,今天我们就来谈谈当前市面上最火的编程语言 1.文件的概念 什么是文件夹.文件 其实是操作 ...
- SpringCloud 2020.0.4 系列之 JWT用户鉴权
1. 概述 老话说的好:善待他人就是善待自己,虽然可能有所付出,但也能得到应有的收获. 言归正传,之前我们聊了 Gateway 组件,今天来聊一下如何使用 JWT 技术给用户授权,以及如果在 Gate ...
- Spring Security OAuth2 单点登录
1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...
- 『学了就忘』Linux基础命令 — 35、网络中与其他机器通信的命令
目录 1.write命令 2.wall命令 3.mail 命令 使用1:发送邮件 使用2:查看已经接收的邮件 使用3:发送文件内容 1.write命令 (1)write命令的基本信息 命令名称:wri ...
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- 简易发号SQL,可用于生成指定前缀自增序列--改进版
使用merge语法实现新增or更新 首先创建表 CREATE TABLE Test.dbo.Increments ( Prefix varchar(50) NOT NULL, [MaxNum ] bi ...
- [atARC094F]Normalization
考虑$s$能变成$t$的必要条件(假设$s\ne t$): 1.$s$中存在一对相邻字符不同 2.$|s|=|t|$且若将a-c对应为0-2,则字符模3同余: 3.$t$中存在一对相邻两个字符相同 同 ...
- 如何利用 JuiceFS 的性能工具做文件系统分析和调优
JuiceFS 是一款面向云原生环境设计的高性能 POSIX 文件系统,在 AGPL v3.0 开源协议下发布.作为一个云上的分布式文件系统,任何存入 JuiceFS 的数据都会按照一定规则拆分成数据 ...