文件系统应用笔记之一:FatFS在STM32F4上的移植

FatFs文件系统模块的STM32移植操作(基于STM32的SD卡官方例程说明) FatFs文件系统模块的STM32移植操作 阅读详情

  在实现如U盘文件读写,SD卡的文件读写等工作时,我们往往需要一个文件系统来支持我们的工作。特别在一些MCU应用中,文件系统的加入能明显改善系统交互的友好性。在这一篇中,我们就来讨论FatFS文件系统在STM32F4上的移植和应用。

1、准备工作

  在开始FatFS的移植之前我们需要做一些必要的准备工作。首先需要准备相应的硬件平台,我们在这里使用的是STM32F407VET6的操作平台。USB硬件相关的库的移植工作也已完成。

  其次我们还需要准备FatFS的相关源码,在这里我们使用最新的R0.14b版本,该文件可在网站下载:

  http://elm-chan.org/fsw/ff/00index_e.html

  下载的源码解压后有两个文件夹:document和source,其中document文件夹中是相关的文档资料,与网站上的内容一样,在移植时可以查看这些文档来工作。Source文件夹中则是源码相关的文件,主要包括:

  在上图所示的一系列文件中,00readme.txt文件有对各个文件的介绍,我们查看其内容如下:

00readme.txt readme文件
00history.txt 版本记录文件
ff.c FatFs模块
ffconf.h FatFs模块的配置文件
ff.h FatFs应用模块的头文件
diskio.h FatFs和磁盘IO模块的头文件
diskio.c 一个将磁盘IO函数附加到FatFS的实例
ffunicode.c Unicode编码功能函数
ffsystem.c 可选的操作系统相关文件实例

  在这些文件中,ff.c和ff.h是核心文件。ffunicode.c是字符编码,会根据配置文件的配置选择编码。ffsystem.c文件根据自己的需要决定。所以与具体的应用平台相关的,并需要我们来实现的文件是配置文件ffconf.h和磁盘操作文件diskio.h与diskio.c,这几个文件也是我们移植的重点。

2、实现移植

  我们已经完成了移植的准备工作,接下来就来实现面向大容量U盘的应用移植。前面我们已经说过,移植需要处理的文件是配置文件ffconf.h和磁盘操作文件diskio.h与diskio.c。

  关于配置文件ffconf.h其实它本身有一个实例,我们只需要根据需要修改配置就好。这里我们需要修改的配置参数包括:

  所支持的编码方式配置参数FF_CODE_PAGE,这个关系到文件编码的问题,我们将其配置为简体中文支持。

  逻辑驱动器的数量配置参数FF_VOLUMES,FatFS可以同时应用于多个驱动器,所以我们需要根据实际情况配置驱动器的数量。

  时间戳配置参数FF_FS_NORTC,我们大多时候并不需要记录时间戳,所以在这里我们将其关闭。

  余下就是实现磁盘IO操作的相关函数,在FatFS的帮助文档中告诉了我们需要实现的函数有两类:一类是磁盘设备控制相关的函数,主要是获取设备状态函数、初始化设备函数、读取数据函数、写入数据函数以及控制设备相关功能函数;二类是实时时钟操作函数,主要是获取当前时间函数。所以实现这6个函数就是移植的主要工作。

2.1、获取设备状态函数

  磁盘状态检测函数disk_status。用于检测磁盘状态,在ff.c文件中会被调用。其函数原型如下:

  DSTATUS disk_status(BYTE drV);

  根据其原型定义以及我们USB大容量存储设备的要求,我们可以实现磁盘状态获取函数如下:

/*用于USBH的状态获取函数*/
static DSTATUS USBH_status(BYTE lun)
{
   
   
 DRESULT res = RES_ERROR;
 
 if(USBH_MSC_UnitIsReady(&hUsbHostFS, lun))
 {
   
   
  res = RES_OK;
 }
 else
 {
   
   
  res = RES_ERROR;
 }
 
 return res;
}

2.2、初始化设备函数

  存储媒介初始化函数disk_initialize。用于对磁盘设备进行初始化,在ff.c文件中会被调用。其函数原型如下:

  DSTATUS disk_initialize(BYTE drv);

  根据其原型定义以及我们USB大容量存储设备的要求,我们可以实现磁盘驱动器初始化函数,但这里我们其实不需要,因为在USB HOST库中已经完成了初始化,所以直接返回正确就可以了。

/*用于USBH的初始化函数*/
static DSTATUS USBH_initialize(BYTE lun)
{
   
   
  //USB HOST库中已经完成了初始化
 return RES_OK;
}

2.3、读取数据

  读扇区函数disk_read。用于实现对磁盘数据的读取,根据具体的磁盘IO编写,在ff.c文件中会被调用。其函数原型如下:

  DRESULT disk_read(BYTE drv,BYTE*buff,DWORD sector,BYTE.count);

  根据其原型定义以及我们USB大容量存储设备的要求,我们可以实现磁盘数据读取函数如下:

/*用于USBH的读扇区函数*/
static DRESULT USBH_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
{
   
   
 DRESULT res = RES_ERROR;
 MSC_LUNTypeDef info;
 
 if(USBH_MSC_Read(&hUsbHostFS, lun, sector, buff, count) == USBH_OK)
 {
   
   
  res = RES_OK;
 }
 else
 {
   
   
  USBH_MSC_GetLUNInfo(&hUsbHostFS, lun, &info);
 
  switch (info.sense.asc)
  {
   
   
  case SCSI_ASC_LOGICAL_UNIT_NOT_READY:
  case SCSI_ASC_MEDIUM_NOT_PRESENT:
  
stm32f4基于fatfs编写 EXCEL表格并储存与SDNAND中 硬件平台stm32F4 储存芯片 SDNAND或者SD卡都可以 实验代码如下: /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "dma.h" #include "fatfs.h" #include "sdio.h" #include "usart.h" #include "gpio.h" 阅读详情

相关推荐

FatFs文件系统介绍与使用

FatFs 是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。 文件操作使用指南:http://elm-chan.org/fsw/ff/00index_e.html,具体如图一所示。 下载链接在上面的链接Resources的Download页面。 图一 FasFs文件系统API 下面对它所包含的文件进行简单的介绍(本人对于FatFs只是使用过且一知半解...

oyzy_Sean的篝火 6583

FatFS文件系统在MCU上的应用

文件系统是单片机领域有名的一个文件系统,由于它的轻量级和兼容性,备受MCU开发者青睐。在实现如U盘文件读写,SD卡的文件读写等工作时,我们往往需要一个文件系统来支持我们的工作。特别在一些MCU应用中,文件系统的加入能明显改善系统交互的友好性。在这一篇中,我们就来讨论FatFS文件系统在STM32F4上的移植和应用。

m0_61687959的博客 1416

STM32CubeMX实战:5分钟搞定FATFS文件系统移植到SD卡(附完整代码)

本文详细介绍了如何利用STM32CubeMX图形化工具,在5分钟内将FATFS文件系统快速移植到STM32的SD卡上。通过分步配置SDIO接口、DMA和FATFS中间件,并提供了完整的应用层读写代码示例,帮助嵌入式开发者高效实现数据存储功能,大幅节省底层驱动开发时间。

weixin_29184371的博客 688

FATFS R0.15 移植实战:STM32F4 + SD卡实现3文件并发读写(附代码)

本文详细介绍了FATFS R0.15在STM32F4平台上的移植实战,通过SD卡实现3文件并发读写。内容涵盖FATFS的优势解析、硬件平台搭建、底层驱动适配、多文件并发读写方案及高级功能实现,帮助开发者快速掌握嵌入式文件系统的应用与优化。

weixin_34218579的博客 2620

STM32F4 移植FATFS文件系统

FATFS是一个专为嵌入式系统设计的开源FAT/exFAT文件系统模块,采用标准C语言编写,具有良好的跨平台兼容性。其主要特点包括:支持多种FAT格式、多存储设备、文件读写操作等。移植FATFS需要配置ffconf.h文件,并实现diskio.c中的五个关键接口函数:disk_initialize(初始化磁盘)、disk_status(获取磁盘状态)、disk_read(读取扇区)、disk_write(写入扇区)和disk_ioctl(控制命令)。

hazy1k的博客 1314

STM32F4 Discovery开发板上SDIO接口与FATFS文件系统实现

STM32F4 Discovery是ST公司推出的一款基于ARM Cortex-M4处理器的开发板,具有高性能、低功耗的特点。该开发板为开发者提供了一个灵活的平台,用于评估和开发STM32F4系列微控制器的各种功能。SDIO(Secure Digital Input/Output)是一种高速串行通信协议,最初是作为存储卡格式开发,但后来也用于实现其他高速数据接口。SDIO接口支持多模式和多功能操作,它与SD存储卡共享相同的物理层,但拥有更广泛的应用范围,包括摄像头、GPS模块、Wi-Fi适配器等。

weixin_42571280的博客 1097

openEuler 欧拉 安装Oracle19c数据库RPM包安装

欧拉系统安装部署oracle 19c rpm方式

陈苏漾的IT生涯 6880

实战指南:基于ELK与Grafana构建天融信防火墙日志可视化看板

本文详细介绍了如何基于ELK与Grafana构建天融信防火墙日志可视化看板,包括环境准备、日志收集与解析配置、Elasticsearch存储优化、Grafana看板设计等关键步骤。通过实战案例和优化技巧,帮助用户高效处理天融信防火墙日志,实现安全态势的可视化监控与分析。

weixin_34246529的博客 220

300Kg载重履带式无人车底盘定制开发技术详解

通过精准的需求分析、科学的方案设计、严格的研发与测试以及完善的交付与培训流程,可以打造出符合客户需求的优质产品。300Kg载重履带式无人车底盘的定制开发,旨在打造一款承载能力强、行驶稳定、适应复杂地形的无人运输平台。根据应用场景选择合适的动力源,并进行性能优化,确保无人车在载重情况下仍能保持稳定的行驶速度和动力输出。根据需求分析结果,设计无人车底盘的总体方案,包括动力系统选择、结构设计、负载管理策略等。进行详细的研发工作,包括零部件的选型与采购、样机的制作与调试等。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 953

中国境内及周边2839个站点的日降水量逐日降水数据集(1961-2022,0.1°/0.25°/0.5°)1、数据年份:1961-2022,日数据2、数据范围:中国境内及周边2839个站点的日降

CHM_PRE数据集基于中国境内及周边1961至今共2839个站点的日降水观测,在传统的“降水背景场+ 降水比值场”的数据集构建思路上,尝试应用月值降水约束和地形特征校正,并依据中国范围内约4万个高密度站点2015–2019年的日降水量插值后数据进行精度评价。

yushibing717的博客 2777

相机标定-张正友棋盘格标定法

(X,Y,Z)为在世界坐标系下一点的物理坐标 ( u , v ) 为该点对应的在像素坐标系下的像素坐标 引入齐次坐标的原因:引入齐次坐标的目的是为了升维,将坐标从二维坐标变为三维坐标。 2.相机成像过程 相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。 (1)世界坐标系(,,) 描述目标在真实世界中的位置引入的参考坐标系。 (2)相机坐标系(,,) ...

qq_41275123的博客 1万+

MySQL常见面试题汇总(建议收藏!!!)

目录一、索引相关(1)什么是索引?(2)索引是个什么样的数据结构呢?(3)为什么使用索引?(4)Innodb为什么要用自增id作为主键?(5)Hash 索引和 B+ 树索引有什么区别或者说优劣呢?(6)什么是聚簇索引(6)非聚簇索引一定会回表查询吗?(6)聚簇索引和非聚簇索引的区别(6)MyISAM和InnoDB实现B+树索引方式的区别是什么?(6)MySQL中有四种索引类型,可以简单说说吗?(6)覆盖索引是什么?(6)联合索引是什么?为什么需要注意联合索引中的顺序?(6)创建的索引有没有被使用到?或者说怎

蔡政洁的博客 7万+

从菜鸟到大神:VSCode助力HTML开发全攻略

本文全面介绍 VSCode 在 HTML 开发中的高效应用。先引导读者完成 VSCode 的安装与个性化设置,助其快速适应开发环境;接着推荐 Live Server、Prettier 等实用插件,实现实时预览、代码格式化等功能,提升开发效率。通过详细的开发实战步骤,从新建文件到添加样式,带领读者掌握 HTML 基础结构与常用标签使用。还分享代码片段管理、多人协作等进阶技巧,解决常见开发问题。旨在帮助开发者利用 VSCode,轻松高效完成 HTML 开发,打造优质网页。

邓邓子的博客 3353

SolidWorks2020详细步骤安装教程

1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;

qq_53545309的博客 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 电机速度曲线规划1:梯形速度曲线设计与实现
下一篇: 通讯接口应用笔记3:使用W5500实现Modbus TCP服务器
foxclever
博客等级 码龄19年 2933粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值