Lines Matching refs:hsd

306 static uint32_t SD_InitCard       (SD_HandleTypeDef *hsd);
307 static uint32_t SD_PowerON (SD_HandleTypeDef *hsd);
308 static uint32_t SD_SendSDStatus (SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
309 static uint32_t SD_SendStatus (SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
310 static uint32_t SD_WideBus_Enable (SD_HandleTypeDef *hsd);
311 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd);
312 static uint32_t SD_FindSCR (SD_HandleTypeDef *hsd, uint32_t *pSCR);
313 static void SD_PowerOFF (SD_HandleTypeDef *hsd);
314 static void SD_Write_IT (SD_HandleTypeDef *hsd);
315 static void SD_Read_IT (SD_HandleTypeDef *hsd);
323 static uint32_t SD_UltraHighSpeed (SD_HandleTypeDef *hsd);
324 static uint32_t SD_DDR_Mode (SD_HandleTypeDef *hsd);
356 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd) in HAL_SD_Init() argument
365 if(hsd == NULL) in HAL_SD_Init()
371 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_Init()
372 assert_param(IS_SDMMC_CLOCK_EDGE(hsd->Init.ClockEdge)); in HAL_SD_Init()
374 assert_param(IS_SDMMC_CLOCK_BYPASS(hsd->Init.ClockBypass)); in HAL_SD_Init()
376 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave)); in HAL_SD_Init()
377 assert_param(IS_SDMMC_BUS_WIDE(hsd->Init.BusWide)); in HAL_SD_Init()
378 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl)); in HAL_SD_Init()
379 assert_param(IS_SDMMC_CLKDIV(hsd->Init.ClockDiv)); in HAL_SD_Init()
381 if(hsd->State == HAL_SD_STATE_RESET) in HAL_SD_Init()
384 hsd->Lock = HAL_UNLOCKED; in HAL_SD_Init()
387 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_Init()
388 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_Init()
389 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_Init()
390 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_Init()
392 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuffer0CpltCallback; in HAL_SD_Init()
393 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuffer1CpltCallback; in HAL_SD_Init()
394 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuffer0CpltCallback; in HAL_SD_Init()
395 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuffer1CpltCallback; in HAL_SD_Init()
396 hsd->DriveTransceiver_1_8V_Callback = HAL_SDEx_DriveTransceiver_1_8V_Callback; in HAL_SD_Init()
399 if(hsd->MspInitCallback == NULL) in HAL_SD_Init()
401 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_Init()
405 hsd->MspInitCallback(hsd); in HAL_SD_Init()
408 HAL_SD_MspInit(hsd); in HAL_SD_Init()
412 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Init()
415 if (HAL_SD_InitCard(hsd) != HAL_OK) in HAL_SD_Init()
421 if( HAL_SD_GetCardStatus(hsd, &CardStatus) != HAL_OK) in HAL_SD_Init()
428 if ((hsd->SdCard.CardType == CARD_SDHC_SDXC) && ((speedgrade != 0U) || (unitsize != 0U))) in HAL_SD_Init()
430 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in HAL_SD_Init()
434 if (hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_Init()
436 hsd->SdCard.CardSpeed = CARD_HIGH_SPEED; in HAL_SD_Init()
440 hsd->SdCard.CardSpeed = CARD_NORMAL_SPEED; in HAL_SD_Init()
445 if(HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) in HAL_SD_Init()
452 while((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_Init()
456 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_Init()
457 hsd->State= HAL_SD_STATE_READY; in HAL_SD_Init()
458 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
465 if(HAL_SD_ConfigWideBusOperation(hsd, hsd->Init.BusWide) != HAL_OK) in HAL_SD_Init()
471 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Init()
474 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Init()
477 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Init()
489 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd) in HAL_SD_InitCard() argument
508 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
509 hsd->ErrorCode = SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_InitCard()
519 Init.Transceiver = hsd->Init.Transceiver; in HAL_SD_InitCard()
520 if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) in HAL_SD_InitCard()
523 hsd->Instance->POWER |= SDMMC_POWER_DIRPOL; in HAL_SD_InitCard()
528 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_InitCard()
532 __HAL_SD_DISABLE(hsd); in HAL_SD_InitCard()
536 (void)SDMMC_PowerState_ON(hsd->Instance); in HAL_SD_InitCard()
540 __HAL_SD_ENABLE(hsd); in HAL_SD_InitCard()
553 errorstate = SD_PowerON(hsd); in HAL_SD_InitCard()
556 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
557 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
562 errorstate = SD_InitCard(hsd); in HAL_SD_InitCard()
565 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
566 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
571 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_InitCard()
575 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_InitCard()
576 hsd->ErrorCode |= errorstate; in HAL_SD_InitCard()
577 hsd->State = HAL_SD_STATE_READY; in HAL_SD_InitCard()
589 HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd) in HAL_SD_DeInit() argument
592 if(hsd == NULL) in HAL_SD_DeInit()
598 assert_param(IS_SDMMC_ALL_INSTANCE(hsd->Instance)); in HAL_SD_DeInit()
600 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_DeInit()
604 if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) in HAL_SD_DeInit()
607 if(hsd->DriveTransceiver_1_8V_Callback == NULL) in HAL_SD_DeInit()
609 hsd->DriveTransceiver_1_8V_Callback = HAL_SDEx_DriveTransceiver_1_8V_Callback; in HAL_SD_DeInit()
611 hsd->DriveTransceiver_1_8V_Callback(RESET); in HAL_SD_DeInit()
619 SD_PowerOFF(hsd); in HAL_SD_DeInit()
622 if(hsd->MspDeInitCallback == NULL) in HAL_SD_DeInit()
624 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_DeInit()
628 hsd->MspDeInitCallback(hsd); in HAL_SD_DeInit()
631 HAL_SD_MspDeInit(hsd); in HAL_SD_DeInit()
634 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_DeInit()
635 hsd->State = HAL_SD_STATE_RESET; in HAL_SD_DeInit()
646 __weak void HAL_SD_MspInit(SD_HandleTypeDef *hsd) in HAL_SD_MspInit() argument
649 UNUSED(hsd); in HAL_SD_MspInit()
661 __weak void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) in HAL_SD_MspDeInit() argument
664 UNUSED(hsd); in HAL_SD_MspDeInit()
702 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint3… in HAL_SD_ReadBlocks() argument
713 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks()
717 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks()
719 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks()
721 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks()
723 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks()
727 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks()
730 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks()
732 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks()
748 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks()
750 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks()
756 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_SD_ReadBlocks()
759 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
763 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK; in HAL_SD_ReadBlocks()
766 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks()
771 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
772 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
773 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
774 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
780 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in HAL_SD_ReadBlocks()
782 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
787 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
806 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
807 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
808 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
809 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
814 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_ReadBlocks()
818 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_ReadBlocks()
820 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ReadBlocks()
823 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_ReadBlocks()
827 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
828 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks()
829 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
830 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
837 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_ReadBlocks()
840 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
841 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_ReadBlocks()
842 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
843 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
846 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_ReadBlocks()
849 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
850 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_ReadBlocks()
851 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
852 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
855 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in HAL_SD_ReadBlocks()
858 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
859 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_ReadBlocks()
860 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
861 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
871 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) && (dataremaining > 0U)) in HAL_SD_ReadBlocks()
873 data = SDMMC_ReadFIFO(hsd->Instance); in HAL_SD_ReadBlocks()
890 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks()
891 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; in HAL_SD_ReadBlocks()
892 hsd->State= HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
893 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks()
900 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_ReadBlocks()
902 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks()
908 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_ReadBlocks()
925 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint… in HAL_SD_WriteBlocks() argument
936 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks()
940 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks()
942 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks()
944 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks()
946 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks()
950 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks()
953 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks()
955 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks()
971 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks()
973 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks()
979 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_SD_WriteBlocks()
982 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
986 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_SD_WriteBlocks()
989 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks()
994 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
995 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
996 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
997 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1003 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SD… in HAL_SD_WriteBlocks()
1005 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) && (dataremaining > 0U)) in HAL_SD_WriteBlocks()
1022 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in HAL_SD_WriteBlocks()
1029 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1030 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
1031 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1032 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1037 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_WriteBlocks()
1041 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_SD_WriteBlocks()
1043 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_WriteBlocks()
1046 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_WriteBlocks()
1050 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1051 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks()
1052 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1053 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1060 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in HAL_SD_WriteBlocks()
1063 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1064 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_WriteBlocks()
1065 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1066 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1069 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in HAL_SD_WriteBlocks()
1072 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1073 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_WriteBlocks()
1074 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1075 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1078 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR)) in HAL_SD_WriteBlocks()
1081 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks()
1082 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_WriteBlocks()
1083 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1084 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks()
1093 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_WriteBlocks()
1095 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks()
1101 hsd->ErrorCode |= HAL_SD_ERROR_BUSY; in HAL_SD_WriteBlocks()
1119 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, ui… in HAL_SD_ReadBlocks_IT() argument
1127 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_IT()
1131 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_IT()
1133 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_IT()
1135 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_IT()
1137 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_IT()
1141 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_IT()
1144 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_IT()
1146 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_IT()
1147 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_IT()
1149 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_IT()
1165 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_IT()
1167 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks_IT()
1173 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1176 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1180 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_ReadBlocks_IT()
1183 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_IT()
1188 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_IT()
1189 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_IT()
1190 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_IT()
1191 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_IT()
1195 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_IT()
1218 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_WriteBlocks_IT() argument
1226 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_IT()
1230 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_IT()
1232 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_IT()
1234 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_IT()
1236 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_IT()
1240 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_IT()
1243 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_IT()
1245 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_IT()
1246 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_IT()
1248 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_IT()
1261 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1263 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks_IT()
1269 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1272 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1276 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT); in HAL_SD_WriteBlocks_IT()
1279 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_IT()
1284 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_IT()
1285 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_IT()
1286 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_IT()
1287 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_IT()
1299 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_IT()
1303 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_IT()
1326 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, u… in HAL_SD_ReadBlocks_DMA() argument
1334 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ReadBlocks_DMA()
1338 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_ReadBlocks_DMA()
1340 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_ReadBlocks_DMA()
1342 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_ReadBlocks_DMA()
1344 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_ReadBlocks_DMA()
1348 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ReadBlocks_DMA()
1351 hsd->Instance->DCTRL = 0U; in HAL_SD_ReadBlocks_DMA()
1355 hsd->hdmarx->XferCpltCallback = SD_DMAReceiveCplt; in HAL_SD_ReadBlocks_DMA()
1358 hsd->hdmarx->XferErrorCallback = SD_DMAError; in HAL_SD_ReadBlocks_DMA()
1361 hsd->hdmarx->XferAbortCallback = NULL; in HAL_SD_ReadBlocks_DMA()
1364 …if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCK… in HAL_SD_ReadBlocks_DMA()
1366 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1367 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_ReadBlocks_DMA()
1368 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1374 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_ReadBlocks_DMA()
1376 hsd->pRxBuffPtr = pData; in HAL_SD_ReadBlocks_DMA()
1377 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_ReadBlocks_DMA()
1380 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_ReadBlocks_DMA()
1396 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_ReadBlocks_DMA()
1400 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_ReadBlocks_DMA()
1401 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_ReadBlocks_DMA()
1402 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_ReadBlocks_DMA()
1408 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1411 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1415 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_ReadBlocks_DMA()
1418 errorstate = SDMMC_CmdReadSingleBlock(hsd->Instance, add); in HAL_SD_ReadBlocks_DMA()
1423 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ReadBlocks_DMA()
1424 hsd->ErrorCode |= errorstate; in HAL_SD_ReadBlocks_DMA()
1425 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ReadBlocks_DMA()
1426 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_ReadBlocks_DMA()
1431 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAE… in HAL_SD_ReadBlocks_DMA()
1457 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, … in HAL_SD_WriteBlocks_DMA() argument
1465 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_WriteBlocks_DMA()
1469 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_WriteBlocks_DMA()
1471 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_WriteBlocks_DMA()
1473 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr)) in HAL_SD_WriteBlocks_DMA()
1475 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_WriteBlocks_DMA()
1479 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_WriteBlocks_DMA()
1482 hsd->Instance->DCTRL = 0U; in HAL_SD_WriteBlocks_DMA()
1485 hsd->pTxBuffPtr = pData; in HAL_SD_WriteBlocks_DMA()
1486 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks; in HAL_SD_WriteBlocks_DMA()
1489 hsd->hdmatx->XferCpltCallback = SD_DMATransmitCplt; in HAL_SD_WriteBlocks_DMA()
1492 hsd->hdmatx->XferErrorCallback = SD_DMAError; in HAL_SD_WriteBlocks_DMA()
1495 hsd->hdmatx->XferAbortCallback = NULL; in HAL_SD_WriteBlocks_DMA()
1498 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_WriteBlocks_DMA()
1511 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1513 __SDMMC_CMDTRANS_ENABLE( hsd->Instance); in HAL_SD_WriteBlocks_DMA()
1515 hsd->Instance->IDMABASE0 = (uint32_t) pData ; in HAL_SD_WriteBlocks_DMA()
1516 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_SD_WriteBlocks_DMA()
1522 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1525 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1529 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA); in HAL_SD_WriteBlocks_DMA()
1532 errorstate = SDMMC_CmdWriteSingleBlock(hsd->Instance, add); in HAL_SD_WriteBlocks_DMA()
1537 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1538 hsd->ErrorCode |= errorstate; in HAL_SD_WriteBlocks_DMA()
1539 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1540 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1546 __HAL_SD_DMA_ENABLE(hsd); in HAL_SD_WriteBlocks_DMA()
1549 …if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCK… in HAL_SD_WriteBlocks_DMA()
1551 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_WriteBlocks_DMA()
1552 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_WriteBlocks_DMA()
1553 hsd->State = HAL_SD_STATE_READY; in HAL_SD_WriteBlocks_DMA()
1554 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_WriteBlocks_DMA()
1566 (void)SDMMC_ConfigData(hsd->Instance, &config); in HAL_SD_WriteBlocks_DMA()
1569 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR)); in HAL_SD_WriteBlocks_DMA()
1572 …__HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATA… in HAL_SD_WriteBlocks_DMA()
1595 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd) in HAL_SD_Erase() argument
1601 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_Erase()
1603 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_Erase()
1607 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_Erase()
1611 if(end_add > (hsd->SdCard.LogBlockNbr)) in HAL_SD_Erase()
1613 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE; in HAL_SD_Erase()
1617 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_Erase()
1620 if(((hsd->SdCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_SD_Erase()
1623 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1624 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE; in HAL_SD_Erase()
1625 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1629 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_SD_Erase()
1632 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1633 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED; in HAL_SD_Erase()
1634 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1639 if(hsd->SdCard.CardType != CARD_SDHC_SDXC) in HAL_SD_Erase()
1646 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_Erase()
1649 errorstate = SDMMC_CmdSDEraseStartAdd(hsd->Instance, start_add); in HAL_SD_Erase()
1653 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1654 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1655 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1660 errorstate = SDMMC_CmdSDEraseEndAdd(hsd->Instance, end_add); in HAL_SD_Erase()
1664 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1665 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1666 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1672 errorstate = SDMMC_CmdErase(hsd->Instance, 0UL); in HAL_SD_Erase()
1676 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_Erase()
1677 hsd->ErrorCode |= errorstate; in HAL_SD_Erase()
1678 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1682 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Erase()
1697 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd) in HAL_SD_IRQHandler() argument
1700 uint32_t context = hsd->Context; in HAL_SD_IRQHandler()
1703 if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U)) in HAL_SD_IRQHandler()
1705 SD_Read_IT(hsd); in HAL_SD_IRQHandler()
1708 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET) in HAL_SD_IRQHandler()
1710 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND); in HAL_SD_IRQHandler()
1712 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT |\ in HAL_SD_IRQHandler()
1717 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1718 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_IRQHandler()
1720 hsd->Instance->DCTRL &= ~(SDMMC_DCTRL_DTEN); in HAL_SD_IRQHandler()
1727 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1730 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1732 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1734 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1740 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1742 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1743 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1747 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1749 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1755 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1757 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1764 hsd->Instance->DLEN = 0; in HAL_SD_IRQHandler()
1765 hsd->Instance->DCTRL = 0; in HAL_SD_IRQHandler()
1766 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1771 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1774 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1776 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1778 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1783 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1784 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1788 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1790 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1796 hsd->RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1798 HAL_SD_RxCpltCallback(hsd); in HAL_SD_IRQHandler()
1804 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1807 hsd->ErrorCode |= errorstate; in HAL_SD_IRQHandler()
1809 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1811 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1819 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_IRQHandler()
1821 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1824 hsd->TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1826 HAL_SD_TxCpltCallback(hsd); in HAL_SD_IRQHandler()
1837 …else if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U… in HAL_SD_IRQHandler()
1839 SD_Write_IT(hsd); in HAL_SD_IRQHandler()
1842 …else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | SD… in HAL_SD_IRQHandler()
1845 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET) in HAL_SD_IRQHandler()
1847 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL; in HAL_SD_IRQHandler()
1849 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET) in HAL_SD_IRQHandler()
1851 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT; in HAL_SD_IRQHandler()
1853 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET) in HAL_SD_IRQHandler()
1855 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN; in HAL_SD_IRQHandler()
1857 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET) in HAL_SD_IRQHandler()
1859 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN; in HAL_SD_IRQHandler()
1863 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_IRQHandler()
1866 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_IRQHandler()
1870 __SDMMC_CMDTRANS_DISABLE( hsd->Instance); in HAL_SD_IRQHandler()
1871 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_SD_IRQHandler()
1872 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_SD_IRQHandler()
1874 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_IRQHandler()
1876 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_SD_IRQHandler()
1877 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT); in HAL_SD_IRQHandler()
1883 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1884 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1886 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1888 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1894 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_IRQHandler()
1897 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC); in HAL_SD_IRQHandler()
1898 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_IRQHandler()
1901 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1903 hsd->ErrorCallback(hsd); in HAL_SD_IRQHandler()
1905 HAL_SD_ErrorCallback(hsd); in HAL_SD_IRQHandler()
1913 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_IRQHandler()
1915 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_IRQHandler()
1917 SD_DMATxAbort(hsd->hdmatx); in HAL_SD_IRQHandler()
1923 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_IRQHandler()
1925 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_IRQHandler()
1927 SD_DMARxAbort(hsd->hdmarx); in HAL_SD_IRQHandler()
1932 hsd->ErrorCode = HAL_SD_ERROR_NONE; in HAL_SD_IRQHandler()
1933 hsd->State = HAL_SD_STATE_READY; in HAL_SD_IRQHandler()
1934 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_IRQHandler()
1936 hsd->AbortCpltCallback(hsd); in HAL_SD_IRQHandler()
1938 HAL_SD_AbortCallback(hsd); in HAL_SD_IRQHandler()
1950 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_IDMABTC) != RESET) in HAL_SD_IRQHandler()
1952 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC); in HAL_SD_IRQHandler()
1953 if(READ_BIT(hsd->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == 0U) in HAL_SD_IRQHandler()
1959 hsd->Write_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1961 HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(hsd); in HAL_SD_IRQHandler()
1967 hsd->Read_DMADblBuf1CpltCallback(hsd); in HAL_SD_IRQHandler()
1969 HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(hsd); in HAL_SD_IRQHandler()
1979 hsd->Write_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1981 HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(hsd); in HAL_SD_IRQHandler()
1987 hsd->Read_DMADblBuf0CpltCallback(hsd); in HAL_SD_IRQHandler()
1989 HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(hsd); in HAL_SD_IRQHandler()
2006 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd) in HAL_SD_GetState() argument
2008 return hsd->State; in HAL_SD_GetState()
2017 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd) in HAL_SD_GetError() argument
2019 return hsd->ErrorCode; in HAL_SD_GetError()
2027 __weak void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_TxCpltCallback() argument
2030 UNUSED(hsd); in HAL_SD_TxCpltCallback()
2042 __weak void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd) in HAL_SD_RxCpltCallback() argument
2045 UNUSED(hsd); in HAL_SD_RxCpltCallback()
2057 __weak void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd) in HAL_SD_ErrorCallback() argument
2060 UNUSED(hsd); in HAL_SD_ErrorCallback()
2072 __weak void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd) in HAL_SD_AbortCallback() argument
2075 UNUSED(hsd); in HAL_SD_AbortCallback()
2102 HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackI… in HAL_SD_RegisterCallback() argument
2109 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
2114 __HAL_LOCK(hsd); in HAL_SD_RegisterCallback()
2116 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterCallback()
2121 hsd->TxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
2124 hsd->RxCpltCallback = pCallback; in HAL_SD_RegisterCallback()
2127 hsd->ErrorCallback = pCallback; in HAL_SD_RegisterCallback()
2130 hsd->AbortCpltCallback = pCallback; in HAL_SD_RegisterCallback()
2134 hsd->Read_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
2137 hsd->Read_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
2140 hsd->Write_DMADblBuf0CpltCallback = pCallback; in HAL_SD_RegisterCallback()
2143 hsd->Write_DMADblBuf1CpltCallback = pCallback; in HAL_SD_RegisterCallback()
2147 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
2150 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
2154 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
2160 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_RegisterCallback()
2165 hsd->MspInitCallback = pCallback; in HAL_SD_RegisterCallback()
2168 hsd->MspDeInitCallback = pCallback; in HAL_SD_RegisterCallback()
2172 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
2181 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterCallback()
2187 __HAL_UNLOCK(hsd); in HAL_SD_RegisterCallback()
2209 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef Callbac… in HAL_SD_UnRegisterCallback() argument
2214 __HAL_LOCK(hsd); in HAL_SD_UnRegisterCallback()
2216 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterCallback()
2221 hsd->TxCpltCallback = HAL_SD_TxCpltCallback; in HAL_SD_UnRegisterCallback()
2224 hsd->RxCpltCallback = HAL_SD_RxCpltCallback; in HAL_SD_UnRegisterCallback()
2227 hsd->ErrorCallback = HAL_SD_ErrorCallback; in HAL_SD_UnRegisterCallback()
2230 hsd->AbortCpltCallback = HAL_SD_AbortCallback; in HAL_SD_UnRegisterCallback()
2234 hsd->Read_DMADblBuf0CpltCallback = HAL_SDEx_Read_DMADoubleBuffer0CpltCallback; in HAL_SD_UnRegisterCallback()
2237 hsd->Read_DMADblBuf1CpltCallback = HAL_SDEx_Read_DMADoubleBuffer1CpltCallback; in HAL_SD_UnRegisterCallback()
2240 hsd->Write_DMADblBuf0CpltCallback = HAL_SDEx_Write_DMADoubleBuffer0CpltCallback; in HAL_SD_UnRegisterCallback()
2243 hsd->Write_DMADblBuf1CpltCallback = HAL_SDEx_Write_DMADoubleBuffer1CpltCallback; in HAL_SD_UnRegisterCallback()
2247 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
2250 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2254 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2260 else if (hsd->State == HAL_SD_STATE_RESET) in HAL_SD_UnRegisterCallback()
2265 hsd->MspInitCallback = HAL_SD_MspInit; in HAL_SD_UnRegisterCallback()
2268 hsd->MspDeInitCallback = HAL_SD_MspDeInit; in HAL_SD_UnRegisterCallback()
2272 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2281 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterCallback()
2287 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterCallback()
2299 HAL_StatusTypeDef HAL_SD_RegisterTransceiverCallback(SD_HandleTypeDef *hsd, pSD_TransceiverCallback… in HAL_SD_RegisterTransceiverCallback() argument
2306 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2311 __HAL_LOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2313 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_RegisterTransceiverCallback()
2315 hsd->DriveTransceiver_1_8V_Callback = pCallback; in HAL_SD_RegisterTransceiverCallback()
2320 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_RegisterTransceiverCallback()
2326 __HAL_UNLOCK(hsd); in HAL_SD_RegisterTransceiverCallback()
2336 HAL_StatusTypeDef HAL_SD_UnRegisterTransceiverCallback(SD_HandleTypeDef *hsd) in HAL_SD_UnRegisterTransceiverCallback() argument
2341 __HAL_LOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2343 if(hsd->State == HAL_SD_STATE_READY) in HAL_SD_UnRegisterTransceiverCallback()
2345 hsd->DriveTransceiver_1_8V_Callback = HAL_SDEx_DriveTransceiver_1_8V_Callback; in HAL_SD_UnRegisterTransceiverCallback()
2350 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK; in HAL_SD_UnRegisterTransceiverCallback()
2356 __HAL_UNLOCK(hsd); in HAL_SD_UnRegisterTransceiverCallback()
2389 HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID) in HAL_SD_GetCardCID() argument
2391 pCID->ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2393 pCID->OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U); in HAL_SD_GetCardCID()
2395 pCID->ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_SD_GetCardCID()
2397 pCID->ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU); in HAL_SD_GetCardCID()
2399 pCID->ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U); in HAL_SD_GetCardCID()
2401 pCID->ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U)); in HAL_SD_GetCardCID()
2403 pCID->Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U); in HAL_SD_GetCardCID()
2405 pCID->ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U); in HAL_SD_GetCardCID()
2407 pCID->CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCID()
2422 HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD) in HAL_SD_GetCardCSD() argument
2424 pCSD->CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U); in HAL_SD_GetCardCSD()
2426 pCSD->SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U); in HAL_SD_GetCardCSD()
2428 pCSD->Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U); in HAL_SD_GetCardCSD()
2430 pCSD->TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U); in HAL_SD_GetCardCSD()
2432 pCSD->NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U); in HAL_SD_GetCardCSD()
2434 pCSD->MaxBusClkFrec = (uint8_t)(hsd->CSD[0] & 0x000000FFU); in HAL_SD_GetCardCSD()
2436 pCSD->CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U); in HAL_SD_GetCardCSD()
2438 pCSD->RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U); in HAL_SD_GetCardCSD()
2440 pCSD->PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2442 pCSD->WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2444 pCSD->RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2446 pCSD->DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2450 if(hsd->SdCard.CardType == CARD_SDSC) in HAL_SD_GetCardCSD()
2452 pCSD->DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U)); in HAL_SD_GetCardCSD()
2454 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x38000000U) >> 27U); in HAL_SD_GetCardCSD()
2456 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x07000000U) >> 24U); in HAL_SD_GetCardCSD()
2458 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hsd->CSD[2] & 0x00E00000U) >> 21U); in HAL_SD_GetCardCSD()
2460 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hsd->CSD[2] & 0x001C0000U) >> 18U); in HAL_SD_GetCardCSD()
2462 pCSD->DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U); in HAL_SD_GetCardCSD()
2464 hsd->SdCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_SD_GetCardCSD()
2465 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_SD_GetCardCSD()
2466 hsd->SdCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_SD_GetCardCSD()
2468 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U); in HAL_SD_GetCardCSD()
2469 hsd->SdCard.LogBlockSize = 512U; in HAL_SD_GetCardCSD()
2471 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC) in HAL_SD_GetCardCSD()
2474 … pCSD->DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U)); in HAL_SD_GetCardCSD()
2476 hsd->SdCard.BlockNbr = ((pCSD->DeviceSize + 1U) * 1024U); in HAL_SD_GetCardCSD()
2477 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr; in HAL_SD_GetCardCSD()
2478 hsd->SdCard.BlockSize = 512U; in HAL_SD_GetCardCSD()
2479 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize; in HAL_SD_GetCardCSD()
2484 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardCSD()
2485 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_GetCardCSD()
2486 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardCSD()
2490 pCSD->EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2492 pCSD->EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U); in HAL_SD_GetCardCSD()
2494 pCSD->WrProtectGrSize = (uint8_t)(hsd->CSD[2] & 0x0000007FU); in HAL_SD_GetCardCSD()
2496 pCSD->WrProtectGrEnable = (uint8_t)((hsd->CSD[3] & 0x80000000U) >> 31U); in HAL_SD_GetCardCSD()
2498 pCSD->ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U); in HAL_SD_GetCardCSD()
2500 pCSD->WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U); in HAL_SD_GetCardCSD()
2502 pCSD->MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U); in HAL_SD_GetCardCSD()
2504 pCSD->WriteBlockPaPartial = (uint8_t)((hsd->CSD[3] & 0x00200000U) >> 21U); in HAL_SD_GetCardCSD()
2508 pCSD->ContentProtectAppli = (uint8_t)((hsd->CSD[3] & 0x00010000U) >> 16U); in HAL_SD_GetCardCSD()
2510 pCSD->FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U); in HAL_SD_GetCardCSD()
2512 pCSD->CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U); in HAL_SD_GetCardCSD()
2514 pCSD->PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U); in HAL_SD_GetCardCSD()
2516 pCSD->TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U); in HAL_SD_GetCardCSD()
2518 pCSD->FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U); in HAL_SD_GetCardCSD()
2520 pCSD->ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U); in HAL_SD_GetCardCSD()
2522 pCSD->CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U); in HAL_SD_GetCardCSD()
2536 HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) in HAL_SD_GetCardStatus() argument
2542 errorstate = SD_SendSDStatus(hsd, sd_status); in HAL_SD_GetCardStatus()
2546 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2547 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardStatus()
2548 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2582 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_GetCardStatus()
2586 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_GetCardStatus()
2587 hsd->ErrorCode = errorstate; in HAL_SD_GetCardStatus()
2588 hsd->State = HAL_SD_STATE_READY; in HAL_SD_GetCardStatus()
2602 HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo) in HAL_SD_GetCardInfo() argument
2604 pCardInfo->CardType = (uint32_t)(hsd->SdCard.CardType); in HAL_SD_GetCardInfo()
2605 pCardInfo->CardVersion = (uint32_t)(hsd->SdCard.CardVersion); in HAL_SD_GetCardInfo()
2606 pCardInfo->Class = (uint32_t)(hsd->SdCard.Class); in HAL_SD_GetCardInfo()
2607 pCardInfo->RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd); in HAL_SD_GetCardInfo()
2608 pCardInfo->BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr); in HAL_SD_GetCardInfo()
2609 pCardInfo->BlockSize = (uint32_t)(hsd->SdCard.BlockSize); in HAL_SD_GetCardInfo()
2610 pCardInfo->LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr); in HAL_SD_GetCardInfo()
2611 pCardInfo->LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize); in HAL_SD_GetCardInfo()
2627 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) in HAL_SD_ConfigWideBusOperation() argument
2638 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigWideBusOperation()
2640 if(hsd->SdCard.CardType != CARD_SECURED) in HAL_SD_ConfigWideBusOperation()
2644 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2648 errorstate = SD_WideBus_Enable(hsd); in HAL_SD_ConfigWideBusOperation()
2650 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2654 errorstate = SD_WideBus_Disable(hsd); in HAL_SD_ConfigWideBusOperation()
2656 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2661 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigWideBusOperation()
2667 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigWideBusOperation()
2670 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_ConfigWideBusOperation()
2673 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2682 Init.ClockEdge = hsd->Init.ClockEdge; in HAL_SD_ConfigWideBusOperation()
2684 Init.ClockBypass = hsd->Init.ClockBypass; in HAL_SD_ConfigWideBusOperation()
2686 Init.ClockPowerSave = hsd->Init.ClockPowerSave; in HAL_SD_ConfigWideBusOperation()
2688 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; in HAL_SD_ConfigWideBusOperation()
2692 if (hsd->Init.ClockDiv >= (sdmmc_clk / (2U * SD_NORMAL_SPEED_FREQ))) in HAL_SD_ConfigWideBusOperation()
2694 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2696 else if (hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2699 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2701 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigWideBusOperation()
2704 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2712 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2717 if ((sdmmc_clk/(2U * hsd->Init.ClockDiv)) > SD_HIGH_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2723 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2730 if (hsd->Init.ClockDiv == 0U) in HAL_SD_ConfigWideBusOperation()
2738 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2743 if ((sdmmc_clk/(2U * hsd->Init.ClockDiv)) > SD_NORMAL_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2749 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2754 Init.Transceiver = hsd->Init.Transceiver; in HAL_SD_ConfigWideBusOperation()
2756 if ((sdmmc_clk / (hsd->Init.ClockDiv + 2U)) > SD_NORMAL_SPEED_FREQ) in HAL_SD_ConfigWideBusOperation()
2762 Init.ClockDiv = hsd->Init.ClockDiv; in HAL_SD_ConfigWideBusOperation()
2766 (void)SDMMC_Init(hsd->Instance, Init); in HAL_SD_ConfigWideBusOperation()
2770 hsd->ErrorCode |= SDMMC_ERROR_INVALID_PARAMETER; in HAL_SD_ConfigWideBusOperation()
2776 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigWideBusOperation()
2780 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigWideBusOperation()
2781 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigWideBusOperation()
2786 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigWideBusOperation()
2804 HAL_StatusTypeDef HAL_SD_ConfigSpeedBusOperation(SD_HandleTypeDef *hsd, uint32_t SpeedMode) in HAL_SD_ConfigSpeedBusOperation() argument
2813 hsd->State = HAL_SD_STATE_BUSY; in HAL_SD_ConfigSpeedBusOperation()
2815 if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) in HAL_SD_ConfigSpeedBusOperation()
2821 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2822 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2824 hsd->Instance->CLKCR |= 0x00100000U; in HAL_SD_ConfigSpeedBusOperation()
2826 if (SD_UltraHighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2828 if (SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2830 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2835 else if (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in HAL_SD_ConfigSpeedBusOperation()
2838 if (SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2840 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2853 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2854 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2856 hsd->Instance->CLKCR |= 0x00100000U; in HAL_SD_ConfigSpeedBusOperation()
2858 if (SD_UltraHighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2860 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2866 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2874 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2875 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2877 hsd->Instance->CLKCR |= 0x00100000U; in HAL_SD_ConfigSpeedBusOperation()
2879 if (SD_DDR_Mode(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2881 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2887 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2895 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2896 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2897 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2900 if (SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2902 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2908 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2918 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2929 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2930 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2931 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2934 if (SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2936 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2949 if ((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2950 (hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) || in HAL_SD_ConfigSpeedBusOperation()
2951 (hsd->SdCard.CardType == CARD_SDHC_SDXC)) in HAL_SD_ConfigSpeedBusOperation()
2954 if (SD_HighSpeed(hsd) != HAL_SD_ERROR_NONE) in HAL_SD_ConfigSpeedBusOperation()
2956 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2962 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE; in HAL_SD_ConfigSpeedBusOperation()
2973 hsd->ErrorCode |= HAL_SD_ERROR_PARAM; in HAL_SD_ConfigSpeedBusOperation()
2981 while ((HAL_SD_GetCardState(hsd) != HAL_SD_CARD_TRANSFER)) in HAL_SD_ConfigSpeedBusOperation()
2985 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in HAL_SD_ConfigSpeedBusOperation()
2986 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
2992 errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); in HAL_SD_ConfigSpeedBusOperation()
2996 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in HAL_SD_ConfigSpeedBusOperation()
2997 hsd->ErrorCode |= errorstate; in HAL_SD_ConfigSpeedBusOperation()
3002 hsd->State = HAL_SD_STATE_READY; in HAL_SD_ConfigSpeedBusOperation()
3012 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd) in HAL_SD_GetCardState() argument
3018 errorstate = SD_SendStatus(hsd, &resp1); in HAL_SD_GetCardState()
3021 hsd->ErrorCode |= errorstate; in HAL_SD_GetCardState()
3035 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd) in HAL_SD_Abort() argument
3039 uint32_t context = hsd->Context; in HAL_SD_Abort()
3043 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort()
3047 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort()
3051 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort()
3053 CLEAR_BIT(hsd->Instance->DCTRL, SDMMC_DCTRL_DTEN); in HAL_SD_Abort()
3058 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_Abort()
3063 if(HAL_DMA_Abort(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort()
3065 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
3071 if(HAL_DMA_Abort(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort()
3073 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in HAL_SD_Abort()
3083 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort()
3086 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort()
3088 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort()
3091 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort()
3093 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort()
3106 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd) in HAL_SD_Abort_IT() argument
3110 uint32_t context = hsd->Context; in HAL_SD_Abort_IT()
3114 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in HAL_SD_Abort_IT()
3119 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_SD_Abort_IT()
3122 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
3124 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
3125 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
3129 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
3132 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
3139 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
3141 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
3145 CLEAR_BIT(hsd->Instance->DCTRL, SDMMC_DCTRL_DTEN); in HAL_SD_Abort_IT()
3150 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in HAL_SD_Abort_IT()
3155 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort; in HAL_SD_Abort_IT()
3156 if(HAL_DMA_Abort_IT(hsd->hdmatx) != HAL_OK) in HAL_SD_Abort_IT()
3158 hsd->hdmatx = NULL; in HAL_SD_Abort_IT()
3164 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort; in HAL_SD_Abort_IT()
3165 if(HAL_DMA_Abort_IT(hsd->hdmarx) != HAL_OK) in HAL_SD_Abort_IT()
3167 hsd->hdmarx = NULL; in HAL_SD_Abort_IT()
3179 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in HAL_SD_Abort_IT()
3181 CardState = HAL_SD_GetCardState(hsd); in HAL_SD_Abort_IT()
3182 hsd->State = HAL_SD_STATE_READY; in HAL_SD_Abort_IT()
3183 hsd->Context = SD_CONTEXT_NONE; in HAL_SD_Abort_IT()
3186 hsd->ErrorCode = SDMMC_CmdStopTransfer(hsd->Instance); in HAL_SD_Abort_IT()
3188 if(hsd->ErrorCode != HAL_SD_ERROR_NONE) in HAL_SD_Abort_IT()
3195 hsd->AbortCpltCallback(hsd); in HAL_SD_Abort_IT()
3197 HAL_SD_AbortCallback(hsd); in HAL_SD_Abort_IT()
3227 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATransmitCplt() local
3230 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DATAEND)); in SD_DMATransmitCplt()
3240 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAReceiveCplt() local
3244 if(hsd->Context == (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA)) in SD_DMAReceiveCplt()
3246 errorstate = SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAReceiveCplt()
3249 hsd->ErrorCode |= errorstate; in SD_DMAReceiveCplt()
3251 hsd->ErrorCallback(hsd); in SD_DMAReceiveCplt()
3253 HAL_SD_ErrorCallback(hsd); in SD_DMAReceiveCplt()
3260 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN); in SD_DMAReceiveCplt()
3263 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMAReceiveCplt()
3265 hsd->State = HAL_SD_STATE_READY; in SD_DMAReceiveCplt()
3266 hsd->Context = SD_CONTEXT_NONE; in SD_DMAReceiveCplt()
3269 hsd->RxCpltCallback(hsd); in SD_DMAReceiveCplt()
3271 HAL_SD_RxCpltCallback(hsd); in SD_DMAReceiveCplt()
3282 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMAError() local
3286 RxErrorCode = hsd->hdmarx->ErrorCode; in SD_DMAError()
3287 TxErrorCode = hsd->hdmatx->ErrorCode; in SD_DMAError()
3291 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_FLAGS); in SD_DMAError()
3294 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\ in SD_DMAError()
3297 hsd->ErrorCode |= HAL_SD_ERROR_DMA; in SD_DMAError()
3298 CardState = HAL_SD_GetCardState(hsd); in SD_DMAError()
3301 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMAError()
3304 hsd->State= HAL_SD_STATE_READY; in SD_DMAError()
3305 hsd->Context = SD_CONTEXT_NONE; in SD_DMAError()
3309 hsd->ErrorCallback(hsd); in SD_DMAError()
3311 HAL_SD_ErrorCallback(hsd); in SD_DMAError()
3322 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMATxAbort() local
3326 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMATxAbort()
3328 CardState = HAL_SD_GetCardState(hsd); in SD_DMATxAbort()
3329 hsd->State = HAL_SD_STATE_READY; in SD_DMATxAbort()
3330 hsd->Context = SD_CONTEXT_NONE; in SD_DMATxAbort()
3333 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMATxAbort()
3336 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMATxAbort()
3339 hsd->AbortCpltCallback(hsd); in SD_DMATxAbort()
3341 HAL_SD_AbortCallback(hsd); in SD_DMATxAbort()
3347 hsd->ErrorCallback(hsd); in SD_DMATxAbort()
3349 HAL_SD_ErrorCallback(hsd); in SD_DMATxAbort()
3361 SD_HandleTypeDef* hsd = (SD_HandleTypeDef* )(hdma->Parent); in SD_DMARxAbort() local
3365 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DMARxAbort()
3367 CardState = HAL_SD_GetCardState(hsd); in SD_DMARxAbort()
3368 hsd->State = HAL_SD_STATE_READY; in SD_DMARxAbort()
3369 hsd->Context = SD_CONTEXT_NONE; in SD_DMARxAbort()
3372 hsd->ErrorCode |= SDMMC_CmdStopTransfer(hsd->Instance); in SD_DMARxAbort()
3375 if(hsd->ErrorCode == HAL_SD_ERROR_NONE) in SD_DMARxAbort()
3378 hsd->AbortCpltCallback(hsd); in SD_DMARxAbort()
3380 HAL_SD_AbortCallback(hsd); in SD_DMARxAbort()
3386 hsd->ErrorCallback(hsd); in SD_DMARxAbort()
3388 HAL_SD_ErrorCallback(hsd); in SD_DMARxAbort()
3399 static uint32_t SD_InitCard(SD_HandleTypeDef *hsd) in SD_InitCard() argument
3406 if(SDMMC_GetPowerState(hsd->Instance) == 0U) in SD_InitCard()
3412 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3415 errorstate = SDMMC_CmdSendCID(hsd->Instance); in SD_InitCard()
3423 hsd->CID[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3424 hsd->CID[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3425 hsd->CID[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3426 hsd->CID[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3430 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3434 errorstate = SDMMC_CmdSetRelAdd(hsd->Instance, &sd_rca); in SD_InitCard()
3440 if(hsd->SdCard.CardType != CARD_SECURED) in SD_InitCard()
3443 hsd->SdCard.RelCardAdd = sd_rca; in SD_InitCard()
3446 errorstate = SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_InitCard()
3454 hsd->CSD[0U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_InitCard()
3455 hsd->CSD[1U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2); in SD_InitCard()
3456 hsd->CSD[2U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP3); in SD_InitCard()
3457 hsd->CSD[3U] = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP4); in SD_InitCard()
3462 hsd->SdCard.Class = (SDMMC_GetResponse(hsd->Instance, SDMMC_RESP2) >> 20U); in SD_InitCard()
3465 if (HAL_SD_GetCardCSD(hsd, &CSD) != HAL_OK) in SD_InitCard()
3471 …errorstate = SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U… in SD_InitCard()
3488 static uint32_t SD_PowerON(SD_HandleTypeDef *hsd) in SD_PowerON() argument
3498 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3505 errorstate = SDMMC_CmdOperCond(hsd->Instance); in SD_PowerON()
3508 hsd->SdCard.CardVersion = CARD_V1_X; in SD_PowerON()
3510 errorstate = SDMMC_CmdGoIdleState(hsd->Instance); in SD_PowerON()
3519 hsd->SdCard.CardVersion = CARD_V2_X; in SD_PowerON()
3522 if( hsd->SdCard.CardVersion == CARD_V2_X) in SD_PowerON()
3525 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3536 errorstate = SDMMC_CmdAppCommand(hsd->Instance, 0); in SD_PowerON()
3543 …errorstate = SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY … in SD_PowerON()
3550 response = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_PowerON()
3565 hsd->SdCard.CardType = CARD_SDHC_SDXC; in SD_PowerON()
3567 if(hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE) in SD_PowerON()
3571 hsd->SdCard.CardSpeed = CARD_ULTRA_HIGH_SPEED; in SD_PowerON()
3574 hsd->Instance->POWER |= SDMMC_POWER_VSWITCHEN; in SD_PowerON()
3577 errorstate = SDMMC_CmdVoltageSwitch(hsd->Instance); in SD_PowerON()
3584 while(( hsd->Instance->STA & SDMMC_FLAG_CKSTOP) != SDMMC_FLAG_CKSTOP) in SD_PowerON()
3593 hsd->Instance->ICR = SDMMC_FLAG_CKSTOP; in SD_PowerON()
3596 if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) != SDMMC_FLAG_BUSYD0) in SD_PowerON()
3605 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_PowerON()
3611 hsd->Instance->POWER |= SDMMC_POWER_VSWITCH; in SD_PowerON()
3614 while(( hsd->Instance->STA & SDMMC_FLAG_VSWEND) != SDMMC_FLAG_VSWEND) in SD_PowerON()
3623 hsd->Instance->ICR = SDMMC_FLAG_VSWEND; in SD_PowerON()
3626 if(( hsd->Instance->STA & SDMMC_FLAG_BUSYD0) == SDMMC_FLAG_BUSYD0) in SD_PowerON()
3634 hsd->Instance->POWER = 0x13U; in SD_PowerON()
3637 hsd->Instance->ICR = 0xFFFFFFFFU; in SD_PowerON()
3645 hsd->SdCard.CardType = CARD_SDSC; in SD_PowerON()
3657 static void SD_PowerOFF(SD_HandleTypeDef *hsd) in SD_PowerOFF() argument
3660 (void)SDMMC_PowerState_OFF(hsd->Instance); in SD_PowerOFF()
3670 static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus) in SD_SendSDStatus() argument
3679 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_SendSDStatus()
3685 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_SendSDStatus()
3688 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3693 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendSDStatus()
3696 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3707 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_SendSDStatus()
3710 errorstate = SDMMC_CmdStatusRegister(hsd->Instance); in SD_SendSDStatus()
3713 hsd->ErrorCode |= HAL_SD_ERROR_NONE; in SD_SendSDStatus()
3719 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_SendSDStatus()
3721 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_SendSDStatus()
3724 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_SendSDStatus()
3728 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3739 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_SendSDStatus()
3743 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_SendSDStatus()
3747 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_SendSDStatus()
3757 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DPSMACT))) in SD_SendSDStatus()
3759 while ((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL))) in SD_SendSDStatus()
3762 *pData = SDMMC_ReadFIFO(hsd->Instance); in SD_SendSDStatus()
3772 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_SendSDStatus()
3784 static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus) in SD_SendStatus() argument
3794 errorstate = SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_SendStatus()
3801 *pCardStatus = SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1); in SD_SendStatus()
3811 static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd) in SD_WideBus_Enable() argument
3816 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Enable()
3822 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Enable()
3832 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Enable()
3839 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 2U); in SD_WideBus_Enable()
3858 static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd) in SD_WideBus_Disable() argument
3863 if((SDMMC_GetResponse(hsd->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in SD_WideBus_Disable()
3869 errorstate = SD_FindSCR(hsd, scr); in SD_WideBus_Disable()
3879 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U)); in SD_WideBus_Disable()
3886 errorstate = SDMMC_CmdBusWidth(hsd->Instance, 0U); in SD_WideBus_Disable()
3907 static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR) in SD_FindSCR() argument
3917 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 8U); in SD_FindSCR()
3924 errorstate = SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U)); in SD_FindSCR()
3936 (void)SDMMC_ConfigData(hsd->Instance, &config); in SD_FindSCR()
3939 errorstate = SDMMC_CmdSendSCR(hsd->Instance); in SD_FindSCR()
3946 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_FindSCR()
3948 if((!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOE)) && (index == 0U)) in SD_FindSCR()
3950 tempscr[0] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3951 tempscr[1] = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3962 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_FindSCR()
3964 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXDAVL)) in SD_FindSCR()
3966 *(tempscr + index) = SDMMC_ReadFIFO(hsd->Instance); in SD_FindSCR()
3977 if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_FindSCR()
3979 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_FindSCR()
3983 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_FindSCR()
3985 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_FindSCR()
3989 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_FindSCR()
3991 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_FindSCR()
3999 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_FindSCR()
4018 static void SD_Read_IT(SD_HandleTypeDef *hsd) in SD_Read_IT() argument
4023 tmp = hsd->pRxBuffPtr; in SD_Read_IT()
4024 dataremaining = hsd->RxXferSize; in SD_Read_IT()
4031 data = SDMMC_ReadFIFO(hsd->Instance); in SD_Read_IT()
4046 hsd->pRxBuffPtr = tmp; in SD_Read_IT()
4047 hsd->RxXferSize = dataremaining; in SD_Read_IT()
4057 static void SD_Write_IT(SD_HandleTypeDef *hsd) in SD_Write_IT() argument
4062 tmp = hsd->pTxBuffPtr; in SD_Write_IT()
4063 dataremaining = hsd->TxXferSize; in SD_Write_IT()
4082 (void)SDMMC_WriteFIFO(hsd->Instance, &data); in SD_Write_IT()
4085 hsd->pTxBuffPtr = tmp; in SD_Write_IT()
4086 hsd->TxXferSize = dataremaining; in SD_Write_IT()
4099 uint32_t SD_HighSpeed(SD_HandleTypeDef *hsd) in SD_HighSpeed() argument
4107 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_HighSpeed()
4113 if(hsd->SdCard.CardSpeed == CARD_HIGH_SPEED) in SD_HighSpeed()
4116 hsd->Instance->DCTRL = 0; in SD_HighSpeed()
4117 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_HighSpeed()
4132 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_HighSpeed()
4134 errorstate = SDMMC_CmdSwitch(hsd->Instance,SDMMC_SDR25_SWITCH_PATTERN); in SD_HighSpeed()
4140 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_HighSpeed()
4142 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_HighSpeed()
4146 SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance); in SD_HighSpeed()
4153 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_HighSpeed()
4154 hsd->State= HAL_SD_STATE_READY; in SD_HighSpeed()
4159 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_HighSpeed()
4161 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_HighSpeed()
4165 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_HighSpeed()
4167 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_HighSpeed()
4173 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_HighSpeed()
4175 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_HighSpeed()
4187 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_HighSpeed()
4208 static uint32_t SD_UltraHighSpeed(SD_HandleTypeDef *hsd) in SD_UltraHighSpeed() argument
4216 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_UltraHighSpeed()
4222 if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) && in SD_UltraHighSpeed()
4223 (hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE)) in SD_UltraHighSpeed()
4226 hsd->Instance->DCTRL = 0; in SD_UltraHighSpeed()
4227 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_UltraHighSpeed()
4242 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_UltraHighSpeed()
4244 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_SDR104_SWITCH_PATTERN); in SD_UltraHighSpeed()
4250 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_UltraHighSpeed()
4252 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_UltraHighSpeed()
4256 SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance); in SD_UltraHighSpeed()
4263 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_UltraHighSpeed()
4264 hsd->State= HAL_SD_STATE_READY; in SD_UltraHighSpeed()
4269 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_UltraHighSpeed()
4271 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_UltraHighSpeed()
4275 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_UltraHighSpeed()
4277 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_UltraHighSpeed()
4283 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_UltraHighSpeed()
4285 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_UltraHighSpeed()
4297 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_UltraHighSpeed()
4307 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_UltraHighSpeed()
4314 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX,SDMMC_CLKCR_SELCLKRX_1); in SD_UltraHighSpeed()
4315 if (DelayBlock_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)) != HAL_OK) in SD_UltraHighSpeed()
4334 static uint32_t SD_DDR_Mode(SD_HandleTypeDef *hsd) in SD_DDR_Mode() argument
4342 if(hsd->SdCard.CardSpeed == CARD_NORMAL_SPEED) in SD_DDR_Mode()
4348 if((hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED) && in SD_DDR_Mode()
4349 (hsd->Init.Transceiver == SDMMC_TRANSCEIVER_ENABLE)) in SD_DDR_Mode()
4352 hsd->Instance->DCTRL = 0; in SD_DDR_Mode()
4353 errorstate = SDMMC_CmdBlockLength(hsd->Instance, 64U); in SD_DDR_Mode()
4368 (void)SDMMC_ConfigData(hsd->Instance, &sdmmc_datainitstructure); in SD_DDR_Mode()
4370 errorstate = SDMMC_CmdSwitch(hsd->Instance, SDMMC_DDR50_SWITCH_PATTERN); in SD_DDR_Mode()
4376 …while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDM… in SD_DDR_Mode()
4378 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF)) in SD_DDR_Mode()
4382 SD_hs[(8U*loop)+count] = SDMMC_ReadFIFO(hsd->Instance); in SD_DDR_Mode()
4389 hsd->ErrorCode = HAL_SD_ERROR_TIMEOUT; in SD_DDR_Mode()
4390 hsd->State= HAL_SD_STATE_READY; in SD_DDR_Mode()
4395 if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DTIMEOUT)) in SD_DDR_Mode()
4397 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DTIMEOUT); in SD_DDR_Mode()
4401 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL)) in SD_DDR_Mode()
4403 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DCRCFAIL); in SD_DDR_Mode()
4409 else if (__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXOVERR)) in SD_DDR_Mode()
4411 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_RXOVERR); in SD_DDR_Mode()
4423 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS); in SD_DDR_Mode()
4433 hsd->DriveTransceiver_1_8V_Callback(SET); in SD_DDR_Mode()
4440 MODIFY_REG(hsd->Instance->CLKCR, SDMMC_CLKCR_SELCLKRX,SDMMC_CLKCR_SELCLKRX_1); in SD_DDR_Mode()
4441 if (DelayBlock_Enable(SD_GET_DLYB_INSTANCE(hsd->Instance)) != HAL_OK) in SD_DDR_Mode()