Switches the SD card to High Speed mode. This API must be used after "Transfer State".
4046 uint32_t errorstate = HAL_SD_ERROR_NONE;
4048 uint32_t SD_hs[16] = {0};
4049 uint32_t count, loop = 0 ;
4052 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED)
4055 return HAL_SD_ERROR_REQUEST_NOT_APPLICABLE;
4058 if(hsd->SdCard.CardSpeed == CARD_HIGH_SPEED)
4061 hsd->Instance->DCTRL = 0;
4064 if (errorstate != HAL_SD_ERROR_NONE)
4070 sdmmc_datainitstructure.
DataTimeOut = SDMMC_DATATIMEOUT;
4072 sdmmc_datainitstructure.
DataBlockSize = SDMMC_DATABLOCK_SIZE_64B ;
4073 sdmmc_datainitstructure.
TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC;
4074 sdmmc_datainitstructure.
TransferMode = SDMMC_TRANSFER_MODE_BLOCK;
4075 sdmmc_datainitstructure.
DPSM = SDMMC_DPSM_ENABLE;
4079 return (HAL_SD_ERROR_GENERAL_UNKNOWN_ERR);
4083 errorstate =
SDMMC_CmdSwitch(hsd->Instance,SDMMC_SDR25_SWITCH_PATTERN);
4084 if(errorstate != HAL_SD_ERROR_NONE)
4089 while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DBCKEND| SDMMC_FLAG_DATAEND ))
4091 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF))
4093 for (count = 0U; count < 8U; count++)
4102 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT;
4103 hsd->State= HAL_SD_STATE_READY;
4104 return HAL_SD_ERROR_TIMEOUT;
4108 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT))
4110 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT);
4116 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL))
4118 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL);
4120 errorstate = SDMMC_ERROR_DATA_CRC_FAIL;
4124 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR))
4126 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR);
4128 errorstate = SDMMC_ERROR_RX_OVERRUN;
4138 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS);
4141 if ((((uint8_t*)SD_hs)[13] & 2U) != 2U)
4143 errorstate = SDMMC_ERROR_UNSUPPORTED_FEATURE;
uint32_t SDMMC_CmdBlockLength(SDMMC_TypeDef *SDMMCx, uint32_t BlockSize)
Send the Data Block Lenght command and check the response.
SDMMC Data Control structure.
uint32_t SDMMC_CmdSwitch(SDMMC_TypeDef *SDMMCx, uint32_t Argument)
Checks switchable function and switch card function. SDMMC_CMD_HS_SWITCH comand.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
uint32_t SDMMC_ReadFIFO(SDMMC_TypeDef *SDMMCx)
Read data (word) from Rx FIFO in blocking mode (polling)
HAL_StatusTypeDef SDMMC_ConfigData(SDMMC_TypeDef *SDMMCx, SDMMC_DataInitTypeDef *Data)
Configure the SDMMC data path according to the specified parameters in the SDMMC_DataInitTypeDef.