STM32平台SD卡的FatFS文件系统开发
)
这是个混合功能函数,用于IO口的控制,传入的参数第一个是设备名称,第二个是命令,第三个是命令是读/写时返回的数据缓存。
2 实现文件的读写
2.1 实现读取
在SD中根目录下有一个MyLog文件夹,文件夹内有一个名为123.txt的文件,要去取其中的内容,并通过串口输出,代码如下。
2024-11-02 14:57:31
STM32平台SD卡的FatFS文件系统开发
系统平台:
STM32系列的STM32F103ZE
SPI方式与SD卡通信
SD上移植FatFS系统
1 FatFS文件系统
1.1 FatFS简介
FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构,可以被嵌入到低成本的微控制器中,如AVR, 8051, PIC, ARM, Z80, 68K 等等,而不需要做任何修改。

特点:
- Windows兼容的FAT文件系统
- 不依赖于平台,易于移植
- 代码和工作区占用空间非常小
- 多种配置选项
- 多卷(物理驱动器和分区)
- 多ANSI/OEM代码页,包括DBCS
- 在ANSI/OEM或Unicode中长文件名的支持
- RTOS的支持
- 多扇区大小的支持
- 只读,最少API,I/O缓冲区等等
1.2 FatFS文件系统移植
FatFS文件系统移植需要的几个关键文件如下。
l ff.c(不动) 文件系统的实现代码,里面主要是FatFS文件系统源码,移植的时候不需要修改;
l diskio.h(不动) 声明diskio.c文件中需要的一些接口函数和命令格式;
l diskio.c(自写) 这个文件是文件系统底层和SD驱动的中间接口的实现代码,移植的时候需要改写在diskio.h中声明的那几个函数,代码在ff.c中被调用;
l integer.h(微改) 这是FatFS用到的数据类型定义,按移植的平台修改;
l ff.h(不动) 是FatFS的文件系统的函数(在ff.c中)声明,以及一些选项的配置,具体选项及详细说明在文件中都有;
l ffconf.h(按需要) 这个是在FatFS的0.08a版本中有看到,0.06版本中还没有,是关于FatFS系统模块的一些配置;
综上,需要修改的就是diskio.c文件,主要是6个函数,描述如下。
- DSTATUS disk_initialize (BYTE pdrv /* Physical drive nmuber (0..) */)
初始化函数,调用编写的SD卡初始化函数,成功返回0,失败返回其它。
- DSTATUS disk_status (BYTE pdrv /* Physical drive nmuber (0..) */)
设备状态函数,只支持一个设备,若pdrv大于0,则返回错误;否则返回SD的状态,若初始化成功,返回0,否则其它。
- DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to read (1..128) */
)
读函数,传入的参数是设备名称,用于保存读到的数据的缓存,扇区地址,扇区个数。
分为一个扇区和多个扇区,两者需要给SD卡发送不同的命令。
- DRESULT disk_write (
BYTE pdrv, /* Physical drive nmuber (0..) */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..128) */
)
写函数,传入的参数是设备名称,要写的数据地址,扇区地址,扇区个数。
同样分为一个扇区和多个扇区,两者给SD卡发送的命令也不一样。
- DWORD get_fattime (void)
用于获取系统当前的unix时间。
- DRESULT disk_ioctl (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive control data */
)
这是个混合功能函数,用于IO口的控制,传入的参数第一个是设备名称,第二个是命令,第三个是命令是读/写时返回的数据缓存。
2 实现文件的读写
2.1 实现读取
在SD中根目录下有一个MyLog文件夹,文件夹内有一个名为123.txt的文件,要去取其中的内容,并通过串口输出,代码如下。

2.2 实现写入
写入时,直接调用f_write函数,需要说明的是,此函数只能完成将数据写入到SD卡的扇区中,实际在Windows下仍然看不到内容。必须要执行f_sync(&fsrc),将内容同步到文件,这样才能看到文件中的内容,主要代码如下。

STM32平台SD卡的FatFS文件系统开发的更多相关文章
- 第37章 基于SD卡的FatFs文件系统—零死角玩转STM32-F429系列
第37章 基于SD卡的FatFs文件系统 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...
- STM32之SD卡
目录 一.SD卡概述 1.定义 2.容量等级 3.SD卡框图 4.SD卡与TF卡的区别 二. SD卡内部结构 1. SD卡内部结构简图 2. 存储阵列结构图 3.Buffer 4.“存储阵列Block ...
- stm32 向W25Q256FLASH中通过 FATFS文件系统写入数据 写多了之后出现错误,之前存储的全都找不到了
stm32 像W25Q256FLASH中通过 FATFS文件系统写入数据 写多了之后出现错误,之前存储的全都找不到了 http://firebbs.cn/thread-23490-1-1.html ...
- stm32和sd卡
SD卡从容量上讲分两种:标准容量和大容量,最小的是标准容量,小于等于2G 其中的访问关系如下: SD卡分为两种模式:认证模式和传输模式,每一个模式包含着不同的状态,如下 以下主要讲其初始化过程: SD ...
- 挂载镜像SD卡的FAT32文件系统分区到Linux中
首先使用fdisk –l命令查看sd卡的分区息 可以看到,sd卡有三个分区,第一个分区是FAT32系统,主要存放内核img文件和dtb文件,第二个分区是Linux系统分区,第三个分区格式未知,实际是U ...
- 野火STM32 Flash&sd卡模拟U盘
在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 //mass_mal.c /* Includes ------------------ ...
- 联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 荣品RP4412开发板烧写Ubuntu系统应注意SD卡内存大些
问:RP4412开发板用SD卡烧写光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化, 利用usb来升级啊, 也有文档,看升级文档. 问: 这个是怎么回事? 答:你是升级什么系统? ...
- SD卡FAT32文件系统格式
一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...
随机推荐
- 梯度寻优与logistic算法
一.一些基本概念 最优化:在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优.高中学过的线性规划就是一类典型的最优化问题. 凸集:在集合空间中,凸集就是一个向四周凸起的图形.用数学 ...
- CSS实现响应式布局(自动拆分几列)
1.css代码 <style type="text/css"> .container{ margin-top: 10px; } .outerDiv{ float:lef ...
- 4、springboot之全局异常捕获
1.新建一个springboot项目 添加一个全局异常的类 import org.springframework.web.bind.annotation.ControllerAdvice; impor ...
- oauth2.0授权码模式详解
授权码模式原理 授权码模式(authorization code)是功能最完整.流程最严密的授权模式.它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动. 它 ...
- Eclipse常用操作
一 Eclipse常用快捷键 ctrl+Q:跳到最后一次编辑处. ctrl+F:在当前文件中查找并替换. ctrl+T:查看类的继承关系. alt+左箭头:返回到光标的上一个位置. alt+右箭头:前 ...
- 小小的js
//安全登陆不允许iframe嵌入 if (window.top !== window.self) { window.top.location = window.location; } 使用filte ...
- 数据结构----线性表顺序和链式结构的使用(c)
PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写 ...
- 任务十四:零基础JavaScript编码(二)
任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM ...
- SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking
Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式.Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分.比如一 ...
- 电脑断电后Everything部分文件搜索不到的解决办法
常规检查:查看选项→索引→NTFS,确认所有分区都[包含到数据库],确认后,再删除数据库文件,点击[强制重建] 下面方法是亲身经历,是断电造成的,费了不少时间才解决,现分享出来: 断电后,Everyt ...