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
481 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
482 hsd->ErrorCode = SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_InitCard()
488 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_InitCard()
490 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_InitCard()
493 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
497 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
501 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
504 (void)SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
519 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
522 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
523 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
528 errorstate = SD_InitCard(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 = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
541 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_InitCard()
542 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
543 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
555 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
558 if (hsd == NULL) in HAL_SD_DeInit()
564 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
566 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
570 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_DeInit()
573 if (hsd->DriveTransceiver_1_8V_Callback == NULL) in HAL_SD_DeInit()
575 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_DeInit()
577 hsd->DriveTransceiver_1_8V_Callback(RESET); in HAL_SD_DeInit()
585 SD_PowerOFF(hsd); in HAL_SD_DeInit()
588 if (hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
590 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
594 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
597 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
600 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
601 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
611 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
614 UNUSED(hsd); in HAL_SD_MspInit()
626 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
629 UNUSED(hsd); in HAL_SD_MspDeInit()
667 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
681 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
685 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
687 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
689 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
691 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
695 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
698 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
700 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
712 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
713 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks()
718 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
721 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
725 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
728 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
733 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
734 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
735 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
736 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
742 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_ReadBlocks()
744 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_ReadBlocks()
749 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
765 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
766 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
767 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
768 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
772 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_ReadBlocks()
775 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
777 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
780 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
784 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
785 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
786 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
787 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
794 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
797 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
798 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
799 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
800 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
803 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
806 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
807 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; 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_RXOVERR)) in HAL_SD_ReadBlocks()
815 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
816 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; 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()
827 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
829 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
835 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
852 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t BlockAdd, in HAL_SD_WriteBlocks() argument
866 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
870 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
872 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
874 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
876 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
880 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
883 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
885 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
897 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
898 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks()
903 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
906 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
910 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
913 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
918 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
919 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
920 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
921 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
927 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | in HAL_SD_WriteBlocks()
930 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_WriteBlocks()
943 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
951 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
952 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
953 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
954 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
958 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_WriteBlocks()
961 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
963 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
966 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
970 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
971 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
972 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
973 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
980 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
983 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
984 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
985 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
986 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
989 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
992 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
993 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; 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_TXUNDERR)) in HAL_SD_WriteBlocks()
1001 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1002 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; 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()
1013 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
1015 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1021 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
1039 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_IT() argument
1048 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
1052 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
1054 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
1056 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
1058 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
1062 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
1065 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
1067 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
1068 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1070 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1082 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1083 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_IT()
1088 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1091 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1095 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1098 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1103 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1104 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1105 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1106 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1110 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
1134 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Block… in HAL_SD_WriteBlocks_IT() argument
1143 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1147 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1149 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1151 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1153 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1157 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1160 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1162 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1163 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1165 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1177 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1179 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_IT()
1184 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1187 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1191 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1194 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1199 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1200 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1201 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1202 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1207 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1231 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_DMA() argument
1240 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1244 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1246 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1248 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1250 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1254 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1257 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1259 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_DMA()
1260 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_DMA()
1262 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1274 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1276 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_DMA()
1277 hsd->Instance->IDMABASER = (uint32_t) pData ; in HAL_SD_ReadBlocks_DMA()
1278 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_ReadBlocks_DMA()
1283 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1286 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1290 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1293 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1298 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1299 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1300 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1301 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1306 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1329 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Bloc… in HAL_SD_WriteBlocks_DMA() argument
1338 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1342 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1344 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1346 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1348 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1352 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1355 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1357 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_DMA()
1358 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_DMA()
1360 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1372 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1374 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_DMA()
1376 hsd->Instance->IDMABASER = (uint32_t) pData ; in HAL_SD_WriteBlocks_DMA()
1377 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_WriteBlocks_DMA()
1382 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1385 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1389 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1392 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1397 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1398 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1399 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1400 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1405 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_DMA()
1424 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1430 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1432 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1436 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1440 if (end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1442 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1446 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1449 if (((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1452 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1453 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1454 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1458 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1461 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1462 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1463 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1468 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1475 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1478 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1482 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1483 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1484 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1489 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1493 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1494 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1495 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1501 errorstate = SDMMC_CmdErase(hsd->Instance, 0UL); in HAL_SD_Erase()
1505 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1506 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1507 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1511 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1526 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1529 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1532 if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1534 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1537 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1539 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1541 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1545 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1546 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1552 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1555 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1557 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1559 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1565 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1567 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1568 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1572 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1574 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1580 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1582 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1588 hsd->Instance->DLEN = 0; in HAL_SD_IRQHandler()
1589 hsd->Instance->DCTRL = 0; in HAL_SD_IRQHandler()
1590 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1595 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1598 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1600 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1602 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1607 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1608 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1612 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1614 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1620 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1622 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1632 …else if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0… in HAL_SD_IRQHandler()
1634 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1637 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | in HAL_SD_IRQHandler()
1641 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1643 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1645 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1647 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1649 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1651 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1653 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1655 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1659 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1662 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1665 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1666 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_SD_IRQHandler()
1667 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_SD_IRQHandler()
1668 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1669 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_SD_IRQHandler()
1670 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT); in HAL_SD_IRQHandler()
1675 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1676 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1678 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1680 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1685 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_IRQHandler()
1688 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1689 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1692 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1694 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1696 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1706 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_IDMABTC) != RESET) in HAL_SD_IRQHandler()
1708 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); in HAL_SD_IRQHandler()
1713 hsd->Write_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1715 HAL_SDEx_Write_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1721 hsd->Read_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1723 HAL_SDEx_Read_DMALnkLstBufCpltCallback(hsd); in HAL_SD_IRQHandler()
1738 HAL_SD_StateTypeDef HAL_SD_GetState(const SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1740 return hsd->State; in HAL_SD_GetState()
1749 uint32_t HAL_SD_GetError(const SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1751 return hsd->ErrorCode; in HAL_SD_GetError()
1759 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1762 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1774 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1777 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1789 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1792 UNUSED(hsd); in HAL_SD_ErrorCallback()
1804 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1807 UNUSED(hsd); in HAL_SD_AbortCallback()
1851 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1859 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1863 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1868 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1871 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1874 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1877 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1880 hsd->Read_DMALnkLstBufCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1883 hsd->Write_DMALnkLstBufCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1886 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1889 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1893 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1899 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1904 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1907 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1911 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1920 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1947 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1951 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1956 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1959 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1962 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1965 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1968 hsd->Read_DMALnkLstBufCpltCallback = HAL_SDEx_Read_DMALnkLstBufCpltCallback; in HAL_SD_UnRegisterCallback()
1971 hsd->Write_DMALnkLstBufCpltCallback = HAL_SDEx_Write_DMALnkLstBufCpltCallback; in HAL_SD_UnRegisterCallback()
1974 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1977 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1981 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1987 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
1992 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1995 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1999 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2008 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2024 HAL_StatusTypeDef HAL_SD_RegisterTransceiverCallback(SD_HandleTypeDef *hsd, pSD_TransceiverCallback… in HAL_SD_RegisterTransceiverCallback() argument
2031 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2036 __HAL_LOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2038 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterTransceiverCallback()
2040 hsd->DriveTransceiver_1_8V_Callback = pCallback; in HAL_SD_RegisterTransceiverCallback()
2045 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2051 __HAL_UNLOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2061 HAL_StatusTypeDef HAL_SD_UnRegisterTransceiverCallback(SD_HandleTypeDef *hsd) in HAL_SD_UnRegisterTransceiverCallback() argument
2066 __HAL_LOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2068 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterTransceiverCallback()
2070 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_UnRegisterTransceiverCallback()
2075 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterTransceiverCallback()
2081 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2114 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
2116 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2118 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2120 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2122 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2124 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2126 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2128 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2130 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2132 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2147 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
2149 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2151 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2153 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2155 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2157 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2159 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2161 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2163 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2165 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2167 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2169 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2171 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2175 if (hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2177 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2179 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2181 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2183 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2185 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2187 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2189 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2190 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2191 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2193 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / BLOCKSIZE); in HAL_SD_GetCardCSD()
2194 hsd->SdCard.LogBlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2196 else if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2199 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2201 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2202 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2203 hsd->SdCard.BlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2204 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2209 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2210 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2211 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2215 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2217 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2219 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2221 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2223 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2225 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2227 pCSD->MaxWrBlockLen = (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2229 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2233 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2235 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2237 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2239 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2241 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2243 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2245 pCSD->ECC = (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2247 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2261 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2267 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_GetCardStatus()
2272 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2276 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2277 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2278 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2310 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2314 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2315 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2316 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2330 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2332 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2333 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2334 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2335 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2336 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2337 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2338 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2339 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2355 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2367 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2369 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2373 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2377 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2379 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2383 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2385 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2390 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2396 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2399 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2402 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2411 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2412 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2414 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2417 if (hsd->Init.ClockDiv >= (sdmmc_clk / (2U * SD_NORMAL_SPEED_FREQ))) in HAL_SD_ConfigWideBusOperation()
2419 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2421 else if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2424 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2426 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2429 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2437 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2442 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_HIGH_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2448 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2455 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2463 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2468 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_NORMAL_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2474 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2480 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_ConfigWideBusOperation()
2483 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2487 hsd->ErrorCode |= SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_ConfigWideBusOperation()
2493 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2497 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2498 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2503 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2520 HAL_StatusTypeDef HAL_SD_ConfigSpeedBusOperation(SD_HandleTypeDef *hsd, uint32_t SpeedMode) in HAL_SD_ConfigSpeedBusOperation() argument
2529 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigSpeedBusOperation()
2532 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_ConfigSpeedBusOperation()
2538 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2539 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2541 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2543 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2545 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2547 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2552 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigSpeedBusOperation()
2555 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2557 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2569 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2570 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2573 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2575 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2578 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2582 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2589 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2590 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2593 if (SD_UltraHighSpeed(hsd, SDMMC_SDR50_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2595 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2598 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2602 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2609 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2610 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2613 if (SD_DDR_Mode(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2615 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2618 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED | SDMMC_CLKCR_DDR; in HAL_SD_ConfigSpeedBusOperation()
2622 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2629 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2630 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2631 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2634 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2636 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2642 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2650 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2652 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2659 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2670 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2671 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2672 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2675 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2677 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2689 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2690 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2691 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2694 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2696 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2702 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2710 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2712 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2720 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2730 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2731 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2732 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2735 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2737 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2749 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2750 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2751 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2754 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2756 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2762 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2770 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2772 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2780 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2788 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_ConfigSpeedBusOperation()
2792 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_ConfigSpeedBusOperation()
2793 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2799 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigSpeedBusOperation()
2803 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigSpeedBusOperation()
2804 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigSpeedBusOperation()
2809 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2818 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2824 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2827 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2841 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2846 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_Abort()
2849 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort()
2851 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_Abort()
2859 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2860 error_code = hsd->ErrorCode; in HAL_SD_Abort()
2867 if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_CARD) in HAL_SD_Abort()
2869 if (hsd->ErrorCode == HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2871 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_BUSYD0END)) in HAL_SD_Abort()
2875 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2876 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2882 if (hsd->ErrorCode == HAL_SD_ERROR_CMD_RSP_TIMEOUT) in HAL_SD_Abort()
2884 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2888 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2889 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2895 else if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_SDMMC) in HAL_SD_Abort()
2897 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2901 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2902 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2918 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_BUSYD0END); in HAL_SD_Abort()
2919 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2921 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort()
2923 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2926 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2937 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2942 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort_IT()
2946 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort_IT()
2949 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2951 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2952 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2956 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2959 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2966 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2968 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
2993 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
3001 if (SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
3007 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3010 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
3018 hsd->CID[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3019 hsd->CID[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3020 hsd->CID[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3021 hsd->CID[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3025 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3031 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
3042 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3045 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
3048 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
3056 hsd->CSD[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3057 hsd->CSD[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3058 hsd->CSD[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3059 hsd->CSD[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3064 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20U); in SD_InitCard()
3067 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
3073 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
3090 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
3101 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3108 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
3111 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
3113 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3122 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
3125 if (hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
3128 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3139 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3146 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | in SD_PowerON()
3154 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
3168 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
3172 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
3174 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in SD_PowerON()
3178 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
3181 hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; in SD_PowerON()
3184 errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); in SD_PowerON()
3191 while ((hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP) in SD_PowerON()
3200 hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; in SD_PowerON()
3203 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) in SD_PowerON()
3212 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_PowerON()
3218 hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; in SD_PowerON()
3221 while ((hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND) in SD_PowerON()
3230 hsd->Instance->ICR = SDMMC_FLAG_VSWEND; in SD_PowerON()
3233 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) in SD_PowerON()
3241 hsd->Instance->POWER = 0x13U; in SD_PowerON()
3244 hsd->Instance->ICR = 0xFFFFFFFFU; in SD_PowerON()
3259 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
3262 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
3272 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
3281 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
3287 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
3290 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3295 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
3298 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3309 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
3312 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
3315 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3320 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SendSDStatus()
3322 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
3326 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3337 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
3341 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
3345 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
3354 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) in SD_SendSDStatus()
3356 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3366 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
3378 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
3388 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
3395 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
3405 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
3410 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
3416 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
3426 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
3433 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
3452 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
3457 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3463 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3473 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3480 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3500 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3510 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3517 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3529 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3532 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3538 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_FindSCR()
3541 if ((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0U)) in SD_FindSCR()
3543 tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3544 tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3554 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3556 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3560 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3562 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3566 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3568 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3576 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
3595 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3601 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3603 if (hsd->RxXferSize >= SDMMC_FIFO_SIZE) in SD_Read_IT()
3608 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
3619 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3620 hsd->RxXferSize -= SDMMC_FIFO_SIZE; in SD_Read_IT()
3630 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3636 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3638 if (hsd->TxXferSize >= SDMMC_FIFO_SIZE) in SD_Write_IT()
3651 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3654 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3655 hsd->TxXferSize -= SDMMC_FIFO_SIZE; in SD_Write_IT()
3668 uint32_t SD_SwitchSpeed(SD_HandleTypeDef *hsd, uint32_t SwitchSpeedMode) in SD_SwitchSpeed() argument
3677 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_SwitchSpeed()
3683 if (hsd->SdCard.CardSpeed >= CARD_HIGH_SPEED) in SD_SwitchSpeed()
3686 hsd->Instance->DCTRL = 0; in SD_SwitchSpeed()
3687 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SwitchSpeed()
3702 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_SwitchSpeed()
3704 errorstate = SDMMC_CmdSwitch(hsd->Instance, SwitchSpeedMode); in SD_SwitchSpeed()
3710 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SwitchSpeed()
3713 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SwitchSpeed()
3717 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_SwitchSpeed()
3723 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_SwitchSpeed()
3724 hsd->State = HAL_SD_STATE_READY; in SD_SwitchSpeed()
3729 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SwitchSpeed()
3731 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_SwitchSpeed()
3735 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SwitchSpeed()
3737 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_SwitchSpeed()
3743 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SwitchSpeed()
3745 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_SwitchSpeed()
3757 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SwitchSpeed()
3780 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd, uint32_t UltraHighSpeedMode) in SD_UltraHighSpeed() argument
3789 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_UltraHighSpeed()
3795 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_UltraHighSpeed()
3798 hsd->Instance->DCTRL = 0; in SD_UltraHighSpeed()
3799 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_UltraHighSpeed()
3814 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_UltraHighSpeed()
3819 errorstate = SDMMC_CmdSwitch(hsd->Instance, UltraHighSpeedMode); in SD_UltraHighSpeed()
3825 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_UltraHighSpeed()
3828 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_UltraHighSpeed()
3832 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_UltraHighSpeed()
3839 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_UltraHighSpeed()
3840 hsd->State = HAL_SD_STATE_READY; in SD_UltraHighSpeed()
3845 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_UltraHighSpeed()
3847 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_UltraHighSpeed()
3851 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_UltraHighSpeed()
3853 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_UltraHighSpeed()
3859 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_UltraHighSpeed()
3861 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_UltraHighSpeed()
3873 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_UltraHighSpeed()
3883 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_UltraHighSpeed()
3890 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_1); in SD_UltraHighSpeed()
3891 LL_DLYB_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)); in SD_UltraHighSpeed()
3907 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd) in SD_DDR_Mode() argument
3916 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_DDR_Mode()
3922 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_DDR_Mode()
3925 hsd->Instance->DCTRL = 0; in SD_DDR_Mode()
3926 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_DDR_Mode()
3941 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_DDR_Mode()
3946 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_DDR50_SWITCH_PATTERN); in SD_DDR_Mode()
3952 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_DDR_Mode()
3955 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_DDR_Mode()
3959 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_DDR_Mode()
3966 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_DDR_Mode()
3967 hsd->State = HAL_SD_STATE_READY; in SD_DDR_Mode()
3972 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_DDR_Mode()
3974 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_DDR_Mode()
3978 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_DDR_Mode()
3980 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_DDR_Mode()
3986 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_DDR_Mode()
3988 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_DDR_Mode()
4000 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DDR_Mode()
4010 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_DDR_Mode()
4017 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_0); in SD_DDR_Mode()
4018 LL_DLYB_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)); in SD_DDR_Mode()
4033 __weak void HAL_SDEx_Read_DMALnkLstBufCpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMALnkLstBufCpltCallback() argument
4036 UNUSED(hsd); in HAL_SDEx_Read_DMALnkLstBufCpltCallback()
4047 __weak void HAL_SDEx_Write_DMALnkLstBufCpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMALnkLstBufCpltCallback() argument
4050 UNUSED(hsd); in HAL_SDEx_Write_DMALnkLstBufCpltCallback()