I have problem with using stm32 drivers for connection to eMMC.https://datasheet.lcsc.com/lcsc/2205071500_Zetta-ZDEMMC04GA_C3010207.pdf
Problem is that the initialization is stuck in loop, when performing HAL_MMC_GetCardCSD(hmmc, &CSD) function. I'm using sdio MMC 4bus connection. With default configuration generated with cube MX. Whole CubeIDE project: https://drive.google.com/file/d/11SYNmtlIMufuW7qhBfG2uZRTAETRmxBl/view?usp=sharing
INITIALIZATION FUNCTION:
static void SDIO_MMC_Init(void){
hmmc.Instance = SDIO;
hmmc.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hmmc.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hmmc.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hmmc.Init.BusWide = SDIO_BUS_WIDE_4B;
hmmc.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hmmc.Init.ClockDiv = 0;
if (HAL_MMC_Init(&hmmc) != HAL_OK){
Error_Handler();
}
if (HAL_MMC_ConfigWideBusOperation(&hmmc, SDIO_BUS_WIDE_4B) != HAL_OK){
Error_Handler();
}
}
MSP_INITIALIZATION
void HAL_MMC_MspInit(MMC_HandleTypeDef* hmmc)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(hmmc->Instance==SDIO)
{
/* USER CODE BEGIN SDIO_MspInit 0 */
/* USER CODE END SDIO_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SDIO_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/**SDIO GPIO Configuration
PC8 ------> SDIO_D0
PC9 ------> SDIO_D1
PC10 ------> SDIO_D2
PC11 ------> SDIO_D3
PC12 ------> SDIO_CK
PD2 ------> SDIO_CMD
*/
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* USER CODE BEGIN SDIO_MspInit 1 */
/* USER CODE END SDIO_MspInit 1 */
}
}