ST意法半导体
直播中

李欢

8年用户 1144经验值
私信 关注
[问答]

进行SD卡格式化的时候,会报错FR_DISK_ERR,怎么解决?

  在进行SD卡格式化的时候,会报错FR_DISK_ERR,具体原因是在写函数中在
if(__SDMMC_GET_FLAG(SDMMCx, SDMMC_FLAG_CtiMEOUT)){  __SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_FLAG_CTIMEOUT);  return SDMMC_ERROR_CMD_RSP_TIMEOUT;}里面退出了,返回了SDMMC_ERROR_CMD_RSP_TIMEOUT,查手册,这一位代表的是SDMMC->STA寄存器的第4位,
Bit 4 TXUNDERR: Transmit FIFO underrun errorNote: If DMA is used to fill SDMMC FIFO (DMAEN bit is set in SDMMC_DCTRL register),user software should disable DMA stream, and then write DMAEN with ‘0’ (to disableDMA request generation).有大佬遇到过这个问题吗?怎么解决呢?

回帖(1)

李鸿

2025-3-11 17:14:51

在SD卡格式化过程中遇到 FR_DISK_ERR 错误,并且具体问题出现在 SDMMC_FLAG_CTIMEOUT 超时错误时,通常与SD卡与控制器之间的通信问题有关。根据你提供的信息,错误发生在写操作中,并且涉及到 SDMMC_FLAG_CTIMEOUTTXUNDERR 错误。以下是可能的解决方法:




1. 检查SD卡硬件连接



  • 确保SD卡与控制器之间的物理连接良好,尤其是时钟线和数据线。

  • 检查SD卡引脚是否有氧化或接触不良的情况。

  • 如果使用SD卡适配器,确保适配器没有问题。




2. 检查SD卡状态



  • 确保SD卡没有损坏或文件系统损坏。可以尝试将SD卡插入电脑或其他设备,检查是否能够正常读写。

  • 如果SD卡损坏,可能需要更换一张新的SD卡。




3. 调整SDMMC时钟频率



  • SDMMC_FLAG_CTIMEOUT 错误通常与时钟频率过高或过低有关。尝试降低SDMMC的时钟频率,看看问题是否解决。

  • 在初始化SD卡时,确保时钟频率在SD卡支持的范围内(通常SD卡支持25MHz-50MHz)。




4. 检查FIFO和DMA配置



  • 根据手册提示,TXUNDERR 错误可能与FIFO下溢有关。如果启用了DMA,确保DMA配置正确,并且DMA能够及时填充FIFO。

  • 检查 SDMMC_DCTRL 寄存器中的 DMAEN 位是否正确配置。

  • 如果问题仍然存在,可以尝试禁用DMA,使用轮询模式进行数据传输,看看是否能够解决问题。




5. 检查SD卡初始化流程



  • 确保SD卡的初始化流程正确。SD卡在初始化时需要发送特定的命令序列(如CMD0、CMD8、ACMD41等),并等待SD卡响应。

  • 如果初始化流程不正确,可能导致后续操作失败。




6. 检查电源稳定性



  • SD卡对电源电压和稳定性要求较高。确保SD卡的供电电压在3.3V左右,并且电源纹波较小。

  • 如果电源不稳定,可能导致SD卡无法正常工作。




7. 调试与日志



  • 在代码中添加调试信息,检查SD卡操作的每一步是否正常。

  • 如果可能,使用逻辑分析仪或示波器检查SDMMC总线的信号波形,确认是否有异常。




8. 更新固件或库



  • 如果使用的是第三方库(如FatFS或HAL库),确保库的版本是最新的,并且与硬件兼容。

  • 检查是否有已知的Bug或修复补丁。




9. 尝试其他SD卡



  • 如果以上方法都无法解决问题,可以尝试使用其他SD卡,排除SD卡本身的问题。




总结


FR_DISK_ERRSDMMC_FLAG_CTIMEOUT 错误通常与硬件或通信问题有关。通过检查硬件连接、调整时钟频率、优化DMA配置等方法,可以逐步定位并解决问题。如果问题仍然存在,建议结合调试工具进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分