Lines Matching refs:hsd
291 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd);
292 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd);
293 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
294 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
295 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd);
296 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd);
297 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR);
298 static void SD_PowerOFF(SD_HandleTypeDef *hsd);
299 static void SD_Write_IT(SD_HandleTypeDef *hsd);
300 static void SD_Read_IT(SD_HandleTypeDef *hsd);
301 static uint32_t SD_SwitchSpeed(SD_HandleTypeDef *hsd, uint32_t SwitchSpeedMode);
303 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd, uint32_t UltraHighSpeedMode);
304 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd);
336 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) in HAL_SD_Init() argument
344 if (hsd == NULL) in HAL_SD_Init()
350 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
351 assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
352 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
353 assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
354 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
355 assert_param(IS_SDMMC_CLKDIV(hsd->Init.ClockDiv)); in HAL_SD_Init()
357 if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_Init()
360 hsd->Lock = HAL_UNLOCKED; in HAL_SD_Init()
364 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_UNKNOWN) in HAL_SD_Init()
366 hsd->Init.TranceiverPresent = SDMMC_TRANSCEIVER_PRESENT; in HAL_SD_Init()
371 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_Init()
372 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_Init()
373 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_Init()
374 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_Init()
375 hsd->Read_DMALnkLstBufCpltCallback = HAL_SDEx_Read_DMALnkLstBufCpltCallback; in HAL_SD_Init()
376 hsd->Write_DMALnkLstBufCpltCallback = HAL_SDEx_Write_DMALnkLstBufCpltCallback; in HAL_SD_Init()
378 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_Init()
380 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_Init()
384 if (hsd->MspInitCallback == NULL) in HAL_SD_Init()
386 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_Init()
390 hsd->MspInitCallback(hsd); in HAL_SD_Init()
393 HAL_SD_MspInit(hsd); in HAL_SD_Init()
397 hsd->State = HAL_SD_STATE_PROGRAMMING; in HAL_SD_Init()
400 if (HAL_SD_InitCard(hsd) != HAL_OK) in HAL_SD_Init()
405 if (HAL_SD_GetCardStatus(hsd, &CardStatus) != HAL_OK) in HAL_SD_Init()
412 if ((hsd->SdCard.CardType == CARD_SDHC_SDXC) && ((speedgrade != 0U) || (unitsize != 0U))) in HAL_SD_Init()
414 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in HAL_SD_Init()
418 if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_Init()
420 hsd->SdCard.CardSpeed = CARD_HIGH_SPEED; in HAL_SD_Init()
424 hsd->SdCard.CardSpeed = CARD_NORMAL_SPEED; in HAL_SD_Init()
429 if (HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) in HAL_SD_Init()
436 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_Init()
440 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Init()
441 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
447 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Init()
450 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
453 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
465 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) in HAL_SD_InitCard() argument
478 if (hsd->Instance == SDMMC1) in HAL_SD_InitCard()
483 if (hsd->Instance == SDMMC2) in HAL_SD_InitCard()
490 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
491 hsd->ErrorCode = SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_InitCard()
497 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_InitCard()
499 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_InitCard()
502 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
506 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
510 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
513 (void)SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
528 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
531 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
532 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
537 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
540 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
541 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
546 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
550 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_InitCard()
551 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
552 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
564 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
567 if (hsd == NULL) in HAL_SD_DeInit()
573 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
575 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
579 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_DeInit()
582 if (hsd->DriveTransceiver_1_8V_Callback == NULL) in HAL_SD_DeInit()
584 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_DeInit()
586 hsd->DriveTransceiver_1_8V_Callback(RESET); in HAL_SD_DeInit()
594 SD_PowerOFF(hsd); in HAL_SD_DeInit()
597 if (hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
599 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
603 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
606 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
609 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
610 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
620 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
623 UNUSED(hsd); in HAL_SD_MspInit()
635 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
638 UNUSED(hsd); in HAL_SD_MspDeInit()
676 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
690 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
694 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
696 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
698 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
700 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
704 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
707 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
709 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
721 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
722 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks()
727 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
730 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
734 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
737 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
742 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
743 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
744 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
745 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
751 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_ReadBlocks()
753 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_ReadBlocks()
758 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
774 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
775 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
776 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
777 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
781 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_ReadBlocks()
784 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
786 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
789 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
793 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
794 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
795 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
796 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
803 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
806 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
807 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
808 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
809 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
812 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
815 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
816 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
817 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
818 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
821 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
824 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
825 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
826 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
827 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
836 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
838 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
844 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
861 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t BlockAdd, in HAL_SD_WriteBlocks() argument
875 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
879 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
881 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
883 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
885 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
889 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
892 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
894 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
906 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
907 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks()
912 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
915 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
919 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
922 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
927 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
928 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
929 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
930 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
936 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | in HAL_SD_WriteBlocks()
939 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_WriteBlocks()
952 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
960 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
961 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
962 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
963 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
967 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_WriteBlocks()
970 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
972 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
975 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
979 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
980 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
981 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
982 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
989 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
992 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
993 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
994 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
995 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
998 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
1001 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1002 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
1003 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1004 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1007 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
1010 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1011 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
1012 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1013 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1022 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
1024 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1030 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
1048 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_IT() argument
1057 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
1061 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
1063 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
1065 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
1067 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
1071 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
1074 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
1076 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
1077 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1079 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1091 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1092 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_IT()
1097 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1100 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1104 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1107 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1112 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1113 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1114 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1115 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1119 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
1143 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Block… in HAL_SD_WriteBlocks_IT() argument
1152 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1156 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1158 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1160 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1162 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1166 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1169 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1171 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1172 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1174 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1186 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1188 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_IT()
1193 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1196 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1200 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1203 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1208 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1209 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1210 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1211 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1216 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1240 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_DMA() argument
1249 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1253 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1255 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1257 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1259 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1263 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1266 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1268 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_DMA()
1269 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_DMA()
1271 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1283 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1285 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_DMA()
1286 hsd->Instance->IDMABASER = (uint32_t) pData ; in HAL_SD_ReadBlocks_DMA()
1287 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_ReadBlocks_DMA()
1292 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1295 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1299 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1302 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1307 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1308 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1309 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1310 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1315 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1338 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Bloc… in HAL_SD_WriteBlocks_DMA() argument
1347 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1351 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1353 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1355 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1357 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1361 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1364 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1366 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_DMA()
1367 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_DMA()
1369 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1381 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1383 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_DMA()
1385 hsd->Instance->IDMABASER = (uint32_t) pData ; in HAL_SD_WriteBlocks_DMA()
1386 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_WriteBlocks_DMA()
1391 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1394 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1398 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1401 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1406 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1407 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1408 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1409 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1414 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_DMA()
1433 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1439 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1441 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1445 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1449 if (end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1451 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1455 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1458 if (((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1461 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1462 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1463 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1467 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1470 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1471 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1472 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1477 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1484 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1487 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1491 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1492 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1493 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1498 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1502 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1503 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1504 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1510 errorstate = SDMMC_CmdErase(hsd->Instance, 0UL); in HAL_SD_Erase()
1514 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1515 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1516 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1520 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1535 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1538 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1541 if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1543 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1546 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1548 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1550 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1554 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1555 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1561 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1564 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1566 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1568 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1574 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1576 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1577 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1581 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1583 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1589 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1591 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1597 hsd->Instance->DLEN = 0; in HAL_SD_IRQHandler()
1598 hsd->Instance->DCTRL = 0; in HAL_SD_IRQHandler()
1599 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1604 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1607 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1609 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1611 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1616 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1617 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1621 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1623 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1629 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1631 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1641 …else if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0… in HAL_SD_IRQHandler()
1643 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1646 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | in HAL_SD_IRQHandler()
1650 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1652 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1654 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1656 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1658 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1660 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1662 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1664 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1668 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1671 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1674 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1675 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_SD_IRQHandler()
1676 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_SD_IRQHandler()
1677 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1678 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_SD_IRQHandler()
1679 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT); in HAL_SD_IRQHandler()
1684 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1685 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1687 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1689 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1694 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_IRQHandler()
1697 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1698 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1701 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1703 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1705 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1715 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_IDMABTC) != RESET) in HAL_SD_IRQHandler()
1717 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); in HAL_SD_IRQHandler()
1722 hsd->Write_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1724 HAL_SDEx_Write_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1730 hsd->Read_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1732 HAL_SDEx_Read_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1747 HAL_SD_StateTypeDef HAL_SD_GetState(const SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1749 return hsd->State; in HAL_SD_GetState()
1758 uint32_t HAL_SD_GetError(const SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1760 return hsd->ErrorCode; in HAL_SD_GetError()
1768 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1771 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1783 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1786 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1798 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1801 UNUSED(hsd); in HAL_SD_ErrorCallback()
1813 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1816 UNUSED(hsd); in HAL_SD_AbortCallback()
1860 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1868 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1872 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1877 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1880 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1883 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1886 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1889 hsd->Read_DMALnkLstBufCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1892 hsd->Write_DMALnkLstBufCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1895 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1898 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1902 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1908 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1913 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1916 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1920 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1929 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1956 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1960 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1965 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1968 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1971 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1974 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1977 hsd->Read_DMALnkLstBufCpltCallback = HAL_SDEx_Read_DMALnkLstBufCpltCallback; in HAL_SD_UnRegisterCallback()
1980 hsd->Write_DMALnkLstBufCpltCallback = HAL_SDEx_Write_DMALnkLstBufCpltCallback; in HAL_SD_UnRegisterCallback()
1983 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1986 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1990 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1996 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
2001 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
2004 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2008 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2017 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2033 HAL_StatusTypeDef HAL_SD_RegisterTransceiverCallback(SD_HandleTypeDef *hsd, pSD_TransceiverCallback… in HAL_SD_RegisterTransceiverCallback() argument
2040 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2045 __HAL_LOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2047 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterTransceiverCallback()
2049 hsd->DriveTransceiver_1_8V_Callback = pCallback; in HAL_SD_RegisterTransceiverCallback()
2054 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2060 __HAL_UNLOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2070 HAL_StatusTypeDef HAL_SD_UnRegisterTransceiverCallback(SD_HandleTypeDef *hsd) in HAL_SD_UnRegisterTransceiverCallback() argument
2075 __HAL_LOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2077 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterTransceiverCallback()
2079 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_UnRegisterTransceiverCallback()
2084 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterTransceiverCallback()
2090 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2123 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
2125 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2127 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2129 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2131 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2133 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2135 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2137 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2139 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2141 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2156 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
2158 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2160 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2162 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2164 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2166 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2168 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2170 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2172 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2174 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2176 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2178 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2180 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2184 if (hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2186 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2188 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2190 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2192 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2194 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2196 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2198 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2199 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2200 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2202 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / BLOCKSIZE); in HAL_SD_GetCardCSD()
2203 hsd->SdCard.LogBlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2205 else if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2208 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2210 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2211 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2212 hsd->SdCard.BlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2213 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2218 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2219 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2220 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2224 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2226 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2228 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2230 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2232 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2234 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2236 pCSD->MaxWrBlockLen = (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2238 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2242 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2244 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2246 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2248 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2250 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2252 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2254 pCSD->ECC = (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2256 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2270 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2276 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_GetCardStatus()
2281 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2285 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2286 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2287 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2319 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2323 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2324 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2325 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2339 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2341 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2342 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2343 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2344 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2345 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2346 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2347 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2348 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2364 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2376 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2378 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2382 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2386 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2388 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2392 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2394 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2399 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2405 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2408 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2411 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2416 if (hsd->Instance == SDMMC1) in HAL_SD_ConfigWideBusOperation()
2421 else if (hsd->Instance == SDMMC2) in HAL_SD_ConfigWideBusOperation()
2433 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2434 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2436 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2439 if (hsd->Init.ClockDiv >= (sdmmc_clk / (2U * SD_NORMAL_SPEED_FREQ))) in HAL_SD_ConfigWideBusOperation()
2441 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2443 else if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2446 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2448 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2451 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2459 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2464 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_HIGH_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2470 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2477 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2485 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2490 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_NORMAL_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2496 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2502 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_ConfigWideBusOperation()
2505 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2509 hsd->ErrorCode |= SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_ConfigWideBusOperation()
2515 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2519 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2520 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2525 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2542 HAL_StatusTypeDef HAL_SD_ConfigSpeedBusOperation(SD_HandleTypeDef *hsd, uint32_t SpeedMode) in HAL_SD_ConfigSpeedBusOperation() argument
2551 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigSpeedBusOperation()
2554 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_ConfigSpeedBusOperation()
2560 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2561 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2563 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2565 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2567 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2569 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2574 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigSpeedBusOperation()
2577 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2579 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2591 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2592 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2595 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2597 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2600 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2604 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2611 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2612 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2615 if (SD_UltraHighSpeed(hsd, SDMMC_SDR50_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2617 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2620 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2624 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2631 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2632 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2635 if (SD_DDR_Mode(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2637 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2640 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED | SDMMC_CLKCR_DDR; in HAL_SD_ConfigSpeedBusOperation()
2644 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2651 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2652 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2653 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2656 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2658 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2664 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2672 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2674 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2681 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2692 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2693 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2694 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2697 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2699 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2711 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2712 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2713 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2716 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2718 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2724 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2732 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2734 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2742 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2752 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2753 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2754 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2757 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2759 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2771 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2772 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2773 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2776 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2778 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2784 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2792 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2794 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2802 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2810 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_ConfigSpeedBusOperation()
2814 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_ConfigSpeedBusOperation()
2815 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2821 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigSpeedBusOperation()
2825 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigSpeedBusOperation()
2826 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigSpeedBusOperation()
2831 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2840 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2846 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2849 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2863 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2868 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_Abort()
2871 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort()
2873 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_Abort()
2881 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2882 error_code = hsd->ErrorCode; in HAL_SD_Abort()
2889 if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_CARD) in HAL_SD_Abort()
2891 if (hsd->ErrorCode == HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2893 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_BUSYD0END)) in HAL_SD_Abort()
2897 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2898 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2904 if (hsd->ErrorCode == HAL_SD_ERROR_CMD_RSP_TIMEOUT) in HAL_SD_Abort()
2906 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2910 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2911 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2917 else if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_SDMMC) in HAL_SD_Abort()
2919 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2923 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2924 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2940 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_BUSYD0END); in HAL_SD_Abort()
2941 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2943 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort()
2945 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2948 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2959 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2964 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort_IT()
2968 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort_IT()
2971 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2973 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2974 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2978 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2981 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2988 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2990 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
3015 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
3023 if (SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
3029 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3032 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
3040 hsd->CID[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3041 hsd->CID[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3042 hsd->CID[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3043 hsd->CID[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3047 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3053 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
3064 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3067 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
3070 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
3078 hsd->CSD[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3079 hsd->CSD[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3080 hsd->CSD[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3081 hsd->CSD[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3086 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20U); in SD_InitCard()
3089 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
3095 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
3112 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
3123 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3130 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
3133 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
3135 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3144 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
3147 if (hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
3150 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3161 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3168 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | in SD_PowerON()
3176 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
3190 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
3194 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
3196 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in SD_PowerON()
3200 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
3203 hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; in SD_PowerON()
3206 errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); in SD_PowerON()
3213 while ((hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP) in SD_PowerON()
3222 hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; in SD_PowerON()
3225 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) in SD_PowerON()
3234 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_PowerON()
3240 hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; in SD_PowerON()
3243 while ((hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND) in SD_PowerON()
3252 hsd->Instance->ICR = SDMMC_FLAG_VSWEND; in SD_PowerON()
3255 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) in SD_PowerON()
3263 hsd->Instance->POWER = 0x13U; in SD_PowerON()
3266 hsd->Instance->ICR = 0xFFFFFFFFU; in SD_PowerON()
3281 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
3284 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
3294 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
3303 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
3309 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
3312 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3317 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
3320 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3331 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
3334 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
3337 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3342 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SendSDStatus()
3344 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
3348 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3359 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
3363 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
3367 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
3376 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) in SD_SendSDStatus()
3378 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3388 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
3400 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
3410 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
3417 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
3427 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
3432 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
3438 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
3448 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
3455 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
3474 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
3479 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3485 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3495 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3502 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3522 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3532 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3539 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3551 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3554 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3560 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_FindSCR()
3563 if ((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0U)) in SD_FindSCR()
3565 tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3566 tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3576 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3578 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3582 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3584 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3588 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3590 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3598 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
3617 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3623 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3625 if (hsd->RxXferSize >= SDMMC_FIFO_SIZE) in SD_Read_IT()
3630 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
3641 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3642 hsd->RxXferSize -= SDMMC_FIFO_SIZE; in SD_Read_IT()
3652 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3658 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3660 if (hsd->TxXferSize >= SDMMC_FIFO_SIZE) in SD_Write_IT()
3673 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3676 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3677 hsd->TxXferSize -= SDMMC_FIFO_SIZE; in SD_Write_IT()
3690 uint32_t SD_SwitchSpeed(SD_HandleTypeDef *hsd, uint32_t SwitchSpeedMode) in SD_SwitchSpeed() argument
3699 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_SwitchSpeed()
3705 if (hsd->SdCard.CardSpeed >= CARD_HIGH_SPEED) in SD_SwitchSpeed()
3708 hsd->Instance->DCTRL = 0; in SD_SwitchSpeed()
3709 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SwitchSpeed()
3724 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_SwitchSpeed()
3726 errorstate = SDMMC_CmdSwitch(hsd->Instance, SwitchSpeedMode); in SD_SwitchSpeed()
3732 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SwitchSpeed()
3735 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SwitchSpeed()
3739 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_SwitchSpeed()
3745 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_SwitchSpeed()
3746 hsd->State = HAL_SD_STATE_READY; in SD_SwitchSpeed()
3751 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SwitchSpeed()
3753 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_SwitchSpeed()
3757 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SwitchSpeed()
3759 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_SwitchSpeed()
3765 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SwitchSpeed()
3767 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_SwitchSpeed()
3779 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SwitchSpeed()
3802 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd, uint32_t UltraHighSpeedMode) in SD_UltraHighSpeed() argument
3811 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_UltraHighSpeed()
3817 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_UltraHighSpeed()
3820 hsd->Instance->DCTRL = 0; in SD_UltraHighSpeed()
3821 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_UltraHighSpeed()
3836 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_UltraHighSpeed()
3841 errorstate = SDMMC_CmdSwitch(hsd->Instance, UltraHighSpeedMode); in SD_UltraHighSpeed()
3847 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_UltraHighSpeed()
3850 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_UltraHighSpeed()
3854 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_UltraHighSpeed()
3861 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_UltraHighSpeed()
3862 hsd->State = HAL_SD_STATE_READY; in SD_UltraHighSpeed()
3867 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_UltraHighSpeed()
3869 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_UltraHighSpeed()
3873 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_UltraHighSpeed()
3875 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_UltraHighSpeed()
3881 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_UltraHighSpeed()
3883 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_UltraHighSpeed()
3895 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_UltraHighSpeed()
3905 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_UltraHighSpeed()
3912 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_1); in SD_UltraHighSpeed()
3913 LL_DLYB_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)); in SD_UltraHighSpeed()
3929 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd) in SD_DDR_Mode() argument
3938 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_DDR_Mode()
3944 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_DDR_Mode()
3947 hsd->Instance->DCTRL = 0; in SD_DDR_Mode()
3948 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_DDR_Mode()
3963 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_DDR_Mode()
3968 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_DDR50_SWITCH_PATTERN); in SD_DDR_Mode()
3974 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_DDR_Mode()
3977 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_DDR_Mode()
3981 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_DDR_Mode()
3988 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_DDR_Mode()
3989 hsd->State = HAL_SD_STATE_READY; in SD_DDR_Mode()
3994 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_DDR_Mode()
3996 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_DDR_Mode()
4000 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_DDR_Mode()
4002 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_DDR_Mode()
4008 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_DDR_Mode()
4010 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_DDR_Mode()
4022 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DDR_Mode()
4032 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_DDR_Mode()
4039 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_0); in SD_DDR_Mode()
4040 LL_DLYB_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)); in SD_DDR_Mode()
4055 __weak void HAL_SDEx_Read_DMALnkLstBufCpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMALnkLstBufCpltCallback() argument
4058 UNUSED(hsd); in HAL_SDEx_Read_DMALnkLstBufCpltCallback()
4069 __weak void HAL_SDEx_Write_DMALnkLstBufCpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMALnkLstBufCpltCallback() argument
4072 UNUSED(hsd); in HAL_SDEx_Write_DMALnkLstBufCpltCallback()