错误提示:卡死的相关函数
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 又进行了一次配置 这次 函数输入参数对宽度 又配置了一次.
以上两个地方修改完成之后 初始化能够顺利完成.后续再测读写.