> 技术文档 > 单片机读取U盘 FATFS文件系统 USB MSC STM32f105 GD32f305 读取U盘 exFAT FAT32_gd32f305 usb

单片机读取U盘 FATFS文件系统 USB MSC STM32f105 GD32f305 读取U盘 exFAT FAT32_gd32f305 usb


一、引言

在嵌入式系统开发中,使用U盘进行数据存储和传输是一种常见且便捷的方式。最近,我在学习如何通过FATFS文件系统和USB MSC协议实现U盘的读写操作,并将其应用于嵌入式系统中。

 ---------------------------------------------------------结尾附上源码-----------------------------------------------------

友情提示:本项目目前并不完善,我在开发过程中遇到了一些问题(如经常性读取失败),尽管借鉴了多个平台的资料,但仍未找到解决方案。希望通过这篇博客,能够遇到有经验的开发者给予指导,非常感谢!

为了排除硬件问题,我新购买了一块开发板,并会在后续更新中分享更多内容。

二、FATFS 文件系统基础

 FATFS是一个开源的文件系统库,支持FAT12、FAT16和FAT32文件系统(也可通过配置支持exFAT格式,但我在使用的芯片中未找到相关配置选项)

FATFS的配置手册详细介绍了如何根据项目需求进行功能配置,手册地址如下:

来自 < http://elm-chan.org/fsw/ff/doc/config.html#use_expand>

FATFS 的特点及库文件

  1. ff.hff.c:文件系统相关的代码

  2. diskio.hdiskio.c:磁盘I/O操作接口代码。

  3. ffconf.h:文件系统版本配置代码,通过配置来开启或关闭特定功能。

  4. 支持多种MCU和操作系统,提供丰富的文件操作接口。

FatFS常用接口 

       FatFS嵌入式文件系统详解-CSDN博客文章浏览阅读8.4k次,点赞4次,收藏40次。1. 简介FatFS是一个适用于小型嵌入式系统的通用的FAT/exFAT文件系统模块。FatFS是使用ANSI C(C89)进行编写的,并且分出了磁盘I/O层,因此它是独立于平台的。不仅仅可以用于各种嵌入式平台,同样台用于Linux、android、MacOS甚至windows平台。主要代码文件:ff.h和ff.c是文件系统相关的代码。diskio.h和diskio.c是磁盘I/O操作接口代码。ffconf.h是文件系统版本配置代码,通过配置来开启关闭功能,可以根据需要提供更小的代码空间占用。_fatfs https://blog.csdn.net/feihe0755/article/details/106364153

     FatFS提供了丰富的文件操作接口,例如打开文件、读取文件、写入文件、关闭文件等。文件的基本操作流程包括挂载、打开、读取/写入和关闭。

三、USB MSC 基础

       USB MSC是USB设备类规范之一,用于定义存储设备(如U盘、移动硬盘)与主机之间的通信协议。

       在嵌入式系统中,选择USB作为主机设备时,MX_USB_HOST_Process函数会自动生成在main.cwhile(1)循环中,用于不断检测USB设备是否插入。

 四、软硬件准备

  • 核心板:GD32F305VCT6(斥候蜂科技)

  • CUBEMx版本:MX.6.12.0

  • 调试工具:sscom串口调试助手

五、CUBEmx配置

 本文暂不详细介绍CUBEMx的配置步骤,因为网上资源丰富,大家可以参考以下大佬的配置教程:

     STM32存储左右互搏 USB接口FATS文件读写U盘_stm32读写u盘-CSDN博客https://blog.csdn.net/hwytree/article/details/130280612?ops_request_misc=&request_id=&biz_id=102&utm_term=stm32%20USB%20%E8%AF%BB%E5%8F%96U%E7%9B%98&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-130280612.nonecase&spm=1018.2226.3001.4187

六、FATFS 与 USB MSC 的结合应用

通过FATFS,我们可以实现对U盘的读取和写入操作。具体步骤如下:

  1. 挂载U盘文件系统。

  2. 打开文件。

  3. 读取或写入数据。

  4. 关闭文件。

  5. 卸载文件系统。

 七、代码分析       (详情可以参考源码 已在文末给出)

      在main.c函数中循环调用MX_USB_HOST_Process()检测是否有USB设备插入

       不断检测USB设备状态,并通过串口打印出来

       然后 Appli_state状态为APPLICATION_READY时,调用应用函数,从而实现对U盘 进行数据读写的功能 

       实验现象

八、源码分享

https://gitee.com/Lucky_17wow/USB-R_W-UDISKhttps://gitee.com/Lucky_17wow/USB-R_W-UDISK

友情提示:本项目并不完善,作者借鉴了多个平台的资料,仍然未发现问题(经常性读取失败),借此希望能遇到大哥指导一下,谢谢!为了排除是否硬件有问题,作者又新买了一块开发板,本文会持续更新!!!

作者为即将毕业的大学生,为提升技术水平,最近开始编写技术分享文章。如有问题或建议,欢迎在评论区交流,我会及时回复。感谢您的阅读!


转载声明:如需转载,请标注原作者及出处。