[STM32F4] STM32F4 USB OTG 全速模式大容量存储

[复制链接]
309|57
abotomson 发表于 2026-10-17 10:05 | 显示全部楼层
当使用 OTG_HS 内核但工作在 FS 模式时,必须将端点数据包大小从 HS 模式的 512 字节修改为 FS 模式的 64 字节。如果代码中仍使用 512 字节的配置,主机在枚举阶段会因端点大小协商失败而拒绝加载设备。
zerorobert 发表于 2026-10-17 11:28 | 显示全部楼层
全速模式下USB端点配置是否正确?
youtome 发表于 2026-10-17 13:51 | 显示全部楼层
使用全速USB线缆,确保USB接口接触良好
Jacquetry 发表于 2026-10-17 16:10 | 显示全部楼层
检查DP/DM引脚上拉,确保内部上拉使能,同时确认MSC类初始化端点配置无误。
梦境漫游者 发表于 2026-10-17 16:18 | 显示全部楼层
检查DP/DM引脚上拉电阻,确认是否接错或未上拉。如果上拉电阻正确,尝试更换8MHz晶振为12MHz,看是否改善时钟精度问题。
saservice 发表于 2026-10-17 20:27 | 显示全部楼层
优先检查 usbd_conf.h 中的 MSC_MAX_PACKET_SIZE 定义,并增大启动文件中的堆栈大小。
adolphcocker 发表于 2026-10-18 14:14 | 显示全部楼层
设备必须返回正确的扇区数和扇区大小
LightCatcher 发表于 2026-10-18 15:26 | 显示全部楼层
检查MSC类初始化端点配置,确保端点0和1正确,同时确认时钟配置无误,FS模式可能对时钟精度敏感。
claretttt 发表于 2026-10-18 17:56 | 显示全部楼层
MSC 类需要固件正确实现 STORAGE_GetCapacity_FS 和 STORAGE_Read_FS 等回调函数,以向主机报告 SD 卡的容量和读取数据。如果这些函数缺失或返回错误值,主机在获取容量阶段就会失败。
everyrobin 发表于 2026-10-19 09:22 | 显示全部楼层
为什么配置后立刻 Reset?              
albertaabbot 发表于 2026-10-19 13:56 | 显示全部楼层
STM32 的 OTG_FS/OTG_HS 外设通常需要通过 PA9检测 USB 主机的 5V 供电。如果该引脚配置不当,USB 外设可能无法正常启动。
macpherson 发表于 2026-10-19 14:47 | 显示全部楼层
用第三方USB MSC库或简化实现
亚瑟 发表于 2026-10-19 15:05 | 显示全部楼层
检查MSC端点配置,确认0为控制端点,1为MSC数据端点。调试MSC初始化回调,确保数据传输正确。若问题依旧,考虑检查VBUS检测电路或时钟精度问题。
mickit 发表于 2026-10-19 16:42 | 显示全部楼层
建议你在 usbd_storage_if.c 的所有回调函数中增加详细的调试打印
wilhelmina2 发表于 2026-10-19 17:31 | 显示全部楼层
SD卡初始化是否在USB初始化前完成?
寂静之回响 发表于 2026-10-20 19:19 | 显示全部楼层
你提到的问题,我之前也遇到过。首先,确认你的时钟设置是否正确,全速模式下需要48MHz时钟。其次,检查DP/DM引脚的上拉电阻是否正确连接,有时候硬件上拉不足会导致设备无法进入全速状态。另外,你的调试打印显示两次USB_device_reset,这可能是主机在等待响应时超时,你可以尝试增加一些超时时间或者检查你的MSC类初始化回调函数是否正确处理了数据传输。
tifmill 发表于 2026-10-21 11:20 | 显示全部楼层
从调试日志和现象看,关键问题在于USB MSC设备枚举流程不完整
低语之树 发表于 2026-10-22 15:09 | 显示全部楼层
检查MSC类初始化端点配置,确认端点0是控制端点,端点1是MSC数据端点。同时,检查时钟配置,确保48MHz时钟稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部