Lines Matching refs:hsd

233 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd);
234 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd);
235 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
236 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
237 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd);
238 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd);
239 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR);
240 static void SD_PowerOFF(SD_HandleTypeDef *hsd);
241 static void SD_Write_IT(SD_HandleTypeDef *hsd);
242 static void SD_Read_IT(SD_HandleTypeDef *hsd);
243 static uint32_t SD_HighSpeed(SD_HandleTypeDef *hsd);
245 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd);
277 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) in HAL_SD_Init() argument
284 if(hsd == NULL) in HAL_SD_Init()
290 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
291 assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
292 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
293 assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
294 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
295 assert_param(IS_SDMMC_CLKDIV(hsd->Init.ClockDiv)); in HAL_SD_Init()
297 if(hsd->State == HAL_SD_STATE_RESET) in HAL_SD_Init()
300 hsd->Lock = HAL_UNLOCKED; in HAL_SD_Init()
303 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_Init()
304 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_Init()
305 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_Init()
306 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_Init()
307 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuffer0CpltCallback; in HAL_SD_Init()
308 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuffer1CpltCallback; in HAL_SD_Init()
309 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuffer0CpltCallback; in HAL_SD_Init()
310 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuffer1CpltCallback; in HAL_SD_Init()
312 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_Init()
315 if(hsd->MspInitCallback == NULL) in HAL_SD_Init()
317 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_Init()
321 hsd->MspInitCallback(hsd); in HAL_SD_Init()
324 HAL_SD_MspInit(hsd); in HAL_SD_Init()
328 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Init()
331 if (HAL_SD_InitCard(hsd) != HAL_OK) in HAL_SD_Init()
336 if( HAL_SD_GetCardStatus(hsd, &CardStatus) != HAL_OK) in HAL_SD_Init()
343 if ((hsd->SdCard.CardType == CARD_SDHC_SDXC) && ((speedgrade != 0U) || (unitsize != 0U))) in HAL_SD_Init()
345 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in HAL_SD_Init()
349 if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_Init()
351 hsd->SdCard.CardSpeed = CARD_HIGH_SPEED; in HAL_SD_Init()
355 hsd->SdCard.CardSpeed = CARD_NORMAL_SPEED; in HAL_SD_Init()
360 if(HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) in HAL_SD_Init()
365 if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_Init()
366 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_Init()
368 hsd->Instance->CLKCR |= 0x00100000U; in HAL_SD_Init()
370 if(SD_UltraHighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_Init()
375 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_Init()
378 if(SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_Init()
388 if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_Init()
389 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_Init()
390 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_Init()
393 if(SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_Init()
403 while((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_Init()
407 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Init()
408 hsd->State= HAL_SD_STATE_READY; in HAL_SD_Init()
414 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Init()
417 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
420 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
432 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) in HAL_SD_InitCard() argument
447 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
451 status = SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
458 status = SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
465 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
468 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
469 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
474 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
477 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
478 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
490 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
493 if(hsd == NULL) in HAL_SD_DeInit()
499 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
501 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
506 if(hsd->DriveTransceiver_1_8V_Callback == NULL) in HAL_SD_DeInit()
508 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_DeInit()
510 hsd->DriveTransceiver_1_8V_Callback(RESET); in HAL_SD_DeInit()
517 SD_PowerOFF(hsd); in HAL_SD_DeInit()
520 if(hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
522 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
526 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
529 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
532 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
533 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
544 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
547 UNUSED(hsd); in HAL_SD_MspInit()
559 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
562 UNUSED(hsd); in HAL_SD_MspDeInit()
600 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
611 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
615 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
617 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
619 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
621 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
625 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
628 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
630 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
636 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ReadBlocks()
640 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
641 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
642 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
653 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
654 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks()
659 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
662 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
666 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
669 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
674 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
675 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
676 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
681 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in HAL_SD_ReadBlocks()
683 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in HAL_SD_ReadBlocks()
688 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
703 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
704 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
705 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
709 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_ReadBlocks()
712 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
714 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
717 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
721 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
722 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
723 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
730 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
733 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
734 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
735 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
738 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
741 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
742 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
743 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
746 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
749 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
750 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
751 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
760 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
762 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
768 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
785 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint… in HAL_SD_WriteBlocks() argument
796 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
800 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
802 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
804 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
806 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
810 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
813 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
815 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
821 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_WriteBlocks()
825 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
826 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
827 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
838 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
839 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks()
844 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
847 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
851 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
854 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
859 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
860 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
861 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
866 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_WriteBlocks()
868 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE)) in HAL_SD_WriteBlocks()
881 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
888 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
889 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
890 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
894 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_WriteBlocks()
897 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
899 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
902 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
906 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
907 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
908 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
915 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
918 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
919 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
920 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
923 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
926 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
927 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
928 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
931 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
934 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
935 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
936 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
945 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
947 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
953 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
971 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, ui… in HAL_SD_ReadBlocks_IT() argument
979 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
983 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
985 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
987 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
989 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
993 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
996 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
998 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
999 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1001 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
1003 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1009 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ReadBlocks_IT()
1013 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1014 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1015 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1026 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1027 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks_IT()
1032 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1035 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1039 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1042 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1047 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1048 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1049 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1074 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_WriteBlocks_IT() argument
1082 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1086 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1088 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1090 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1092 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1096 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1099 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1101 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1102 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1105 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1107 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1113 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_WriteBlocks_IT()
1117 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1118 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1119 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1130 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1132 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks_IT()
1137 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1140 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1144 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1147 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1152 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1153 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1154 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1179 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_ReadBlocks_DMA() argument
1187 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1191 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1193 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1195 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1197 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1201 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1204 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1206 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_DMA()
1207 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_DMA()
1209 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1215 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ReadBlocks_DMA()
1219 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1220 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1221 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1232 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1235 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1237 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks_DMA()
1238 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_ReadBlocks_DMA()
1239 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_ReadBlocks_DMA()
1244 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1247 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1251 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1254 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1259 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1260 …__HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATA… in HAL_SD_ReadBlocks_DMA()
1261 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1262 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1287 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, … in HAL_SD_WriteBlocks_DMA() argument
1295 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1299 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1301 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1303 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1305 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1309 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1312 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1314 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_DMA()
1315 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_DMA()
1317 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1323 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_WriteBlocks_DMA()
1327 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1328 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1329 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1339 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1342 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_DMA()
1344 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks_DMA()
1346 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_WriteBlocks_DMA()
1347 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_WriteBlocks_DMA()
1352 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1355 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1359 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1362 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1367 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1368 …__HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DAT… in HAL_SD_WriteBlocks_DMA()
1369 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1370 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1391 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1397 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1399 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1403 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1407 if(end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1409 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1413 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1416 if(((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1419 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1420 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1421 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1425 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1428 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1429 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1430 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1435 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1442 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1445 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1449 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1450 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1451 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1456 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1460 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1461 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1462 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1468 errorstate = SDMMC_CmdErase(hsd->Instance); in HAL_SD_Erase()
1472 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1473 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1474 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1478 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1493 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1496 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1499 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DATAEND) != RESET) in HAL_SD_IRQHandler()
1501 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1503 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT |\ in HAL_SD_IRQHandler()
1507 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1508 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_IRQHandler()
1514 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1517 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1519 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1521 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1527 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1529 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1533 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1535 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1541 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1543 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1549 hsd->Instance->DLEN = 0; in HAL_SD_IRQHandler()
1550 hsd->Instance->DCTRL = 0; in HAL_SD_IRQHandler()
1551 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; 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()
1568 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1572 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1574 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1580 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1582 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1592 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXFIFOHE) != RESET) in HAL_SD_IRQHandler()
1594 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1597 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXFIFOHF) != RESET) in HAL_SD_IRQHandler()
1599 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1602 …else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT… in HAL_SD_IRQHandler()
1605 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1607 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1609 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1611 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1613 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1615 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1617 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1619 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1623 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1626 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1629 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_IRQHandler()
1630 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_SD_IRQHandler()
1631 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_SD_IRQHandler()
1632 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1633 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_SD_IRQHandler()
1634 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT); in HAL_SD_IRQHandler()
1639 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1641 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1643 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1648 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_IRQHandler()
1651 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1652 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1655 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1657 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1659 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1669 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_IDMABTC) != RESET) in HAL_SD_IRQHandler()
1671 if(READ_BIT(hsd->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == 0U) in HAL_SD_IRQHandler()
1674 if((hsd->Context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U) in HAL_SD_IRQHandler()
1677 hsd->Write_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1679 HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(hsd); in HAL_SD_IRQHandler()
1685 hsd->Read_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1687 HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(hsd); in HAL_SD_IRQHandler()
1697 hsd->Write_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1699 HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(hsd); in HAL_SD_IRQHandler()
1705 hsd->Read_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1707 HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(hsd); in HAL_SD_IRQHandler()
1711 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); in HAL_SD_IRQHandler()
1724 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1726 return hsd->State; in HAL_SD_GetState()
1735 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1737 return hsd->ErrorCode; in HAL_SD_GetError()
1745 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1748 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1760 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1763 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1775 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1778 UNUSED(hsd); in HAL_SD_ErrorCallback()
1790 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1793 UNUSED(hsd); in HAL_SD_AbortCallback()
1835 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1842 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1847 __HAL_LOCK(hsd); in HAL_SD_RegisterCallback()
1849 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1854 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1857 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1860 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1863 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1866 hsd->Read_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1869 hsd->Read_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1872 hsd->Write_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1875 hsd->Write_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
1878 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1881 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1885 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1891 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1896 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1899 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1903 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1912 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1918 __HAL_UNLOCK(hsd); in HAL_SD_RegisterCallback()
1940 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1945 __HAL_LOCK(hsd); in HAL_SD_UnRegisterCallback()
1947 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1952 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1955 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1958 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1961 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1964 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuffer0CpltCallback; in HAL_SD_UnRegisterCallback()
1967 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuffer1CpltCallback; in HAL_SD_UnRegisterCallback()
1970 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuffer0CpltCallback; in HAL_SD_UnRegisterCallback()
1973 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuffer1CpltCallback; in HAL_SD_UnRegisterCallback()
1976 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1979 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1983 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1989 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
1994 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1997 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2001 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2010 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2016 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterCallback()
2028 HAL_StatusTypeDef HAL_SD_RegisterTransceiverCallback(SD_HandleTypeDef *hsd, pSD_TransceiverCallback… in HAL_SD_RegisterTransceiverCallback() argument
2035 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2040 __HAL_LOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2042 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterTransceiverCallback()
2044 hsd->DriveTransceiver_1_8V_Callback = pCallback; in HAL_SD_RegisterTransceiverCallback()
2049 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2055 __HAL_UNLOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2065 HAL_StatusTypeDef HAL_SD_UnRegisterTransceiverCallback(SD_HandleTypeDef *hsd) in HAL_SD_UnRegisterTransceiverCallback() argument
2070 __HAL_LOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2072 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterTransceiverCallback()
2074 hsd->DriveTransceiver_1_8V_Callback = HAL_SD_DriveTransceiver_1_8V_Callback; in HAL_SD_UnRegisterTransceiverCallback()
2079 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterTransceiverCallback()
2085 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2118 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypedef *pCID) in HAL_SD_GetCardCID() argument
2120 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2122 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2124 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2126 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2128 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2130 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2132 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2134 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2136 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2151 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypedef *pCSD) in HAL_SD_GetCardCSD() argument
2153 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2155 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2157 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2159 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2161 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2163 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2165 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2167 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2169 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2171 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2173 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2175 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2179 if(hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2181 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2183 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2185 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2187 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2189 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2191 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2193 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2194 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2195 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2197 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U); in HAL_SD_GetCardCSD()
2198 hsd->SdCard.LogBlockSize = 512U; in HAL_SD_GetCardCSD()
2200 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2203 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2205 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2206 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2207 hsd->SdCard.BlockSize = 512U; in HAL_SD_GetCardCSD()
2208 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2213 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2214 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2215 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2219 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2221 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2223 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2225 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2227 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2229 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2231 pCSD->MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2233 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2237 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2239 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2241 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2243 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2245 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2247 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2249 pCSD->ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2251 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2265 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypedef *pStatus) in HAL_SD_GetCardStatus() argument
2270 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2274 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2275 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2276 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2317 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2319 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2320 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2321 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2322 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2323 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2324 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2325 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2326 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2342 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2351 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2353 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2357 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2361 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2363 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2367 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2369 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2374 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2380 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2383 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2386 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2387 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2393 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2394 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2396 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2399 if(hsd->Init.ClockDiv >= SDMMC_NSpeed_CLK_DIV) in HAL_SD_ConfigWideBusOperation()
2401 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2403 else if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2406 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2408 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2419 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2423 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2433 HAL_SD_CardStateTypedef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2439 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2442 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2456 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2461 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort()
2465 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Abort()
2468 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort()
2470 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2473 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2475 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort()
2478 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2480 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2493 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2498 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort_IT()
2502 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort_IT()
2505 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2507 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2508 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2512 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2515 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2522 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2524 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
2550 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
2557 if(SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
2563 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2566 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
2574 hsd->CID[0] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
2575 hsd->CID[1] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
2576 hsd->CID[2] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
2577 hsd->CID[3] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
2581 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2585 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
2591 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2594 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
2597 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
2605 hsd->CSD[0] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
2606 hsd->CSD[1] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
2607 hsd->CSD[2] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
2608 hsd->CSD[3] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
2613 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20); in SD_InitCard()
2616 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
2622 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16)… in SD_InitCard()
2639 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
2649 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2656 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
2659 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
2663 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
2667 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2679 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2686 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY … in SD_PowerON()
2693 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
2708 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
2712 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
2715 hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; in SD_PowerON()
2718 errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); in SD_PowerON()
2725 while(( hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP) in SD_PowerON()
2734 hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; in SD_PowerON()
2737 if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) in SD_PowerON()
2746 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_PowerON()
2752 hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; in SD_PowerON()
2755 while(( hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND) in SD_PowerON()
2764 hsd->Instance->ICR = SDMMC_FLAG_VSWEND; in SD_PowerON()
2767 if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) in SD_PowerON()
2775 hsd->Instance->POWER = 0x13U; in SD_PowerON()
2778 hsd->Instance->ICR = 0xFFFFFFFFU; in SD_PowerON()
2781 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
2795 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
2798 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
2808 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
2817 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
2823 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64); in SD_SendSDStatus()
2826 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2831 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16)); in SD_SendSDStatus()
2834 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2845 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
2848 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
2851 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2856 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_SendSDStatus()
2858 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
2862 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2873 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
2877 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
2881 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
2890 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) in SD_SendSDStatus()
2892 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2902 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
2914 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
2924 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16)); in SD_SendStatus()
2931 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
2941 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
2946 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
2952 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
2962 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16)); in SD_WideBus_Enable()
2969 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2); in SD_WideBus_Enable()
2988 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
2993 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
2999 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3009 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16)); in SD_WideBus_Disable()
3016 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0); in SD_WideBus_Disable()
3037 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3047 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8); in SD_FindSCR()
3054 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16)); in SD_FindSCR()
3066 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3069 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3075 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_FindSCR()
3077 if((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0U)) in SD_FindSCR()
3079 tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3080 tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3091 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3093 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3097 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3099 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3103 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3105 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3113 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
3132 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3137 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3142 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
3153 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3162 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3167 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3180 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3183 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3186 uint32_t SD_HighSpeed(SD_HandleTypeDef *hsd) in SD_HighSpeed() argument
3194 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_HighSpeed()
3200 if(hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in SD_HighSpeed()
3203 hsd->Instance->DCTRL = 0; in SD_HighSpeed()
3204 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64); in SD_HighSpeed()
3219 if ( SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_HighSpeed()
3225 errorstate = SDMMC_CmdSwitch(hsd->Instance,SDMMC_SDR25_SWITCH_PATTERN); in SD_HighSpeed()
3231 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_HighSpeed()
3233 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_HighSpeed()
3237 SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance); in SD_HighSpeed()
3244 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_HighSpeed()
3245 hsd->State= HAL_SD_STATE_READY; in SD_HighSpeed()
3250 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_HighSpeed()
3252 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_HighSpeed()
3258 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_HighSpeed()
3260 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_HighSpeed()
3266 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_HighSpeed()
3268 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_HighSpeed()
3280 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in SD_HighSpeed()
3302 uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd) in SD_UltraHighSpeed() argument
3310 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_UltraHighSpeed()
3316 if(hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in SD_UltraHighSpeed()
3319 hsd->Instance->DCTRL = 0; in SD_UltraHighSpeed()
3320 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64); in SD_UltraHighSpeed()
3335 if ( SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure) != HAL_OK) in SD_UltraHighSpeed()
3340 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_SDR104_SWITCH_PATTERN); in SD_UltraHighSpeed()
3346 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_UltraHighSpeed()
3348 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_UltraHighSpeed()
3352 SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance); in SD_UltraHighSpeed()
3359 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_UltraHighSpeed()
3360 hsd->State= HAL_SD_STATE_READY; in SD_UltraHighSpeed()
3365 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_UltraHighSpeed()
3367 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_UltraHighSpeed()
3373 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_UltraHighSpeed()
3375 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_UltraHighSpeed()
3381 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_UltraHighSpeed()
3383 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_UltraHighSpeed()
3395 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_UltraHighSpeed()
3405 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_UltraHighSpeed()
3412 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX,SDMMC_CLKCR_SELCLKRX_1); in SD_UltraHighSpeed()
3430 __weak void HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMADoubleBuffer0CpltCallback() argument
3433 UNUSED(hsd); in HAL_SDEx_Read_DMADoubleBuffer0CpltCallback()
3445 __weak void HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Read_DMADoubleBuffer1CpltCallback() argument
3448 UNUSED(hsd); in HAL_SDEx_Read_DMADoubleBuffer1CpltCallback()
3460 __weak void HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMADoubleBuffer0CpltCallback() argument
3463 UNUSED(hsd); in HAL_SDEx_Write_DMADoubleBuffer0CpltCallback()
3475 __weak void HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd) in HAL_SDEx_Write_DMADoubleBuffer1CpltCallback() argument
3478 UNUSED(hsd); in HAL_SDEx_Write_DMADoubleBuffer1CpltCallback()