《ESP32-S3使用指南—IDF版 V1.6》第四十五章 Flash模拟U盘实验

news/2025/11/3 11:29:11/文章来源:https://www.cnblogs.com/zdyz/p/19180425

第四十五章 Flash模拟U盘实验

1)实验平台:正点原子DNESP32S3开发板

2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6

3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子DNESP32S3开发板技术交流群:132780729

155537c2odj87vz1z9vj6l

155537nfqovl2gg9faaol9

本章我们介绍ESP32S3的USB HOST应用,即通过USB HOST功能,将某个分区表实现模拟U盘/读卡器等大容量USB存储设备。
本章分为如下几个小节:
45.1 Flash模拟U盘简介
45.2 硬件设计
45.3 程序设计
45.4 下载验证

45.1 Flash模拟U盘简介
所谓Flash模拟U盘,就类似于我们平常使用的U盘,我们只不过是将单片机与电脑通过USB数据线进行连接,从而进行数据传输。电脑能够识别出单片机通过外部Flash模拟出的U盘,在电脑上能够对该U盘进行文件的相互拷贝,并且重新上电后数据不丢失。通过对USB的了解,USB分设备(Device)模式和主机(Host)模式,使用单片机模拟U盘是让USB工作在设备(Device)模式下。
我们可以利用ESP32自带的USB功能,来实现一个Flash模拟U盘,从而通过USB,实现电脑与ESP32的数据互传。上位机无需编写专门的USB程序,只需要一个串口调试助手即可调试,非常实用。

45.2 硬件设计
45.2.1例程功能
本实验利用ESP32自带的USB功能,通过USB连接电脑后,子分区会在电脑上进行加载,并显示该子分区的容量,我们可测试子分区数据的读写了。
LED闪烁,提示程序运行,USB和电脑连接成功。

45.2.2硬件资源
1.LED灯
LED -IO0

2.独立按键
KEY0(XL9555) - IO1_7
KEY1(XL9555) - IO1_6
KEY2(XL9555) - IO1_5
KEY3(XL9555) - IO1_4

3.XL9555
IIC_SDA-IO41
IIC_SCL-IO42

4.SPILCD
CS-IO21
SCK-IO12
SDA-IO11
DC-IO40(在P5端口,使用跳线帽将IO_SET和LCD_DC相连)
PWR- IO1_3(XL9555)
RST- IO1_2(XL9555)

5.UART_NUM_0(U0TX、U0RX连接至板载USB转串口芯片上)
U0TXD-IO43
U0RXD-IO45

6.USB

45.2.3原理图
本章实验使用USB接口与PC进行连接,开发板板载了一个USB接口,用于连接其他USB设备,USB接口与MCU的连接原理图,如下图所示:

image001

图45.2.3.1 USB接口与MCU的连接原理图

45.3 程序设计
45.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:

image004

图45.3.1.1Flash模拟U盘实验程序流程图

45.3.2 Flash模拟U盘函数解析
ESP-IDF提供了一套API来配置Flash。要使用此功能,需要导入必要的头文件:

#include"ff.h"
#include"diskio.h"
#include"esp_vfs_fat.h"
#include"tinyusb.h"

接下来,作者将介绍一些常用的ESP32-S3中的Flash函数,这些函数的描述及其作用如下:
1,挂载分区函数
该函数用给定的配置,来挂载分区,该函数原型如下所示:

esp_err_tesp_vfs_fat_spiflash_mount_rw_wl(const char*base_path,const char*partition_label,constesp_vfs_fat_mount_config_t* mount_config,wl_handle_t* wl_handle);

该函数的形参描述如下表所示:

QQ截图20251031160758

表45.3.2.1esp_vfs_fat_spiflash_mount_rw_wl ()函数形参描述
该函数的返回值描述,如下表所示:

QQ截图20251031160812

表45.3.2.2函数esp_vfs_fat_spiflash_mount_rw_wl()返回值描述
该函数使用esp_vfs_fat_mount_config_t类型的结构体变量传入,该结构体的定义如下所示:

QQ截图20251031160824

表45.3.2.3esp_vfs_fat_mount_config_t结构体参数值描述
完成上述结构体参数配置之后,可以将结构传递给 esp_vfs_fat_spiflash_mount_rw_wl () 函数,用以挂载分区。
更多有关USB函数的介绍,请读者们回顾上一章节的内容。

45.3.3 Flash模拟U盘驱动解析
在IDF版的34_usb_flash_u例程中,作者在34_usb_flash_u\components路径下新增了Flash驱动文件。
这里我们只讲解核心代码,详细的源码请大家参考光盘本实验对应源码。
本实验,我们将相TinyUSB库文件拷贝到components文件夹下,在APP文件夹下的文件则是我们基于TinyUSB自行编写的代码。最终得到如图45.3.3.1所示的工程:

image005

图45.3.3.1 Flash模拟U盘工程分组
上图中位于components文件夹下的是我们自己编写的一些外设驱动,main文件夹下包含了一个APP文件与一个后缀为.yml的文件。APP文件夹下包含的是FLASH模拟U盘(USB)代码,而后缀为.yml的文件其主要作用是将项目中各组件的依赖项定义在单独的清单文件中,并以上图所示的方式进行命名。在我们的例程中提现出的作用就是简化了整个工程结构。我们在编译的过程中,系统便会帮我们自动生成USB外设所需要的依赖库:espressif_esp_tinyusb以及espressif_tinyusb。做到了即能简化项目工程,又能有效规避了在编译中遇到的错误,但前提是运行时得确保个人的电脑处于联网状态。

45.3.4 CMakeLists.txt文件
打开本实验BSP下的CMakeLists.txt文件,其内容如下所示:

set(src_dirsIICLCDLEDSPIXL9555)set(include_dirsIICLCDLEDSPIXL9555)set(requiresdriver)idf_component_register(SRC_DIRS${src_dirs}
INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})component_compile_options(-ffast-math -O3 -Wno-error=format=-Wno-format)

该路径下的CmakeList文件并没有新增内容,主要变化在于main文件。
打开本实验main文件下的CMakeLists.txt文件,其内容如下所示:

idf_component_register(SRC_DIRS".""app"INCLUDE_DIRS".""app")

上述的红色app驱动需要由开发者自行添加,以确保USB驱动能够顺利集成到构建系统中。这一步骤是必不可少的,它确保了USB驱动的正确性和可用性,为后续的开发工作提供了坚实的基础。
45.3.5 实验应用代码
打开main/main.c文件,该文件定义了工程入口函数,名为app_main。该函数代码如下。

i2c_obj_ti2c0_master;/**
* @brief      程序入口
* @param      无
* @retval     无
*/
voidapp_main(void)
{esp_err_t ret;ret =nvs_flash_init();                             /* 初始化NVS */if (ret ==ESP_ERR_NVS_NO_FREE_PAGES ||ret ==ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret =nvs_flash_init();}ESP_ERROR_CHECK(ret);led_init();                                           /* 初始化LED */i2c0_master =iic_init(I2C_NUM_0);                    /* 初始化IIC0 */spi2_init();                                          /* 初始化SPI */xl9555_init(i2c0_master);                               /* 初始化IO扩展芯片 */lcd_init();                                           /* 初始化LCD *//* 显示实验信息 */lcd_show_string(30, 50, 200, 16, 16, "ESP32-S3", RED);lcd_show_string(30, 70, 200, 16, 16, "USBFLASH TEST", RED);lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);lcd_show_string(30, 110, 200, 16, 16, "status:", RED);tud_usb_flash();                                     /* USB初始化 */while(1){if ((g_usbdev.status& 0x0f) == 0x01){lcd_show_string(110,110,lcd_self.width,16,16,"connectsuccess.....",BLUE);}else if ((g_usbdev.status& 0x0f) == 0x00){lcd_show_string(110,110,lcd_self.width,16,16,"connectfail........",BLUE);}LED_TOGGLE();vTaskDelay(500);}
}

此部分代码比较简单,通过tud_usb_flash()等函数初始化USB。由于该实验例程需要系统将storage分区模拟成U盘,所以在该函数中需要初始化SPIFFS分区,其次是用USB设备安装函数,用以USB设备登记。同时,LCD显示实验信息,LED闪烁以示程序正在运行。

45.4下载验证
将程序下载到开发板后(注意:USB数据线,要插在USB端口!而不是UART端口!),我们打开设备管理器(我用的是WIN10),在端口(COM和LPT)里面可以发现多出了一个COM25的设备,这就是USB虚拟的串口设备端口,如下图所示:

image007

图45.4.1 通过设备管理器查看USB虚拟的串口设备端口
如图45.4.1,ESP32通过Flash模拟U盘,被电脑识别了,通用串行总线控制器显示的是:USB大容量存储设备(其实也不算大,也就差不多4MB...)。此时,开发板的LED在闪烁,提示程序运行。开发板的LCD显示“connect success.....”,如下图所示:

image009

图45.4.2 USB虚拟串口连接成功
然后我们打开“我的电脑”,可以看见界面显示了通过Flash模拟U盘后的容量大小,如下图所示:

image011

图45.4.3 ESP32 Flash模拟U盘测试
至此,Flash模拟U盘实验就完成了,通过本实验,我们就可以利用ESP32的Flash进行U盘模拟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么 Spring Boot 3 要求 JDK 最低版本为 17?全面深度解析

Spring Boot 3.0 于 2022 年 11 月正式发布,标志着 Spring 生态的一次重大升级。其中最引人注目的变化之一,就是 强制要求运行环境为 JDK 17 或更高版本。这一决策不仅影响了数百万 Java 开发者的升级路径,也引发了…

Windows的远程桌面程序,连接到别的电脑后,无法使用 复制粘贴,怎么办

在远程电脑的远程桌面会话中,按下 Ctrl + Shift + Esc打开任务管理器。 2. 在“进程”或“详细信息”标签页中,找到名为 rdpclip.exe的进程。 3. 选中它,然后点击右下角的“结束任务”或“结束进程”。 4. 接下来,…

2025年抗裂腻子粉生产商权威推荐榜单:内墙柔性腻子粉/耐水腻子粉/环保腻子粉源头厂家精选

在建筑装饰行业,抗裂腻子粉作为墙面处理的关键材料,其性能直接影响到墙面的平整度、耐久性和环保性。随着市场对高品质建材需求的提升,抗裂腻子粉生产商的技术实力和产品质量成为用户关注的焦点。本文基于行业数据、…

Flink-介绍

Flink 运行模式模式名称依赖环境高可用支持弹性伸缩部署复杂度适用场景优点缺点Local 模式无否否★个人开发、功能调试、学习测试:适用于单机运行,快速验证逻辑,不需要集群。部署最简单,只需本地安装 Flink;无需额…

2025 年攻牙机源头厂家最新推荐排行榜:聚焦核心技术与定制能力,精选实力企业采购指南铝材钻孔攻牙机/多轴自动攻牙机公司推荐

引言 当前制造业向精密化、自动化转型,攻牙机作为关键加工设备,其品质直接决定生产效率与产品精度。但市场上厂家资质混杂,部分企业缺乏核心技术导致设备稳定性差,无法满足航空航天、汽车制造等高端领域需求;部分…

2025年金黄色聚合氯化铝制造企业权威推荐榜单:喷雾干燥型聚合氯化铝/棕褐色聚合氯化铝/碱式聚合氯化铝源头厂家精选

在水处理行业日益严格的环保标准下,金黄色聚合氯化铝作为高效絮凝剂的需求持续增长,其制造企业的选择成为行业关注焦点。 随着“双碳”目标深化推进,环保法规对水质处理标准的要求持续升级,聚合氯化铝等水处理药剂…

xxl-job provider netty_http server caught exception

xxl-job放到docker容器中,相应的执行器也放到了容器中,但是监控执行器的日志,频繁的抛出xxl-job provider netty_http server caught exception异常,不解。 如下的错误信息: 11:08:05.383 [nioEventLoopGroup-5-3…

2025 年滑台源头厂家最新推荐口碑排行榜:精选行业实力口碑俱佳企业,涵盖直线 / 电动 / 线性 / 同步带 / 丝杆滑台

引言 在工业自动化高速发展进程中,滑台作为核心传动元件,其品质与服务直接关系到企业生产效率与成本控制。为帮助企业精准筛选优质厂家,行业协会联合专业测评机构开展了滑台源头厂家专项测评,测评覆盖产品精度、使…

2025 最新推荐!钻孔机定制厂家权威排行榜发布,全品类非标定制实力品牌 + 技术测评优选指南强力/轮毂多孔钻孔机/钻孔机专机定制公司推荐

引言 在制造业高效升级浪潮中,钻孔机的定制精度与设备稳定性直接决定生产效能。但市场品牌繁杂,超 60% 企业曾遭遇定制方案适配性不足、设备故障频发等问题。为此,行业协会联合检测机构开展专项测评,采用 “四维评…

2025年新疆初三复读班权威推荐榜单:户籍地中考复读/中考复读/初三补习班学校精选

新疆初三复读教育市场经过多年发展,已形成多元化、分层化的教育服务体系。随着中考竞争日趋激烈,家长和学生对高质量复读教育的需求日益增长,促使复读机构不断提升教学质量和服务水平。 行业现状与发展趋势 新疆初三…

2025 年最新电缸源头厂家推荐排行榜:聚焦优质供应企业,助力企业精准选择传动元件合作伙伴同步带电缸/电动缸公司推荐

引言 在工业自动化进程持续加速的当下,电缸作为关键传动元件,其品质、交期、服务与性价比,直接关系到企业自动化生产线的效率、成本及稳定性。然而当前市场中,电缸源头厂家数量繁杂,产品质量参差不齐,企业采购时…

从客户流失到口碑爆棚:我们如何用ttkefu让满意度飙升30%

从客户流失到口碑爆棚:我们如何用ttkefu让满意度飙升30% "叮——"2024年3月的一个深夜,我盯着后台跳动的客服数据,额头渗出冷汗:凌晨2点的咨询量突破500条,但人工客服只剩3人在线。客户在评论区怒骂&q…

这是一场豪赌

这是一场豪赌 题目描述 小徐(上帝角色)准备了 $n$ 个盒子,其中恰有一个盒子里放着礼物,其余盒子都是空的。 小张和小樊轮流进行“猜盒子”游戏,小张先手,整个过程分为两部分,如下。 「选择阶段」:当前玩家从剩…

2025.11.03

请求必须一样,同样的两个请求 测试的步骤,测试计划,使用jmeter进行测试的起点 测试目的,核心目的是在软件开发生命周期早期发现缺陷,降低修复成本,并通过验证系统组件交互来提升整体稳定性,安全性和效率, 尤其…

MIT_65840测试网络环境的搭建与实现

MIT_65840测试网络环境的搭建与实现 由于 MIT_65840 实际上实现的大部分是分布式算法相关的内容, 或者更加关注 Client 和 Server 的操作, 因此透明化了 Client 和 Server 之间的通信, 分布式系统中 Client 和 Server …

特征提取之自动编码器

自动编码器(Autoencoder, AE)是一种人工神经网络,主要用于无监督学习,目标是学习输入数据的高效表示(编码)。其核心思想是通过尝试重构(reconstruct)原始输入数据来实现自我学习。基本结构与原理 自动编码器由…

2025 年最新推荐!天津网站建设公司综合实力排行榜:含外贸、高端、模板建站等领域,助力企业选靠谱服务商

引言 随着数字化转型加速,企业对网站建设的需求愈发多元,从外贸独立站到 H5 交互站点,不同场景下的建站需求对服务商专业度提出更高要求。为帮助企业精准筛选优质服务商,行业协会联合第三方测评机构开展专项测评,…

2025年新疆高三复读班权威推荐榜单:高三集训班/高三冲刺班/高三复读全日制学校精选

新疆高三复读教育市场经过多年发展,已形成多元化、分层化的教育服务体系。随着高考竞争日趋激烈,家长和学生对高质量复读教育的需求日益增长,促使复读机构不断提升教学质量和服务水平。 行业现状与发展趋势 新疆高三…

2025 年最新磁健大健康烯磁 60 床垫厂家推荐榜:精选优质品牌,展现卓越品质与专业实力磁健/巴马地磁/地磁 60 床垫公司推荐

引言 随着大健康产业持续发展,健康寝具市场需求不断攀升,烯磁 60 床垫凭借独特磁疗与智能健康属性,成为消费者关注焦点。但行业内部分厂家缺乏核心技术、产品质量不稳定,为帮助消费者精准选择,专业寝具协会联合第…

服务器文件夹自动同步解决方案,实现高效、安全的数据管理

在当前数据驱动的商业环境中,企业越来越依赖高效的文件管理系统。Ftrans FTC文件传输管控系统通过自动同步方案,优化了服务器文件夹的管理方式。该系统帮助企业按需创建并管理文件传输任务,保障数据在转移过程中的安…