Lines Matching refs:hsd
293 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd);
294 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd);
295 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
296 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
297 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd);
298 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd);
299 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR);
300 static void SD_PowerOFF(SD_HandleTypeDef *hsd);
301 static void SD_Write_IT(SD_HandleTypeDef *hsd);
302 static void SD_Read_IT(SD_HandleTypeDef *hsd);
303 static uint32_t SD_SwitchSpeed(SD_HandleTypeDef *hsd, uint32_t SwitchSpeedMode);
305 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd, uint32_t UltraHighSpeedMode);
306 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd);
338 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) in HAL_SD_Init() argument
346 if (hsd == NULL) in HAL_SD_Init()
352 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
353 assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
354 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
355 assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
356 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
357 assert_param(IS_SDMMC_CLKDIV(hsd->Init.ClockDiv)); in HAL_SD_Init()
359 if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_Init()
362 hsd->Lock = HAL_UNLOCKED; in HAL_SD_Init()
366 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_UNKNOWN) in HAL_SD_Init()
368 hsd->Init.TranceiverPresent = SDMMC_TRANSCEIVER_PRESENT; in HAL_SD_Init()
373 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_Init()
374 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_Init()
375 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_Init()
376 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_Init()
377 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuf0CpltCallback; in HAL_SD_Init()
378 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuf1CpltCallback; in HAL_SD_Init()
379 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuf0CpltCallback; in HAL_SD_Init()
380 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuf1CpltCallback; in HAL_SD_Init()
382 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_Init()
384 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_Init()
388 if (hsd->MspInitCallback == NULL) in HAL_SD_Init()
390 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_Init()
394 hsd->MspInitCallback(hsd); in HAL_SD_Init()
397 HAL_SD_MspInit(hsd); in HAL_SD_Init()
401 hsd->State = HAL_SD_STATE_PROGRAMMING; in HAL_SD_Init()
404 if (HAL_SD_InitCard(hsd) != HAL_OK) in HAL_SD_Init()
409 if (HAL_SD_GetCardStatus(hsd, &CardStatus) != HAL_OK) in HAL_SD_Init()
416 if ((hsd->SdCard.CardType == CARD_SDHC_SDXC) && ((speedgrade != 0U) || (unitsize != 0U))) in HAL_SD_Init()
418 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in HAL_SD_Init()
422 if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_Init()
424 hsd->SdCard.CardSpeed = CARD_HIGH_SPEED; in HAL_SD_Init()
428 hsd->SdCard.CardSpeed = CARD_NORMAL_SPEED; in HAL_SD_Init()
433 if (HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) in HAL_SD_Init()
440 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_Init()
444 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Init()
445 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
451 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Init()
454 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
457 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
469 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) in HAL_SD_InitCard() argument
485 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
486 hsd->ErrorCode = SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_InitCard()
492 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_InitCard()
494 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_InitCard()
497 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
501 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
505 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
508 (void)SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
523 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
526 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
527 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
532 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
535 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
536 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
541 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
545 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_InitCard()
546 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
547 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
559 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
562 if (hsd == NULL) in HAL_SD_DeInit()
568 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
570 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
574 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_DeInit()
577 if (hsd->DriveTransceiver_1_8V_Callback == NULL) in HAL_SD_DeInit()
579 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_DeInit()
581 hsd->DriveTransceiver_1_8V_Callback(RESET); in HAL_SD_DeInit()
589 SD_PowerOFF(hsd); in HAL_SD_DeInit()
592 if (hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
594 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
598 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
601 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
604 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
605 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
615 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
618 UNUSED(hsd); in HAL_SD_MspInit()
630 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
633 UNUSED(hsd); in HAL_SD_MspDeInit()
671 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
685 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
689 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
691 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
693 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
695 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
699 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
702 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
704 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
716 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
717 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks()
722 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
725 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
729 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
732 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
737 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
738 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
739 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
740 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
746 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_ReadBlocks()
748 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_ReadBlocks()
753 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
769 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
770 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
771 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
772 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
776 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_ReadBlocks()
779 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
781 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
784 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
788 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
789 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
790 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
791 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
798 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
801 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
802 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
803 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
804 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
807 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
810 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
811 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
812 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
813 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
816 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
819 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
820 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
821 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
822 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
831 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
833 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
839 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
856 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t BlockAdd, in HAL_SD_WriteBlocks() argument
870 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
874 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
876 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
878 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
880 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
884 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
887 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
889 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
901 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
902 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks()
907 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
910 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
914 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
917 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
922 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
923 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
924 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
925 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
931 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | in HAL_SD_WriteBlocks()
934 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_SD_WriteBlocks()
947 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
955 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
956 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
957 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
958 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
962 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_WriteBlocks()
965 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
967 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
970 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
974 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
975 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
976 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
977 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
984 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
987 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
988 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
989 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
990 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
993 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
996 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
997 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
998 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
999 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1002 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
1005 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1006 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
1007 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1008 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1017 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
1019 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1025 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
1043 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_IT() argument
1052 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
1056 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
1058 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
1060 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
1062 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
1066 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
1069 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
1071 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
1072 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1074 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1086 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1087 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_IT()
1092 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1095 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1099 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1102 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1107 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1108 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1109 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1110 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1114 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
1138 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Block… in HAL_SD_WriteBlocks_IT() argument
1147 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1151 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1153 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1155 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1157 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1161 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1164 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1166 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1167 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1169 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1181 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1183 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_IT()
1188 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1191 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1195 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1198 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1203 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1204 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1205 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1206 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1211 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1235 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, in HAL_SD_ReadBlocks_DMA() argument
1244 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1248 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1250 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1252 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1254 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1258 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1261 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1263 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_DMA()
1264 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_DMA()
1266 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1278 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1280 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_ReadBlocks_DMA()
1281 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_ReadBlocks_DMA()
1282 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_ReadBlocks_DMA()
1287 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1290 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1294 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1297 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1302 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1303 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1304 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1305 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1310 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1333 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, const uint8_t *pData, uint32_t Bloc… in HAL_SD_WriteBlocks_DMA() argument
1342 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1346 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1348 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1350 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1352 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1356 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1359 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1361 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_DMA()
1362 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_DMA()
1364 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1376 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1378 __SDMMC_CMDTRANS_ENABLE(hsd->Instance); in HAL_SD_WriteBlocks_DMA()
1380 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_WriteBlocks_DMA()
1381 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_WriteBlocks_DMA()
1386 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1389 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1393 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1396 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1401 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1402 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1403 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1404 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1409 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_DMA()
1428 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1434 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1436 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1440 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1444 if (end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1446 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1450 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1453 if (((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1456 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1457 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1458 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1462 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1465 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1466 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1467 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1472 if (hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1479 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1482 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1486 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1487 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1488 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1493 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1497 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1498 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1499 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1505 errorstate = SDMMC_CmdErase(hsd->Instance, 0UL); in HAL_SD_Erase()
1509 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1510 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1511 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1515 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1530 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1533 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1536 if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1538 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1541 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1543 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1545 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1549 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1550 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1556 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1559 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1561 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1563 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1569 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1571 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1572 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1576 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1578 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1584 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1586 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1592 hsd->Instance->DLEN = 0; in HAL_SD_IRQHandler()
1593 hsd->Instance->DCTRL = 0; in HAL_SD_IRQHandler()
1594 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1599 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1602 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1604 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1606 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1611 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1612 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1616 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1618 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1624 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1626 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1636 …else if ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0… in HAL_SD_IRQHandler()
1638 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1641 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | in HAL_SD_IRQHandler()
1645 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1647 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1649 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1651 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1653 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1655 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1657 if (__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1659 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1663 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1666 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_IRQHandler()
1669 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_IRQHandler()
1670 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_SD_IRQHandler()
1671 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_SD_IRQHandler()
1672 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1673 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_SD_IRQHandler()
1674 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT); in HAL_SD_IRQHandler()
1679 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1680 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1682 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1684 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1689 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_IRQHandler()
1692 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1693 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1696 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1698 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1700 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1710 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_IDMABTC) != RESET) in HAL_SD_IRQHandler()
1712 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); in HAL_SD_IRQHandler()
1713 if (READ_BIT(hsd->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == 0U) in HAL_SD_IRQHandler()
1719 hsd->Write_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1721 HAL_SDEx_Write_DMADoubleBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1727 hsd->Read_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1729 HAL_SDEx_Read_DMADoubleBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1739 hsd->Write_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1741 HAL_SDEx_Write_DMADoubleBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1747 hsd->Read_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1749 HAL_SDEx_Read_DMADoubleBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1765 HAL_SD_StateTypeDef HAL_SD_GetState(const SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1767 return hsd->State; in HAL_SD_GetState()
1776 uint32_t HAL_SD_GetError(const SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1778 return hsd->ErrorCode; in HAL_SD_GetError()
1786 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1789 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1801 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1804 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1816 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1819 UNUSED(hsd); in HAL_SD_ErrorCallback()
1831 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1834 UNUSED(hsd); in HAL_SD_AbortCallback()
1880 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1888 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1892 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1897 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1900 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1903 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1906 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1909 hsd->Read_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1912 hsd->Read_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1915 hsd->Write_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1918 hsd->Write_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1921 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1924 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1928 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1934 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1939 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1942 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1946 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1955 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1984 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1988 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1993 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1996 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1999 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
2002 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
2005 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuf0CpltCallback; in HAL_SD_UnRegisterCallback()
2008 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuf1CpltCallback; in HAL_SD_UnRegisterCallback()
2011 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuf0CpltCallback; in HAL_SD_UnRegisterCallback()
2014 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuf1CpltCallback; in HAL_SD_UnRegisterCallback()
2017 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
2020 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2024 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2030 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
2035 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
2038 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2042 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2051 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2067 HAL_StatusTypeDef HAL_SD_RegisterTransceiverCallback(SD_HandleTypeDef *hsd, pSD_TransceiverCallback… in HAL_SD_RegisterTransceiverCallback() argument
2074 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2079 __HAL_LOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2081 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterTransceiverCallback()
2083 hsd->DriveTransceiver_1_8V_Callback = pCallback; in HAL_SD_RegisterTransceiverCallback()
2088 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2094 __HAL_UNLOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2104 HAL_StatusTypeDef HAL_SD_UnRegisterTransceiverCallback(SD_HandleTypeDef *hsd) in HAL_SD_UnRegisterTransceiverCallback() argument
2109 __HAL_LOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2111 if (hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterTransceiverCallback()
2113 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_UnRegisterTransceiverCallback()
2118 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterTransceiverCallback()
2124 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2157 HAL_StatusTypeDef HAL_SD_GetCardCID(const SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
2159 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2161 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2163 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2165 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2167 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2169 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2171 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2173 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2175 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2190 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
2192 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2194 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2196 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2198 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2200 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2202 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2204 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2206 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2208 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2210 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2212 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2214 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2218 if (hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2220 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2222 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2224 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2226 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2228 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2230 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2232 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2233 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2234 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2236 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / BLOCKSIZE); in HAL_SD_GetCardCSD()
2237 hsd->SdCard.LogBlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2239 else if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2242 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2244 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2245 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2246 hsd->SdCard.BlockSize = BLOCKSIZE; in HAL_SD_GetCardCSD()
2247 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2252 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2253 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2254 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2258 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2260 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2262 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2264 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2266 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2268 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2270 pCSD->MaxWrBlockLen = (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2272 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2276 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2278 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2280 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2282 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2284 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2286 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2288 pCSD->ECC = (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2290 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2304 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2310 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_GetCardStatus()
2315 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2319 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2320 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2321 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2353 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2357 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2358 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2359 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2373 HAL_StatusTypeDef HAL_SD_GetCardInfo(const SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2375 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2376 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2377 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2378 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2379 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2380 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2381 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2382 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2398 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2410 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2412 if (hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2416 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2420 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2422 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2426 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2428 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2433 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2439 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2442 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2445 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2454 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2455 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2457 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2460 if (hsd->Init.ClockDiv >= (sdmmc_clk / (2U * SD_NORMAL_SPEED_FREQ))) in HAL_SD_ConfigWideBusOperation()
2462 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2464 else if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2467 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2469 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2472 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2480 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2485 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_HIGH_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2491 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2498 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2506 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2511 if ((sdmmc_clk / (2U * hsd->Init.ClockDiv)) > SD_NORMAL_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2517 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2523 Init.TranceiverPresent = hsd->Init.TranceiverPresent; in HAL_SD_ConfigWideBusOperation()
2526 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2530 hsd->ErrorCode |= SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_ConfigWideBusOperation()
2536 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2540 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2541 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2546 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2563 HAL_StatusTypeDef HAL_SD_ConfigSpeedBusOperation(SD_HandleTypeDef *hsd, uint32_t SpeedMode) in HAL_SD_ConfigSpeedBusOperation() argument
2572 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigSpeedBusOperation()
2575 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in HAL_SD_ConfigSpeedBusOperation()
2581 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2582 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2584 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2586 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2588 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2590 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2595 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigSpeedBusOperation()
2598 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2600 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2612 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2613 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2616 if (SD_UltraHighSpeed(hsd, SDMMC_SDR104_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2618 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2621 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2625 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2632 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2633 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2636 if (SD_UltraHighSpeed(hsd, SDMMC_SDR50_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2638 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2641 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED; in HAL_SD_ConfigSpeedBusOperation()
2645 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2652 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2653 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2656 if (SD_DDR_Mode(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2658 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2661 hsd->Instance->CLKCR |= SDMMC_CLKCR_BUSSPEED | SDMMC_CLKCR_DDR; in HAL_SD_ConfigSpeedBusOperation()
2665 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2672 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2673 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2674 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2677 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2679 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2685 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2693 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2695 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2702 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2713 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2714 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2715 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2718 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2720 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2732 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2733 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2734 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2737 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2739 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2745 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2753 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2755 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2763 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2773 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2774 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2775 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2778 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2780 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2792 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2793 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2794 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2797 if (SD_SwitchSpeed(hsd, SDMMC_SDR25_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2799 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2805 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2813 if (SD_SwitchSpeed(hsd, SDMMC_SDR12_SWITCH_PATTERN) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2815 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2823 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2831 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_ConfigSpeedBusOperation()
2835 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_ConfigSpeedBusOperation()
2836 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2842 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigSpeedBusOperation()
2846 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigSpeedBusOperation()
2847 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigSpeedBusOperation()
2852 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2861 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2867 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2870 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2884 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2889 if (hsd->State == HAL_SD_STATE_BUSY) in HAL_SD_Abort()
2892 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort()
2894 __SDMMC_CMDTRANS_DISABLE(hsd->Instance); in HAL_SD_Abort()
2902 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2903 error_code = hsd->ErrorCode; in HAL_SD_Abort()
2910 if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_CARD) in HAL_SD_Abort()
2912 if (hsd->ErrorCode == HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2914 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_BUSYD0END)) in HAL_SD_Abort()
2918 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2919 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2925 if (hsd->ErrorCode == HAL_SD_ERROR_CMD_RSP_TIMEOUT) in HAL_SD_Abort()
2927 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2931 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2932 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2938 else if ((hsd->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_SDMMC) in HAL_SD_Abort()
2940 while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DABORT | SDMMC_FLAG_DATAEND)) in HAL_SD_Abort()
2944 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Abort()
2945 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2961 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_BUSYD0END); in HAL_SD_Abort()
2962 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2964 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort()
2966 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2969 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2980 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2985 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_SD_Abort_IT()
2989 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort_IT()
2992 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2994 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2995 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2999 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
3002 if (hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
3009 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
3011 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
3036 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
3044 if (SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
3050 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3053 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
3061 hsd->CID[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3062 hsd->CID[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3063 hsd->CID[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3064 hsd->CID[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3068 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3074 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
3085 if (hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3088 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
3091 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
3099 hsd->CSD[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3100 hsd->CSD[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3101 hsd->CSD[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3102 hsd->CSD[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3107 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20U); in SD_InitCard()
3110 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
3116 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
3133 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
3144 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3151 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
3154 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
3156 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3165 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
3168 if (hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
3171 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3182 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3189 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | in SD_PowerON()
3197 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
3211 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
3215 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
3217 if (hsd->Init.TranceiverPresent == SDMMC_TRANSCEIVER_PRESENT) in SD_PowerON()
3221 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
3224 hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; in SD_PowerON()
3227 errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); in SD_PowerON()
3234 while ((hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP) in SD_PowerON()
3243 hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; in SD_PowerON()
3246 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) in SD_PowerON()
3255 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_PowerON()
3261 hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; in SD_PowerON()
3264 while ((hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND) in SD_PowerON()
3273 hsd->Instance->ICR = SDMMC_FLAG_VSWEND; in SD_PowerON()
3276 if ((hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) in SD_PowerON()
3284 hsd->Instance->POWER = 0x13U; in SD_PowerON()
3287 hsd->Instance->ICR = 0xFFFFFFFFU; in SD_PowerON()
3302 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
3305 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
3315 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
3324 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
3330 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
3333 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3338 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
3341 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3352 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
3355 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
3358 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3363 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SendSDStatus()
3365 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
3369 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3380 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
3384 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
3388 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
3397 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) in SD_SendSDStatus()
3399 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3409 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
3421 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
3431 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
3438 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
3448 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
3453 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
3459 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
3469 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
3476 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
3495 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
3500 if ((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3506 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3516 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3523 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3543 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3553 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3560 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3572 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3575 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3581 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_FindSCR()
3584 if ((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0U)) in SD_FindSCR()
3586 tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3587 tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3597 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3599 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3603 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3605 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3609 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3611 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3619 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
3638 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3644 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3646 if (hsd->RxXferSize >= SDMMC_FIFO_SIZE) in SD_Read_IT()
3651 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
3662 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3663 hsd->RxXferSize -= SDMMC_FIFO_SIZE; in SD_Read_IT()
3673 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3679 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3681 if (hsd->TxXferSize >= SDMMC_FIFO_SIZE) in SD_Write_IT()
3694 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3697 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3698 hsd->TxXferSize -= SDMMC_FIFO_SIZE; in SD_Write_IT()
3711 uint32_t SD_SwitchSpeed(SD_HandleTypeDef *hsd, uint32_t SwitchSpeedMode) in SD_SwitchSpeed() argument
3720 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_SwitchSpeed()
3726 if (hsd->SdCard.CardSpeed >= CARD_HIGH_SPEED) in SD_SwitchSpeed()
3729 hsd->Instance->DCTRL = 0; in SD_SwitchSpeed()
3730 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SwitchSpeed()
3745 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_SwitchSpeed()
3747 errorstate = SDMMC_CmdSwitch(hsd->Instance, SwitchSpeedMode); in SD_SwitchSpeed()
3753 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_SwitchSpeed()
3756 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SwitchSpeed()
3760 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_SwitchSpeed()
3766 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_SwitchSpeed()
3767 hsd->State = HAL_SD_STATE_READY; in SD_SwitchSpeed()
3772 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SwitchSpeed()
3774 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_SwitchSpeed()
3778 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SwitchSpeed()
3780 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_SwitchSpeed()
3786 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SwitchSpeed()
3788 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_SwitchSpeed()
3800 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SwitchSpeed()
3823 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd, uint32_t UltraHighSpeedMode) in SD_UltraHighSpeed() argument
3832 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_UltraHighSpeed()
3838 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_UltraHighSpeed()
3841 hsd->Instance->DCTRL = 0; in SD_UltraHighSpeed()
3842 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_UltraHighSpeed()
3857 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_UltraHighSpeed()
3862 errorstate = SDMMC_CmdSwitch(hsd->Instance, UltraHighSpeedMode); in SD_UltraHighSpeed()
3868 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_UltraHighSpeed()
3871 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_UltraHighSpeed()
3875 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_UltraHighSpeed()
3882 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_UltraHighSpeed()
3883 hsd->State = HAL_SD_STATE_READY; in SD_UltraHighSpeed()
3888 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_UltraHighSpeed()
3890 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_UltraHighSpeed()
3894 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_UltraHighSpeed()
3896 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_UltraHighSpeed()
3902 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_UltraHighSpeed()
3904 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_UltraHighSpeed()
3916 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_UltraHighSpeed()
3926 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_UltraHighSpeed()
3933 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_1); in SD_UltraHighSpeed()
3934 if (DelayBlock_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)) != HAL_OK) in SD_UltraHighSpeed()
3953 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd) in SD_DDR_Mode() argument
3962 if (hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_DDR_Mode()
3968 if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_DDR_Mode()
3971 hsd->Instance->DCTRL = 0; in SD_DDR_Mode()
3972 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_DDR_Mode()
3987 if (SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_DDR_Mode()
3992 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_DDR50_SWITCH_PATTERN); in SD_DDR_Mode()
3998 …while (!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in SD_DDR_Mode()
4001 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_DDR_Mode()
4005 SD_hs[(8U * loop) + count] = SDMMC_ReadFIFO(hsd->Instance); in SD_DDR_Mode()
4012 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_DDR_Mode()
4013 hsd->State = HAL_SD_STATE_READY; in SD_DDR_Mode()
4018 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_DDR_Mode()
4020 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_DDR_Mode()
4024 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_DDR_Mode()
4026 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_DDR_Mode()
4032 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_DDR_Mode()
4034 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_DDR_Mode()
4046 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DDR_Mode()
4056 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_DDR_Mode()
4063 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX, SDMMC_CLKCR_SELCLKRX_0); in SD_DDR_Mode()
4064 if (DelayBlock_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)) != HAL_OK) in SD_DDR_Mode()
4082 __weak void HAL_SDEx_Read_DMADoubleBuf0CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMADoubleBuf0CpltCallback() argument
4085 UNUSED(hsd); in HAL_SDEx_Read_DMADoubleBuf0CpltCallback()
4097 __weak void HAL_SDEx_Read_DMADoubleBuf1CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMADoubleBuf1CpltCallback() argument
4100 UNUSED(hsd); in HAL_SDEx_Read_DMADoubleBuf1CpltCallback()
4112 __weak void HAL_SDEx_Write_DMADoubleBuf0CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMADoubleBuf0CpltCallback() argument
4115 UNUSED(hsd); in HAL_SDEx_Write_DMADoubleBuf0CpltCallback()
4127 __weak void HAL_SDEx_Write_DMADoubleBuf1CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMADoubleBuf1CpltCallback() argument
4130 UNUSED(hsd); in HAL_SDEx_Write_DMADoubleBuf1CpltCallback()