单片机读取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 的特点及库文件
-
ff.h 和 ff.c:文件系统相关的代码。
-
diskio.h 和 diskio.c:磁盘I/O操作接口代码。
-
ffconf.h:文件系统版本配置代码,通过配置来开启或关闭特定功能。
-
支持多种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是文件系统版本配置代码,通过配置来开启关闭功能,可以根据需要提供更小的代码空间占用。_fatfshttps://blog.csdn.net/feihe0755/article/details/106364153
FatFS提供了丰富的文件操作接口,例如打开文件、读取文件、写入文件、关闭文件等。文件的基本操作流程包括挂载、打开、读取/写入和关闭。
三、USB MSC 基础
USB MSC是USB设备类规范之一,用于定义存储设备(如U盘、移动硬盘)与主机之间的通信协议。
在嵌入式系统中,选择USB作为主机设备时,MX_USB_HOST_Process
函数会自动生成在main.c
中while(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盘的读取和写入操作。具体步骤如下:
-
挂载U盘文件系统。
-
打开文件。
-
读取或写入数据。
-
关闭文件。
-
卸载文件系统。
七、代码分析 (详情可以参考源码 已在文末给出)
在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
友情提示:本项目并不完善,作者借鉴了多个平台的资料,仍然未发现问题(经常性读取失败),借此希望能遇到大哥指导一下,谢谢!为了排除是否硬件有问题,作者又新买了一块开发板,本文会持续更新!!!
作者为即将毕业的大学生,为提升技术水平,最近开始编写技术分享文章。如有问题或建议,欢迎在评论区交流,我会及时回复。感谢您的阅读!
转载声明:如需转载,请标注原作者及出处。