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_SDIO_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
345 assert_param(IS_SDIO_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
346 assert_param(IS_SDIO_CLOCK_BYPASS(hsd->Init.ClockBypass)); in HAL_SD_Init()
347 assert_param(IS_SDIO_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
348 assert_param(IS_SDIO_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
349 assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
350 assert_param(IS_SDIO_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
417 SDIO_Init(hsd->Instance, Init); in HAL_SD_InitCard()
420 __HAL_SD_DISABLE(hsd); in HAL_SD_InitCard()
423 (void)SDIO_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
426 __HAL_SD_ENABLE(hsd); in HAL_SD_InitCard()
432 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
435 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
436 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
441 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
444 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
445 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
450 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
454 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_InitCard()
455 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
456 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
468 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
471 if(hsd == NULL) in HAL_SD_DeInit()
477 assert_param(IS_SDIO_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
479 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
482 SD_PowerOFF(hsd); in HAL_SD_DeInit()
485 if(hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
487 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
491 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
494 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
497 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
498 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
509 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
512 UNUSED(hsd); in HAL_SD_MspInit()
524 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
527 UNUSED(hsd); in HAL_SD_MspDeInit()
565 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
576 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
580 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
582 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
584 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
586 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
590 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
593 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
595 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
607 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
612 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
615 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
619 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
622 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
627 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
628 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
629 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
630 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
636 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_F… in HAL_SD_ReadBlocks()
638 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
643 data = SDIO_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
662 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
663 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
664 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
665 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
671 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
673 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
676 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
680 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
681 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
682 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
683 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
690 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in HAL_SD_ReadBlocks()
693 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
694 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
695 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
696 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
699 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
702 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
703 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
704 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
705 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
708 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
711 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
712 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
713 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
714 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
723 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
725 data = SDIO_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
742 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
743 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
744 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
745 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
751 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
753 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
759 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
776 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint… in HAL_SD_WriteBlocks() argument
787 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
791 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
793 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
795 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
797 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
801 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
804 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
806 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
818 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
823 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
826 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
830 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
833 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
838 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
839 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
840 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
841 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
847 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_… in HAL_SD_WriteBlocks()
849 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) && (dataremaining > 0U)) in HAL_SD_WriteBlocks()
866 (void)SDIO_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
873 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
874 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
875 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
876 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
882 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
884 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
887 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
891 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
892 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
893 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
894 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
901 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in HAL_SD_WriteBlocks()
904 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
905 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
906 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
907 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
910 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
913 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
914 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
915 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
916 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
919 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
922 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
923 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
924 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
925 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
934 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
936 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
942 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
960 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, ui… in HAL_SD_ReadBlocks_IT() argument
968 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
972 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
974 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
976 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
978 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
982 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
985 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
987 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
988 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
990 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND |… in HAL_SD_ReadBlocks_IT()
992 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1004 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1009 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1012 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1016 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1019 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1024 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1025 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1026 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1027 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1052 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_WriteBlocks_IT() argument
1060 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1064 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1066 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1068 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1070 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1074 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1077 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1079 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1080 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1083 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND … in HAL_SD_WriteBlocks_IT()
1085 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1093 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1096 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1100 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1103 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1108 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1109 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1110 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1111 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1122 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1145 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_ReadBlocks_DMA() argument
1153 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1157 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1159 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1161 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1163 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1167 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1170 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1172 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)); in HAL_SD_ReadBlocks_DMA()
1175 hsd->hdmarx->XferCpltCallback = SD_DMAReceiveCplt; in HAL_SD_ReadBlocks_DMA()
1178 hsd->hdmarx->XferErrorCallback = SD_DMAError; in HAL_SD_ReadBlocks_DMA()
1181 hsd->hdmarx->XferAbortCallback = NULL; in HAL_SD_ReadBlocks_DMA()
1184 hsd->hdmarx->Init.Direction = DMA_PERIPH_TO_MEMORY; in HAL_SD_ReadBlocks_DMA()
1185 MODIFY_REG(hsd->hdmarx->Instance->CCR, DMA_CCR_DIR, hsd->hdmarx->Init.Direction); in HAL_SD_ReadBlocks_DMA()
1188 …if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCK… in HAL_SD_ReadBlocks_DMA()
1190 …__HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)… in HAL_SD_ReadBlocks_DMA()
1191 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1192 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_ReadBlocks_DMA()
1193 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1199 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_ReadBlocks_DMA()
1201 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1213 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1218 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1221 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1225 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1228 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1233 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1234 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1235 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1236 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1262 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, … in HAL_SD_WriteBlocks_DMA() argument
1270 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1274 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1276 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1278 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1280 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1284 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1287 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1290 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1293 hsd->hdmatx->XferCpltCallback = SD_DMATransmitCplt; in HAL_SD_WriteBlocks_DMA()
1296 hsd->hdmatx->XferErrorCallback = SD_DMAError; in HAL_SD_WriteBlocks_DMA()
1299 hsd->hdmatx->XferAbortCallback = NULL; in HAL_SD_WriteBlocks_DMA()
1301 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1309 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1312 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1316 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1319 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1324 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1325 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1326 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1327 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1332 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_WriteBlocks_DMA()
1335 hsd->hdmatx->Init.Direction = DMA_MEMORY_TO_PERIPH; in HAL_SD_WriteBlocks_DMA()
1336 MODIFY_REG(hsd->hdmatx->Instance->CCR, DMA_CCR_DIR, hsd->hdmatx->Init.Direction); in HAL_SD_WriteBlocks_DMA()
1339 …if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCK… in HAL_SD_WriteBlocks_DMA()
1341 __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1342 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1343 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_WriteBlocks_DMA()
1344 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1345 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1357 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1377 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1383 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1385 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1389 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1393 if(end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1395 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1399 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1402 if(((hsd->SdCard.Class) & SDIO_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1405 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1406 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1407 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1411 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1414 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1415 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1416 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1421 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1428 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1431 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1435 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1436 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1437 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1442 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1446 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1447 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1448 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1454 errorstate = SDMMC_CmdErase(hsd->Instance); in HAL_SD_Erase()
1458 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1459 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1460 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1464 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1479 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1482 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1485 if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1487 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1490 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1492 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DATAEND); in HAL_SD_IRQHandler()
1494 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1498 hsd->Instance->DCTRL &= ~(SDIO_DCTRL_DTEN); in HAL_SD_IRQHandler()
1504 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1507 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1509 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1511 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1517 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1519 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1520 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1524 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1526 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1532 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1534 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1542 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1545 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1547 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1549 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1557 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_IRQHandler()
1559 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1562 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1564 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1574 …else if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1576 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1579 …else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_… in HAL_SD_IRQHandler()
1582 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1584 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1586 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1588 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1590 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1592 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1594 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1596 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1600 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS | SDIO_FLAG_STBITERR); in HAL_SD_IRQHandler()
1603 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1606 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1611 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1612 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1614 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1616 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1625 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_IRQHandler()
1627 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_IRQHandler()
1629 SD_DMATxAbort(hsd->hdmatx); in HAL_SD_IRQHandler()
1635 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_IRQHandler()
1637 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_IRQHandler()
1639 SD_DMARxAbort(hsd->hdmarx); in HAL_SD_IRQHandler()
1644 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_IRQHandler()
1645 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1646 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1648 hsd->AbortCpltCallback(hsd); in HAL_SD_IRQHandler()
1650 HAL_SD_AbortCallback(hsd); in HAL_SD_IRQHandler()
1670 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1672 return hsd->State; in HAL_SD_GetState()
1681 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1683 return hsd->ErrorCode; in HAL_SD_GetError()
1691 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1694 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1706 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1709 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1721 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1724 UNUSED(hsd); in HAL_SD_ErrorCallback()
1736 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1739 UNUSED(hsd); in HAL_SD_AbortCallback()
1762 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1769 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1774 __HAL_LOCK(hsd); in HAL_SD_RegisterCallback()
1776 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1781 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1784 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1787 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1790 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1793 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1796 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1800 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1806 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1811 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1814 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1818 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1827 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1833 __HAL_UNLOCK(hsd); in HAL_SD_RegisterCallback()
1851 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1856 __HAL_LOCK(hsd); in HAL_SD_UnRegisterCallback()
1858 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1863 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1866 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1869 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1872 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1875 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1878 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1882 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1888 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
1893 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1896 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1900 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1909 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1915 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterCallback()
1947 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
1949 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
1951 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
1953 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
1955 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
1957 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
1959 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
1961 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
1963 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
1965 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
1980 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
1982 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
1984 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
1986 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
1988 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
1990 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
1992 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
1994 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
1996 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
1998 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2000 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2002 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2004 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2008 if(hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2010 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2012 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2014 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2016 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2018 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2020 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2022 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2023 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2024 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2026 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U); in HAL_SD_GetCardCSD()
2027 hsd->SdCard.LogBlockSize = 512U; in HAL_SD_GetCardCSD()
2029 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2032 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2034 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2035 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2036 hsd->SdCard.BlockSize = 512U; in HAL_SD_GetCardCSD()
2037 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2042 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2043 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2044 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2048 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2050 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2052 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2054 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2056 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2058 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2060 pCSD->MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2062 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2066 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2068 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2070 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2072 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2074 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2076 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2078 pCSD->ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2080 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2094 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2100 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2104 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2105 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2106 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2134 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2138 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2139 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2140 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2154 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2156 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2157 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2158 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2159 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2160 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2161 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2162 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2163 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2179 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2189 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2191 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2195 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2199 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2201 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2205 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2207 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2212 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2218 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2221 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2224 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2225 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2231 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2232 Init.ClockBypass = hsd->Init.ClockBypass; in HAL_SD_ConfigWideBusOperation()
2233 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2235 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2236 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2237 (void)SDIO_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2241 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2245 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2246 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2251 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2261 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2267 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2270 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2284 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2287 uint32_t context = hsd->Context; in HAL_SD_Abort()
2290 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_Abort()
2294 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2296 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN); in HAL_SD_Abort()
2301 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_Abort()
2306 if(HAL_DMA_Abort(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort()
2308 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2314 if(HAL_DMA_Abort(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort()
2316 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2325 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2328 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2330 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort()
2333 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2335 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2348 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2351 uint32_t context = hsd->Context; in HAL_SD_Abort_IT()
2354 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_Abort_IT()
2357 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN); in HAL_SD_Abort_IT()
2362 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_Abort_IT()
2367 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_Abort_IT()
2368 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort_IT()
2370 hsd->hdmatx = NULL; in HAL_SD_Abort_IT()
2376 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_Abort_IT()
2377 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort_IT()
2379 hsd->hdmarx = NULL; in HAL_SD_Abort_IT()
2391 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2393 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2394 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2395 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort_IT()
2398 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2400 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2407 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2409 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
2437 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATransmitCplt() local
2440 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DATAEND)); in SD_DMATransmitCplt()
2450 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAReceiveCplt() local
2454 if(hsd->Context == (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA)) in SD_DMAReceiveCplt()
2456 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAReceiveCplt()
2459 hsd->ErrorCode |= errorstate; in SD_DMAReceiveCplt()
2461 hsd->ErrorCallback(hsd); in SD_DMAReceiveCplt()
2463 HAL_SD_ErrorCallback(hsd); in SD_DMAReceiveCplt()
2470 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in SD_DMAReceiveCplt()
2473 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMAReceiveCplt()
2475 hsd->State = HAL_SD_STATE_READY; in SD_DMAReceiveCplt()
2476 hsd->Context = SD_CONTEXT_NONE; in SD_DMAReceiveCplt()
2479 hsd->RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2481 HAL_SD_RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2492 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAError() local
2496 RxErrorCode = hsd->hdmarx->ErrorCode; in SD_DMAError()
2497 TxErrorCode = hsd->hdmatx->ErrorCode; in SD_DMAError()
2501 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in SD_DMAError()
2504 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in SD_DMAError()
2507 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in SD_DMAError()
2508 CardState = HAL_SD_GetCardState(hsd); in SD_DMAError()
2511 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAError()
2514 hsd->State= HAL_SD_STATE_READY; in SD_DMAError()
2515 hsd->Context = SD_CONTEXT_NONE; in SD_DMAError()
2519 hsd->ErrorCallback(hsd); in SD_DMAError()
2521 HAL_SD_ErrorCallback(hsd); in SD_DMAError()
2532 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATxAbort() local
2536 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMATxAbort()
2538 CardState = HAL_SD_GetCardState(hsd); in SD_DMATxAbort()
2539 hsd->State = HAL_SD_STATE_READY; in SD_DMATxAbort()
2540 hsd->Context = SD_CONTEXT_NONE; in SD_DMATxAbort()
2543 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMATxAbort()
2546 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMATxAbort()
2549 hsd->AbortCpltCallback(hsd); in SD_DMATxAbort()
2551 HAL_SD_AbortCallback(hsd); in SD_DMATxAbort()
2557 hsd->ErrorCallback(hsd); in SD_DMATxAbort()
2559 HAL_SD_ErrorCallback(hsd); in SD_DMATxAbort()
2571 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMARxAbort() local
2575 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMARxAbort()
2577 CardState = HAL_SD_GetCardState(hsd); in SD_DMARxAbort()
2578 hsd->State = HAL_SD_STATE_READY; in SD_DMARxAbort()
2579 hsd->Context = SD_CONTEXT_NONE; in SD_DMARxAbort()
2582 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMARxAbort()
2585 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMARxAbort()
2588 hsd->AbortCpltCallback(hsd); in SD_DMARxAbort()
2590 HAL_SD_AbortCallback(hsd); in SD_DMARxAbort()
2596 hsd->ErrorCallback(hsd); in SD_DMARxAbort()
2598 HAL_SD_ErrorCallback(hsd); in SD_DMARxAbort()
2608 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
2615 if(SDIO_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
2621 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2624 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
2632 hsd->CID[0U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_InitCard()
2633 hsd->CID[1U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP2); in SD_InitCard()
2634 hsd->CID[2U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP3); in SD_InitCard()
2635 hsd->CID[3U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP4); in SD_InitCard()
2639 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2643 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
2649 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2652 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
2655 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
2663 hsd->CSD[0U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_InitCard()
2664 hsd->CSD[1U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP2); in SD_InitCard()
2665 hsd->CSD[2U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP3); in SD_InitCard()
2666 hsd->CSD[3U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP4); in SD_InitCard()
2671 hsd->SdCard.Class = (SDIO_GetResponse(hsd->Instance, SDIO_RESP2) >> 20U); in SD_InitCard()
2674 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
2680 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
2687 (void)SDIO_Init(hsd->Instance, hsd->Init); in SD_InitCard()
2700 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
2707 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2714 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
2717 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
2719 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2728 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
2731 if( hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
2734 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2745 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2752 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY … in SD_PowerON()
2759 response = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_PowerON()
2774 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
2778 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
2790 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
2793 (void)SDIO_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
2803 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
2812 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
2818 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
2821 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2826 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
2829 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2840 (void)SDIO_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
2843 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
2846 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2851 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_F… in SD_SendSDStatus()
2853 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF)) in SD_SendSDStatus()
2857 *pData = SDIO_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2868 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in SD_SendSDStatus()
2872 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in SD_SendSDStatus()
2876 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in SD_SendSDStatus()
2885 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL))) in SD_SendSDStatus()
2887 *pData = SDIO_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2897 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_SendSDStatus()
2909 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
2919 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
2926 *pCardStatus = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_SendStatus()
2936 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
2941 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
2947 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
2957 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
2964 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
2983 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
2988 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
2994 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3004 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3011 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3032 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3042 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3049 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3061 (void)SDIO_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3064 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3070 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT)) in SD_FindSCR()
3072 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) in SD_FindSCR()
3074 *(tempscr + index) = SDIO_ReadFIFO(hsd->Instance); in SD_FindSCR()
3077 else if(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXACT)) in SD_FindSCR()
3088 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in SD_FindSCR()
3090 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DTIMEOUT); in SD_FindSCR()
3094 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in SD_FindSCR()
3096 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DCRCFAIL); in SD_FindSCR()
3100 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in SD_FindSCR()
3102 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_RXOVERR); in SD_FindSCR()
3110 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_FindSCR()
3129 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3134 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3135 dataremaining = hsd->RxXferSize; in SD_Read_IT()
3142 data = SDIO_ReadFIFO(hsd->Instance); in SD_Read_IT()
3157 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3158 hsd->RxXferSize = dataremaining; in SD_Read_IT()
3168 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3173 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3174 dataremaining = hsd->TxXferSize; in SD_Write_IT()
3193 (void)SDIO_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3196 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3197 hsd->TxXferSize = dataremaining; in SD_Write_IT()