How to config SDIO with FATFS?
Hi all,
I config the SDIO & FATFS by cubeMx for my STM32F429BI board.
When I config the SDIO to SDIO_BUS_WIDE_1B, everything is work well; Even the generated MX_SDIO_SD_Init() is NOT calling the HAL_SD_Init() function. (Why don't need HAL_SD_Init() , is this some mistake?)
void MX_SDIO_SD_Init(void)
{
HAL_StatusTypeDef hal_sta;
hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 0;
}
However, when I change SDIO_BUS_WIDE_1B to SDIO_BUS_WIDE_4B, the operate to SD card is error.
But when I change the code to below, the program works well again:
void MX_SDIO_SD_Init(void)
{
HAL_StatusTypeDef hal_sta;
hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 0;
hal_sta = HAL_SD_Init(&hsd);
if(hal_sta != HAL_OK) {
LOG_ERR("SD init err[%d]\n", hal_sta);
}
hal_sta = HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B);
if(hal_sta != HAL_OK) {
LOG_ERR("SD configWideBus err[%d]\n", hal_sta);
} else {
LOG_DBG("SD configWideBus to 4bit ok\n");
}
}
I can't understand what the difference to config the BusWide between HAL_SD_Init() and HAL_SD_ConfigWideBusOperation();
Could someone can explain it, thank you!
