stm32f4 HAL库 SDIO 踩坑记录

错误提示:卡死的相关函数

MX_SDIO_SD_Init();{HAL_SD_Init(&hsd);{HAL_SD_InitCard(hsd);{SD_PowerON(hsd);}}}

错误提示:HAL_SD_ConfigWideBusOperation 返回error 错位为 HAL_SD_ERROR_REQUEST_NOT_APPLICABLE

错误提示:CMD8 无响应. CMD55无响应

本人用的HAL库版本为 V1.8.2

原因为两个坑.

坑1: cubemx生成的SDIO代码中CMD,D0,D1,D2,D3 引脚 没有配置为上拉.而是浮空,导致的空闲电压不对,导致初始化失败 一系列CMD 命令都无响应. 对相关引脚修改为上拉即可.

坑2:cubemx生成的SDIO代码中,MX_SDIO_SD_Init函数下的

hsd.Init.BusWide = SDIO_BUS_WIDE_4B;   (PS:这里根据cubemx 生成,根据情况不同)

 这里是不对的.初始化过程中应该为1B. 这里修改为hsd.Init.BusWide = SDIO_BUS_WIDE_1B;(PS: 虽然后面第一次初始化 配置成了1B,这里还是要设置为1B.)

这里就不得不说一下 HAL库对SDIO 初始化过程中 对SDIO 配置的次数了. 目前我查看代码得到的是3次.

 第一次, 时钟频率修改为400khz 宽度1B. 进行CMD命令初始化

 第二次,CMD 命令初始化完成后 第二次修改,时钟频率为cubemx中设置,宽度也为cubemx中设置.(这里不应该修改为cubemx的生成参数,而是继续为1b) 后续继续对SD继续通讯.

第三次.在HAL_SD_ConfigWideBusOperation 又进行了一次配置 这次 函数输入参数对宽度 又配置了一次.

      以上两个地方修改完成之后 初始化能够顺利完成.后续再测读写.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

justsure

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值