STM32- Can not initialize eMMC, because is stuck in performing GetCardCSD() function

243 Views Asked by At

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

Clock setting.

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 */
  }
}
0

There are 0 best solutions below