Lines Matching refs:hsd

290 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd);
291 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd);
292 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
293 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
294 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd);
295 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd);
296 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR);
297 static void SD_PowerOFF(SD_HandleTypeDef *hsd);
298 static void SD_Write_IT(SD_HandleTypeDef *hsd);
299 static void SD_Read_IT(SD_HandleTypeDef *hsd);
335 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) in HAL_SD_Init() argument
338 if(hsd == NULL) in HAL_SD_Init()
344 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
345 assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
346 assert_param(IS_SDMMC_CLOCK_BYPASS(hsd->Init.ClockBypass)); in HAL_SD_Init()
347 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
348 assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
349 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
350 assert_param(IS_SDMMC_CLKDIV(hsd->Init.ClockDiv)); in HAL_SD_Init()
352 if(hsd->State == HAL_SD_STATE_RESET) in HAL_SD_Init()
355 hsd->Lock = HAL_UNLOCKED; in HAL_SD_Init()
358 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_Init()
359 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_Init()
360 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_Init()
361 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_Init()
363 if(hsd->MspInitCallback == NULL) in HAL_SD_Init()
365 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_Init()
369 hsd->MspInitCallback(hsd); in HAL_SD_Init()
372 HAL_SD_MspInit(hsd); in HAL_SD_Init()
376 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Init()
379 if (HAL_SD_InitCard(hsd) != HAL_OK) in HAL_SD_Init()
385 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Init()
388 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
391 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
403 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) in HAL_SD_InitCard() argument
418 status = SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
425 __HAL_SD_DISABLE(hsd); in HAL_SD_InitCard()
428 (void)SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
431 __HAL_SD_ENABLE(hsd); in HAL_SD_InitCard()
437 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
440 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
441 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
446 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
449 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
450 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
455 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
459 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_InitCard()
460 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
461 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
473 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
476 if(hsd == NULL) in HAL_SD_DeInit()
482 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
484 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
487 SD_PowerOFF(hsd); in HAL_SD_DeInit()
490 if(hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
492 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
496 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
499 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
502 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
503 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
514 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
517 UNUSED(hsd); in HAL_SD_MspInit()
529 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
532 UNUSED(hsd); in HAL_SD_MspDeInit()
570 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
581 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
585 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
587 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
589 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
591 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
595 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
598 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
600 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
612 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
617 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
620 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
624 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
627 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
632 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
633 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
634 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
635 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
641 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in HAL_SD_ReadBlocks()
643 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
648 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
667 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
668 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
669 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
670 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
676 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
678 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
681 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
685 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
686 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
687 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
688 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
695 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
698 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
699 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
700 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
701 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
704 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
707 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
708 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
709 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
710 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
713 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
716 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
717 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
718 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
719 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
728 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
730 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
747 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
748 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
749 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
750 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
756 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
758 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
764 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
781 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint… in HAL_SD_WriteBlocks() argument
792 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
796 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
798 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
800 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
802 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
806 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
809 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
811 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
823 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
828 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
831 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
835 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
838 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
843 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
844 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
845 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
846 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
852 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_WriteBlocks()
854 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) && (dataremaining > 0U)) in HAL_SD_WriteBlocks()
871 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
878 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
879 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
880 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
881 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
887 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
889 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
892 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
896 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
897 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
898 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
899 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
906 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
909 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
910 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
911 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
912 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
915 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
918 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
919 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
920 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
921 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
924 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
927 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
928 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
929 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
930 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
939 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
941 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
947 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
965 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, ui… in HAL_SD_ReadBlocks_IT() argument
973 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
977 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
979 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
981 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
983 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
987 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
990 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
992 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
993 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
995 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
997 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1009 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1014 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1017 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1021 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1024 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1029 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1030 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1031 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1032 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1057 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_WriteBlocks_IT() argument
1065 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1069 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1071 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1073 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1075 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1079 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1082 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1084 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1085 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1088 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1090 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1098 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1101 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1105 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1108 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1113 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1114 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1115 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1116 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1127 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1150 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_ReadBlocks_DMA() argument
1158 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1162 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1164 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1166 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1168 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1172 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1175 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1177 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1180 hsd->hdmarx->XferCpltCallback = SD_DMAReceiveCplt; in HAL_SD_ReadBlocks_DMA()
1183 hsd->hdmarx->XferErrorCallback = SD_DMAError; in HAL_SD_ReadBlocks_DMA()
1186 hsd->hdmarx->XferAbortCallback = NULL; in HAL_SD_ReadBlocks_DMA()
1189 hsd->hdmarx->Init.Direction = DMA_PERIPH_TO_MEMORY; in HAL_SD_ReadBlocks_DMA()
1190 MODIFY_REG(hsd->hdmarx->Instance->CR, DMA_SxCR_DIR, hsd->hdmarx->Init.Direction); in HAL_SD_ReadBlocks_DMA()
1193 …if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCK… in HAL_SD_ReadBlocks_DMA()
1195 …__HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATA… in HAL_SD_ReadBlocks_DMA()
1196 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1197 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_ReadBlocks_DMA()
1198 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1204 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_ReadBlocks_DMA()
1206 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1218 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1223 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1226 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1230 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1233 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1238 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1239 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1240 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1241 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1267 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, … in HAL_SD_WriteBlocks_DMA() argument
1275 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1279 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1281 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1283 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1285 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1289 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1292 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1295 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1298 hsd->hdmatx->XferCpltCallback = SD_DMATransmitCplt; in HAL_SD_WriteBlocks_DMA()
1301 hsd->hdmatx->XferErrorCallback = SD_DMAError; in HAL_SD_WriteBlocks_DMA()
1304 hsd->hdmatx->XferAbortCallback = NULL; in HAL_SD_WriteBlocks_DMA()
1306 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1314 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1317 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1321 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1324 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1329 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1330 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1331 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1332 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1337 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_WriteBlocks_DMA()
1340 hsd->hdmatx->Init.Direction = DMA_MEMORY_TO_PERIPH; in HAL_SD_WriteBlocks_DMA()
1341 MODIFY_REG(hsd->hdmatx->Instance->CR, DMA_SxCR_DIR, hsd->hdmatx->Init.Direction); in HAL_SD_WriteBlocks_DMA()
1344 …if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCK… in HAL_SD_WriteBlocks_DMA()
1346 __HAL_SD_DISABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1347 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1348 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_WriteBlocks_DMA()
1349 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1350 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1362 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1382 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1388 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1390 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1394 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1398 if(end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1400 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1404 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1407 if(((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1410 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1411 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1412 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1416 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1419 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1420 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1421 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1426 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1433 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1436 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1440 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1441 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1442 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1447 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1451 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1452 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1453 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1459 errorstate = SDMMC_CmdErase(hsd->Instance); in HAL_SD_Erase()
1463 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1464 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1465 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1469 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1484 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1487 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1490 if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1492 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1495 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1497 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1499 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1503 hsd->Instance->DCTRL &= ~(SDMMC_DCTRL_DTEN); in HAL_SD_IRQHandler()
1509 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1512 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1514 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1516 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1522 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1524 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1525 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1529 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1531 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1537 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1539 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1547 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1550 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1552 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1554 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1562 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_IRQHandler()
1564 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1567 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1569 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1579 …else if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U… in HAL_SD_IRQHandler()
1581 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1584 …else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | SD… in HAL_SD_IRQHandler()
1587 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1589 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1591 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1593 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1595 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1597 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1599 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1601 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1605 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1608 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1611 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1616 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1617 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1619 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1621 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1630 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_IRQHandler()
1632 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_IRQHandler()
1634 SD_DMATxAbort(hsd->hdmatx); in HAL_SD_IRQHandler()
1640 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_IRQHandler()
1642 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_IRQHandler()
1644 SD_DMARxAbort(hsd->hdmarx); in HAL_SD_IRQHandler()
1649 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_IRQHandler()
1650 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1651 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1653 hsd->AbortCpltCallback(hsd); in HAL_SD_IRQHandler()
1655 HAL_SD_AbortCallback(hsd); in HAL_SD_IRQHandler()
1675 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1677 return hsd->State; in HAL_SD_GetState()
1686 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1688 return hsd->ErrorCode; in HAL_SD_GetError()
1696 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1699 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1711 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1714 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1726 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1729 UNUSED(hsd); in HAL_SD_ErrorCallback()
1741 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1744 UNUSED(hsd); in HAL_SD_AbortCallback()
1767 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1774 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1779 __HAL_LOCK(hsd); in HAL_SD_RegisterCallback()
1781 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1786 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1789 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1792 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1795 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1798 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1801 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1805 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1811 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1816 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1819 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1823 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1832 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1838 __HAL_UNLOCK(hsd); in HAL_SD_RegisterCallback()
1856 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1861 __HAL_LOCK(hsd); in HAL_SD_UnRegisterCallback()
1863 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1868 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1871 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1874 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1877 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1880 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1883 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1887 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1893 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
1898 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1901 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1905 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1914 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1920 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterCallback()
1952 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
1954 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
1956 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
1958 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
1960 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
1962 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
1964 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
1966 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
1968 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
1970 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
1985 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
1987 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
1989 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
1991 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
1993 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
1995 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
1997 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
1999 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2001 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2003 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2005 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2007 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2009 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2013 if(hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2015 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2017 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2019 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2021 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2023 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2025 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2027 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2028 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2029 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2031 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U); in HAL_SD_GetCardCSD()
2032 hsd->SdCard.LogBlockSize = 512U; in HAL_SD_GetCardCSD()
2034 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2037 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2039 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2040 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2041 hsd->SdCard.BlockSize = 512U; in HAL_SD_GetCardCSD()
2042 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2047 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2048 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2049 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2053 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2055 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2057 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2059 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2061 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2063 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2065 pCSD->MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2067 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2071 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2073 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2075 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2077 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2079 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2081 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2083 pCSD->ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2085 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2099 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2105 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2109 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2110 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2111 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2139 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2143 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2144 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2145 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2159 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2161 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2162 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2163 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2164 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2165 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2166 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2167 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2168 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2184 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2194 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2196 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2200 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2204 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2206 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2210 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2212 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2217 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2223 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2226 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2229 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2230 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2236 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2237 Init.ClockBypass = hsd->Init.ClockBypass; in HAL_SD_ConfigWideBusOperation()
2238 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2240 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2241 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2242 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2246 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2250 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2251 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2256 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2266 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2272 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2275 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2289 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2292 uint32_t context = hsd->Context; in HAL_SD_Abort()
2295 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort()
2299 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2301 CLEAR_BIT(hsd->Instance->DCTRL, SDMMC_DCTRL_DTEN); in HAL_SD_Abort()
2306 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_Abort()
2311 if(HAL_DMA_Abort(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort()
2313 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2319 if(HAL_DMA_Abort(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort()
2321 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2330 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2333 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2335 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort()
2338 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2340 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2353 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2356 uint32_t context = hsd->Context; in HAL_SD_Abort_IT()
2359 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort_IT()
2362 CLEAR_BIT(hsd->Instance->DCTRL, SDMMC_DCTRL_DTEN); in HAL_SD_Abort_IT()
2367 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_Abort_IT()
2372 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_Abort_IT()
2373 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort_IT()
2375 hsd->hdmatx = NULL; in HAL_SD_Abort_IT()
2381 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_Abort_IT()
2382 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort_IT()
2384 hsd->hdmarx = NULL; in HAL_SD_Abort_IT()
2396 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2398 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2399 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2400 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort_IT()
2403 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2405 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2412 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2414 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
2442 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATransmitCplt() local
2445 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DATAEND)); in SD_DMATransmitCplt()
2455 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAReceiveCplt() local
2459 if(hsd->Context == (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA)) in SD_DMAReceiveCplt()
2461 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAReceiveCplt()
2464 hsd->ErrorCode |= errorstate; in SD_DMAReceiveCplt()
2466 hsd->ErrorCallback(hsd); in SD_DMAReceiveCplt()
2468 HAL_SD_ErrorCallback(hsd); in SD_DMAReceiveCplt()
2475 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in SD_DMAReceiveCplt()
2478 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMAReceiveCplt()
2480 hsd->State = HAL_SD_STATE_READY; in SD_DMAReceiveCplt()
2481 hsd->Context = SD_CONTEXT_NONE; in SD_DMAReceiveCplt()
2484 hsd->RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2486 HAL_SD_RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2497 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAError() local
2504 RxErrorCode = hsd->hdmarx->ErrorCode; in SD_DMAError()
2505 TxErrorCode = hsd->hdmatx->ErrorCode; in SD_DMAError()
2509 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in SD_DMAError()
2512 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in SD_DMAError()
2515 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in SD_DMAError()
2516 CardState = HAL_SD_GetCardState(hsd); in SD_DMAError()
2519 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAError()
2522 hsd->State= HAL_SD_STATE_READY; in SD_DMAError()
2523 hsd->Context = SD_CONTEXT_NONE; in SD_DMAError()
2527 hsd->ErrorCallback(hsd); in SD_DMAError()
2529 HAL_SD_ErrorCallback(hsd); in SD_DMAError()
2541 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATxAbort() local
2545 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMATxAbort()
2547 CardState = HAL_SD_GetCardState(hsd); in SD_DMATxAbort()
2548 hsd->State = HAL_SD_STATE_READY; in SD_DMATxAbort()
2549 hsd->Context = SD_CONTEXT_NONE; in SD_DMATxAbort()
2552 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMATxAbort()
2555 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMATxAbort()
2558 hsd->AbortCpltCallback(hsd); in SD_DMATxAbort()
2560 HAL_SD_AbortCallback(hsd); in SD_DMATxAbort()
2566 hsd->ErrorCallback(hsd); in SD_DMATxAbort()
2568 HAL_SD_ErrorCallback(hsd); in SD_DMATxAbort()
2580 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMARxAbort() local
2584 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMARxAbort()
2586 CardState = HAL_SD_GetCardState(hsd); in SD_DMARxAbort()
2587 hsd->State = HAL_SD_STATE_READY; in SD_DMARxAbort()
2588 hsd->Context = SD_CONTEXT_NONE; in SD_DMARxAbort()
2591 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMARxAbort()
2594 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMARxAbort()
2597 hsd->AbortCpltCallback(hsd); in SD_DMARxAbort()
2599 HAL_SD_AbortCallback(hsd); in SD_DMARxAbort()
2605 hsd->ErrorCallback(hsd); in SD_DMARxAbort()
2607 HAL_SD_ErrorCallback(hsd); in SD_DMARxAbort()
2617 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
2624 if(SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
2630 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2633 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
2641 hsd->CID[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
2642 hsd->CID[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
2643 hsd->CID[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
2644 hsd->CID[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
2648 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2652 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
2658 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2661 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
2664 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
2672 hsd->CSD[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
2673 hsd->CSD[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
2674 hsd->CSD[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
2675 hsd->CSD[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
2680 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20U); in SD_InitCard()
2683 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
2689 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
2696 (void)SDMMC_Init(hsd->Instance, hsd->Init); in SD_InitCard()
2709 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
2716 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2723 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
2726 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
2728 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2737 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
2740 if( hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
2743 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2754 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2761 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY … in SD_PowerON()
2768 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
2783 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
2787 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
2799 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
2802 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
2812 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
2821 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
2827 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
2830 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2835 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
2838 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2849 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
2852 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
2855 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2860 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_SendSDStatus()
2862 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
2866 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2877 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
2881 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
2885 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
2894 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))) in SD_SendSDStatus()
2896 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2906 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
2918 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
2928 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
2935 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
2945 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
2950 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
2956 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
2966 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
2973 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
2992 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
2997 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3003 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3013 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3020 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3041 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3051 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3058 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3070 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3073 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3079 while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3081 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) in SD_FindSCR()
3083 *(tempscr + index) = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3086 else if(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXACT)) in SD_FindSCR()
3097 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3099 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3103 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3105 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3109 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3111 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3119 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
3138 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3143 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3144 dataremaining = hsd->RxXferSize; in SD_Read_IT()
3151 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
3166 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3167 hsd->RxXferSize = dataremaining; in SD_Read_IT()
3177 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3182 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3183 dataremaining = hsd->TxXferSize; in SD_Write_IT()
3202 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3205 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3206 hsd->TxXferSize = dataremaining; in SD_Write_IT()