Configure the speed bus mode.
2763 HAL_StatusTypeDef status =
HAL_OK;
2768 hsd->State = HAL_SD_STATE_BUSY;
2770 if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE)
2774 case SDMMC_SPEED_MODE_AUTO:
2776 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2777 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2779 hsd->Instance->CLKCR |= 0x00100000U;
2785 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2790 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED)
2795 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2805 case SDMMC_SPEED_MODE_ULTRA:
2807 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2808 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2810 hsd->Instance->CLKCR |= 0x00100000U;
2814 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2820 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2825 case SDMMC_SPEED_MODE_DDR:
2827 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2828 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2830 hsd->Instance->CLKCR |= 0x00100000U;
2834 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2840 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2845 case SDMMC_SPEED_MODE_HIGH:
2847 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2848 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) ||
2849 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2854 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2860 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2865 case SDMMC_SPEED_MODE_DEFAULT:
2868 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
2877 case SDMMC_SPEED_MODE_AUTO:
2879 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2880 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) ||
2881 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2886 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2896 case SDMMC_SPEED_MODE_HIGH:
2898 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) ||
2899 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) ||
2900 (hsd->SdCard.CardType == CARD_SDHC_SDXC))
2905 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2911 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2916 case SDMMC_SPEED_MODE_DEFAULT:
2918 case SDMMC_SPEED_MODE_ULTRA:
2920 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
2931 if ((
HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT)
2933 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT;
2934 hsd->State = HAL_SD_STATE_READY;
2940 hsd->State = HAL_SD_STATE_READY;
static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd)
Switches the SD card to Double Data Rate (DDR) mode. This API must be used after "Transfer State"...
uint32_t SD_HighSpeed(SD_HandleTypeDef *hsd)
Switches the SD card to High Speed mode. This API must be used after "Transfer State".
static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd)
Switches the SD card to Ultra High Speed mode. This API must be used after "Transfer State"...
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
Gets the current sd card data state.
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))