最新HAL库SDMMC初始化SD报HardFault

1.因为1G 2G的卡刚好是V2.0的版本,而手上的128M刚好是V1.x的版本。在stm32f1xx_hal_sd.c的SD_PowerON方法中,会先发送CMD8指令判断当前SD卡的版本,如果有响应就是V2.0,没有响应就是V1.X版本或者MMC卡。 hal库中SDMMC_CmdOperCond这个方法会先发送CMD8指令然后调用SDMMC_GetCmdResp7方法接收响应的数据,而128M的卡是V1.x的低版本,没有响应会报超时SDMMC_ERROR_CMD_RSP_TIMEOUT错误。(SD_PowerON->SDMMC_CmdOperCond->SDMMC_GetCmdResp7)

2.但在SD_PowerON中,竟然判断SDMMC_ERROR_TIMEOUT而不是SDMMC_ERROR_CMD_RSP_TIMEOUT

3.因此需要将stm32h7xx_hal_sd.c的3047行改为:

  if (errorstate == SDMMC_ERROR_TIMEOUT||errorstate==SDMMC_ERROR_CMD_RSP_TIMEOUT) /* No response to CMD8 */

4.重新编译调试即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值