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
418 status = SDIO_Init(hsd->Instance, Init); in HAL_SD_InitCard()
425 __HAL_SD_DISABLE(hsd); in HAL_SD_InitCard()
428 (void)SDIO_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, SDIO_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_SDIO_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)SDIO_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, SDIO_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()
642 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_F… in HAL_SD_ReadBlocks()
644 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_F… in HAL_SD_ReadBlocks()
647 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
652 data = SDIO_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
671 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
672 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
673 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
674 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
680 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
682 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
685 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
689 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
690 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
691 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
692 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
700 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in HAL_SD_ReadBlocks()
702 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
706 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
707 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
708 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
709 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
712 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
715 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
716 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
717 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
718 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
721 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
724 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
725 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
726 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
727 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
736 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
738 data = SDIO_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
755 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks()
756 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
757 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
758 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
764 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
766 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
772 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
789 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint… in HAL_SD_WriteBlocks() argument
800 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
804 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
806 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
808 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
810 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
814 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
817 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
819 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
831 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
836 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
839 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
843 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
846 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
851 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
852 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
853 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
854 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
861 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_… in HAL_SD_WriteBlocks()
863 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_… in HAL_SD_WriteBlocks()
866 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) && (dataremaining > 0U)) in HAL_SD_WriteBlocks()
883 (void)SDIO_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
890 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
891 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
892 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
893 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
899 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
901 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
904 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
908 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
909 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
910 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
911 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
919 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in HAL_SD_WriteBlocks()
921 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
925 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
926 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
927 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
928 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
931 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
934 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
935 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
936 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
937 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
940 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
943 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks()
944 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
945 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
946 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
955 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
957 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
963 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
981 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, ui… in HAL_SD_ReadBlocks_IT() argument
989 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
993 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
995 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
997 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
999 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
1003 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
1006 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
1008 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
1009 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1012 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND |… in HAL_SD_ReadBlocks_IT()
1014 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND |… in HAL_SD_ReadBlocks_IT()
1017 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1029 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1034 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1037 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1041 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1044 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1049 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1050 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1051 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1052 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1077 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_WriteBlocks_IT() argument
1085 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1089 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1091 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1093 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1095 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1099 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1102 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1104 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1105 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1109 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND … in HAL_SD_WriteBlocks_IT()
1111 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND … in HAL_SD_WriteBlocks_IT()
1114 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1122 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1125 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1129 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1132 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1137 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1138 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1139 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1140 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1151 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1174 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_ReadBlocks_DMA() argument
1182 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1186 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1188 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1190 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1192 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1196 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1199 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1202 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND |… in HAL_SD_ReadBlocks_DMA()
1204 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)); in HAL_SD_ReadBlocks_DMA()
1208 hsd->hdmarx->XferCpltCallback = SD_DMAReceiveCplt; in HAL_SD_ReadBlocks_DMA()
1211 hsd->hdmarx->XferErrorCallback = SD_DMAError; in HAL_SD_ReadBlocks_DMA()
1214 hsd->hdmarx->XferAbortCallback = NULL; in HAL_SD_ReadBlocks_DMA()
1217 hsd->hdmarx->Init.Direction = DMA_PERIPH_TO_MEMORY; in HAL_SD_ReadBlocks_DMA()
1218 MODIFY_REG(hsd->hdmarx->Instance->CR, DMA_SxCR_DIR, hsd->hdmarx->Init.Direction); in HAL_SD_ReadBlocks_DMA()
1221 …if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCK… in HAL_SD_ReadBlocks_DMA()
1223 …__HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)… in HAL_SD_ReadBlocks_DMA()
1224 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1225 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_ReadBlocks_DMA()
1226 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1232 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_ReadBlocks_DMA()
1234 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1246 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1251 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1254 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1258 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1261 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1266 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1267 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1268 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1269 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1295 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, … in HAL_SD_WriteBlocks_DMA() argument
1303 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1307 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1309 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1311 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1313 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1317 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1320 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1324 …__HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR… in HAL_SD_WriteBlocks_DMA()
1326 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1330 hsd->hdmatx->XferCpltCallback = SD_DMATransmitCplt; in HAL_SD_WriteBlocks_DMA()
1333 hsd->hdmatx->XferErrorCallback = SD_DMAError; in HAL_SD_WriteBlocks_DMA()
1336 hsd->hdmatx->XferAbortCallback = NULL; in HAL_SD_WriteBlocks_DMA()
1338 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1346 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1349 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1353 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1356 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1361 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1362 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1363 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1364 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1369 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_WriteBlocks_DMA()
1372 hsd->hdmatx->Init.Direction = DMA_MEMORY_TO_PERIPH; in HAL_SD_WriteBlocks_DMA()
1373 MODIFY_REG(hsd->hdmatx->Instance->CR, DMA_SxCR_DIR, hsd->hdmatx->Init.Direction); in HAL_SD_WriteBlocks_DMA()
1376 …if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCK… in HAL_SD_WriteBlocks_DMA()
1379 …__HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITER… in HAL_SD_WriteBlocks_DMA()
1381 __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1383 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1384 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_WriteBlocks_DMA()
1385 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1386 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1398 (void)SDIO_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1418 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1424 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1426 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1430 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1434 if(end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1436 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1440 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1443 if(((hsd->SdCard.Class) & SDIO_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1446 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1447 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1448 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1452 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1455 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1456 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1457 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1462 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1469 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1472 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1476 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1477 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1478 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1483 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1487 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1488 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1489 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1495 errorstate = SDMMC_CmdErase(hsd->Instance); in HAL_SD_Erase()
1499 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_Erase()
1500 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1501 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1505 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1520 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1523 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1526 if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1528 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1531 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1533 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DATAEND); in HAL_SD_IRQHandler()
1536 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1540 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1545 hsd->Instance->DCTRL &= ~(SDIO_DCTRL_DTEN); in HAL_SD_IRQHandler()
1551 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1554 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1556 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1558 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1564 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1566 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1567 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1571 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1573 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1579 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1581 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1589 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1592 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1594 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1596 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1604 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_IRQHandler()
1606 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1609 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1611 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1621 …else if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1623 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1627 …else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_… in HAL_SD_IRQHandler()
1629 …else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_… in HAL_SD_IRQHandler()
1633 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1635 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1637 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1639 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1641 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1643 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1645 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1647 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1650 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR) != RESET) in HAL_SD_IRQHandler()
1652 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1658 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS | SDIO_FLAG_STBITERR); in HAL_SD_IRQHandler()
1661 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1665 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1668 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1672 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1677 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1678 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1680 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1682 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1691 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_IRQHandler()
1693 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_IRQHandler()
1695 SD_DMATxAbort(hsd->hdmatx); in HAL_SD_IRQHandler()
1701 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_IRQHandler()
1703 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_IRQHandler()
1705 SD_DMARxAbort(hsd->hdmarx); in HAL_SD_IRQHandler()
1710 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_IRQHandler()
1711 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1712 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1714 hsd->AbortCpltCallback(hsd); in HAL_SD_IRQHandler()
1716 HAL_SD_AbortCallback(hsd); in HAL_SD_IRQHandler()
1736 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
1738 return hsd->State; in HAL_SD_GetState()
1747 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
1749 return hsd->ErrorCode; in HAL_SD_GetError()
1757 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
1760 UNUSED(hsd); in HAL_SD_TxCpltCallback()
1772 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
1775 UNUSED(hsd); in HAL_SD_RxCpltCallback()
1787 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
1790 UNUSED(hsd); in HAL_SD_ErrorCallback()
1802 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
1805 UNUSED(hsd); in HAL_SD_AbortCallback()
1828 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
1835 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1840 __HAL_LOCK(hsd); in HAL_SD_RegisterCallback()
1842 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
1847 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1850 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1853 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
1856 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
1859 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1862 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1866 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1872 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
1877 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
1880 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
1884 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1893 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
1899 __HAL_UNLOCK(hsd); in HAL_SD_RegisterCallback()
1917 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
1922 __HAL_LOCK(hsd); in HAL_SD_UnRegisterCallback()
1924 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
1929 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
1932 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
1935 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
1938 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
1941 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1944 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1948 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1954 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
1959 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
1962 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
1966 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1975 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
1981 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterCallback()
2013 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
2015 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2017 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2019 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2021 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2023 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2025 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2027 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2029 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2031 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2046 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
2048 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2050 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2052 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2054 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2056 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2058 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2060 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2062 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2064 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2066 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2068 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2070 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2074 if(hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2076 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2078 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2080 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2082 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2084 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2086 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2088 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2089 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2090 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2092 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U); in HAL_SD_GetCardCSD()
2093 hsd->SdCard.LogBlockSize = 512U; in HAL_SD_GetCardCSD()
2095 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2098 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2100 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2101 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2102 hsd->SdCard.BlockSize = 512U; in HAL_SD_GetCardCSD()
2103 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2108 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2109 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2110 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2114 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2116 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2118 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2120 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2122 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2124 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2126 pCSD->MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2128 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2132 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2134 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2136 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2138 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2140 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2142 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2144 pCSD->ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2146 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2160 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2166 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2170 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2171 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2172 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2200 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2204 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2205 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2206 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2220 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2222 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2223 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2224 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2225 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2226 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2227 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2228 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2229 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2245 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2255 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2257 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2261 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2265 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2267 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2271 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2273 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2278 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2284 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2287 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2290 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2291 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2297 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2298 Init.ClockBypass = hsd->Init.ClockBypass; in HAL_SD_ConfigWideBusOperation()
2299 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2301 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2302 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2303 (void)SDIO_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2307 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2311 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2312 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2317 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2327 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
2333 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
2336 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
2350 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
2353 uint32_t context = hsd->Context; in HAL_SD_Abort()
2356 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_Abort()
2360 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_Abort()
2362 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN); in HAL_SD_Abort()
2367 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_Abort()
2372 if(HAL_DMA_Abort(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort()
2374 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2380 if(HAL_DMA_Abort(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort()
2382 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
2391 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
2394 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
2396 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort()
2399 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
2401 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort()
2414 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
2417 uint32_t context = hsd->Context; in HAL_SD_Abort_IT()
2420 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in HAL_SD_Abort_IT()
2423 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN); in HAL_SD_Abort_IT()
2428 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in HAL_SD_Abort_IT()
2433 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_Abort_IT()
2434 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort_IT()
2436 hsd->hdmatx = NULL; in HAL_SD_Abort_IT()
2442 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_Abort_IT()
2443 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort_IT()
2445 hsd->hdmarx = NULL; in HAL_SD_Abort_IT()
2457 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
2459 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
2460 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
2461 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort_IT()
2464 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
2466 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
2473 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
2475 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
2503 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATransmitCplt() local
2506 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DATAEND)); in SD_DMATransmitCplt()
2516 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAReceiveCplt() local
2520 if(hsd->Context == (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA)) in SD_DMAReceiveCplt()
2522 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAReceiveCplt()
2525 hsd->ErrorCode |= errorstate; in SD_DMAReceiveCplt()
2527 hsd->ErrorCallback(hsd); in SD_DMAReceiveCplt()
2529 HAL_SD_ErrorCallback(hsd); in SD_DMAReceiveCplt()
2536 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN); in SD_DMAReceiveCplt()
2539 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMAReceiveCplt()
2541 hsd->State = HAL_SD_STATE_READY; in SD_DMAReceiveCplt()
2542 hsd->Context = SD_CONTEXT_NONE; in SD_DMAReceiveCplt()
2545 hsd->RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2547 HAL_SD_RxCpltCallback(hsd); in SD_DMAReceiveCplt()
2558 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAError() local
2565 RxErrorCode = hsd->hdmarx->ErrorCode; in SD_DMAError()
2566 TxErrorCode = hsd->hdmatx->ErrorCode; in SD_DMAError()
2570 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); in SD_DMAError()
2573 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\ in SD_DMAError()
2576 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in SD_DMAError()
2577 CardState = HAL_SD_GetCardState(hsd); in SD_DMAError()
2580 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAError()
2583 hsd->State= HAL_SD_STATE_READY; in SD_DMAError()
2584 hsd->Context = SD_CONTEXT_NONE; in SD_DMAError()
2588 hsd->ErrorCallback(hsd); in SD_DMAError()
2590 HAL_SD_ErrorCallback(hsd); in SD_DMAError()
2602 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATxAbort() local
2606 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMATxAbort()
2608 CardState = HAL_SD_GetCardState(hsd); in SD_DMATxAbort()
2609 hsd->State = HAL_SD_STATE_READY; in SD_DMATxAbort()
2610 hsd->Context = SD_CONTEXT_NONE; in SD_DMATxAbort()
2613 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMATxAbort()
2616 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMATxAbort()
2619 hsd->AbortCpltCallback(hsd); in SD_DMATxAbort()
2621 HAL_SD_AbortCallback(hsd); in SD_DMATxAbort()
2627 hsd->ErrorCallback(hsd); in SD_DMATxAbort()
2629 HAL_SD_ErrorCallback(hsd); in SD_DMATxAbort()
2641 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMARxAbort() local
2645 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_DMARxAbort()
2647 CardState = HAL_SD_GetCardState(hsd); in SD_DMARxAbort()
2648 hsd->State = HAL_SD_STATE_READY; in SD_DMARxAbort()
2649 hsd->Context = SD_CONTEXT_NONE; in SD_DMARxAbort()
2652 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMARxAbort()
2655 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMARxAbort()
2658 hsd->AbortCpltCallback(hsd); in SD_DMARxAbort()
2660 HAL_SD_AbortCallback(hsd); in SD_DMARxAbort()
2666 hsd->ErrorCallback(hsd); in SD_DMARxAbort()
2668 HAL_SD_ErrorCallback(hsd); in SD_DMARxAbort()
2678 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
2685 if(SDIO_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
2691 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2694 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
2702 hsd->CID[0U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_InitCard()
2703 hsd->CID[1U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP2); in SD_InitCard()
2704 hsd->CID[2U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP3); in SD_InitCard()
2705 hsd->CID[3U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP4); in SD_InitCard()
2709 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2713 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
2719 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
2722 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
2725 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
2733 hsd->CSD[0U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_InitCard()
2734 hsd->CSD[1U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP2); in SD_InitCard()
2735 hsd->CSD[2U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP3); in SD_InitCard()
2736 hsd->CSD[3U] = SDIO_GetResponse(hsd->Instance, SDIO_RESP4); in SD_InitCard()
2741 hsd->SdCard.Class = (SDIO_GetResponse(hsd->Instance, SDIO_RESP2) >> 20U); in SD_InitCard()
2744 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
2750 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
2757 (void)SDIO_Init(hsd->Instance, hsd->Init); in SD_InitCard()
2770 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
2777 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2784 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
2787 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
2789 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
2798 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
2801 if( hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
2804 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2815 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
2822 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY … in SD_PowerON()
2829 response = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_PowerON()
2844 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
2848 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
2860 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
2863 (void)SDIO_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
2873 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
2882 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
2888 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
2891 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2896 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
2899 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2910 (void)SDIO_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
2913 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
2916 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
2921 …while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_F… in SD_SendSDStatus()
2923 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF)) in SD_SendSDStatus()
2927 *pData = SDIO_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2939 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in SD_SendSDStatus()
2941 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT)) in SD_SendSDStatus()
2946 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in SD_SendSDStatus()
2950 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in SD_SendSDStatus()
2959 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL))) in SD_SendSDStatus()
2961 *pData = SDIO_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
2971 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_SendSDStatus()
2983 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
2993 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
3000 *pCardStatus = SDIO_GetResponse(hsd->Instance, SDIO_RESP1); in SD_SendStatus()
3010 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
3015 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
3021 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
3031 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
3038 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
3057 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
3062 if((SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3068 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3078 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3085 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3106 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3116 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3123 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3135 (void)SDIO_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3138 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3144 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT)) in SD_FindSCR()
3146 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) in SD_FindSCR()
3148 *(tempscr + index) = SDIO_ReadFIFO(hsd->Instance); in SD_FindSCR()
3151 else if(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXACT)) in SD_FindSCR()
3163 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR))) in SD_FindSCR()
3165 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT)) in SD_FindSCR()
3168 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DTIMEOUT); in SD_FindSCR()
3172 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL)) in SD_FindSCR()
3174 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DCRCFAIL); in SD_FindSCR()
3178 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR)) in SD_FindSCR()
3180 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_RXOVERR); in SD_FindSCR()
3188 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS); in SD_FindSCR()
3207 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
3212 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
3213 dataremaining = hsd->RxXferSize; in SD_Read_IT()
3220 data = SDIO_ReadFIFO(hsd->Instance); in SD_Read_IT()
3235 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
3236 hsd->RxXferSize = dataremaining; in SD_Read_IT()
3246 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
3251 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
3252 dataremaining = hsd->TxXferSize; in SD_Write_IT()
3271 (void)SDIO_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
3274 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
3275 hsd->TxXferSize = dataremaining; in SD_Write_IT()