[STM32L4] STM32L4 + USB MSD + FatFS 的限制

[复制链接]
210|45
macpherson 发表于 2026-10-6 20:11 | 显示全部楼层
SDMMC FIFO空时如何避免SD_RX_OVERRUN?
maudlu 发表于 2026-10-7 08:48 | 显示全部楼层
DMA读溢出 可能与DMA配置、中断优先级或调试器干扰有关。
juliestephen 发表于 2026-10-8 12:41 | 显示全部楼层
USB MSD与SD共享DMA通道冲突解决?
vivilyly 发表于 2026-10-12 13:50 | 显示全部楼层
USB MSD下DMA写卡死 极大概率是FreeRTOS任务堆栈不足导致,增大栈空间是关键。
belindagraham 发表于 2026-10-15 15:09 | 显示全部楼层
在USB MSD的写回调中,先通过USBD_LL_FlushEP清空USB端点,再触发SDMMC的DMA写,避免时序错位。
sanfuzi 发表于 2026-10-15 19:10 | 显示全部楼层
启用双缓冲DMA、提高DMA优先级、调整FIFO阈值;使用阻塞模式读取小数据块。
光影捕手 发表于 2026-10-16 13:50 | 显示全部楼层
L4 DMA 读 SD,确实受 FIFO 大小和内核读取速度影响。尝试调整 FIFO 阈值,让 DMA 提前搬运,或者降频运行 SDMMC,观察效果。
zerorobert 发表于 2026-10-17 13:16 | 显示全部楼层
USB MSD的DMA与SDMMC DMA可能使用了相同的DMA通道或中断资源,导致传输互锁。
wwppd 发表于 2026-10-17 15:48 | 显示全部楼层
STM32L476 的 AHB 总线时钟最高只有 80 MHz,而 SDMMC 控制器挂在 AHB 上。当 SD 时钟设为 24MHz 时,数据速率已经接近 AHB 总线的承载极限,加上 CPU、DMA、其他外设的总线竞争,很容易出现 FIFO 来不及清空的情况。
WhisperingTrees 发表于 2026-10-17 16:46 | 显示全部楼层
试试调整SDMMC时钟到更低的分频,或增加FIFOTH阈值,降低DMA启动阈值。
mattlincoln 发表于 2026-10-17 16:48 | 显示全部楼层
时钟分频器“+2” 是硬件特性,降至12MHz是为了匹配内核读取能力。
lihuami 发表于 2026-10-17 19:59 | 显示全部楼层
USB DMA与SDMMC DMA的资源冲突或配置不兼容
Jacquetry 发表于 2026-10-18 14:54 | 显示全部楼层
你的SDMMC时钟分频问题,我遇到过。降频后DMA读写正常了。USB MSD的DMA读写问题,试试将DMA读改为双缓冲加阻塞模式,稳定多了。
i1mcu 发表于 2026-10-18 16:47 | 显示全部楼层
某些SD卡在较高时钟下可能不稳定。如果条件允许,可以更换不同品牌或型号的SD卡进行对比测试。
eefas 发表于 2026-10-18 18:31 | 显示全部楼层
对齐DMA缓冲为FIFO深度整数倍,配置块传输和FIFO阈值
rosemoore 发表于 2026-10-18 19:34 | 显示全部楼层
虽然 L4 没有 D-Cache,但 USB 库和 FatFS 可能使用不同的缓冲区管理策略,导致数据还没从 USB FIFO 完全搬到 SRAM,SDMMC 就开始读取,读到的是旧数据或空数据。
chenci2013 发表于 2026-10-19 08:04 | 显示全部楼层
FATFS自定义磁盘IO函数示例代码?
cashrwood 发表于 2026-10-19 09:08 | 显示全部楼层
检查DMA配置              
mollylawrence 发表于 2026-10-19 11:37 | 显示全部楼层
分离DMA通道、降低USB任务优先级、临时切换SDMMC为阻塞模式。
wilhelmina2 发表于 2026-10-19 13:05 | 显示全部楼层
分配独立DMA通道,优化USB与SDMMC的时序同步,或暂用阻塞模式并在块大小上做优化。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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