Lines Matching refs:hmmc
303 static uint32_t MMC_InitCard(MMC_HandleTypeDef *hmmc);
304 static uint32_t MMC_PowerON(MMC_HandleTypeDef *hmmc);
305 static uint32_t MMC_SendStatus(MMC_HandleTypeDef *hmmc, uint32_t *pCardStatus);
306 static void MMC_PowerOFF(MMC_HandleTypeDef *hmmc);
307 static void MMC_Write_IT(MMC_HandleTypeDef *hmmc);
308 static void MMC_Read_IT(MMC_HandleTypeDef *hmmc);
309 static uint32_t MMC_HighSpeed(MMC_HandleTypeDef *hmmc, FunctionalState state);
310 static uint32_t MMC_DDR_Mode(MMC_HandleTypeDef *hmmc, FunctionalState state);
311 static HAL_StatusTypeDef MMC_ReadExtCSD(MMC_HandleTypeDef *hmmc, uint32_t *pFieldData, uint16_t Fie…
313 static uint32_t MMC_PwrClassUpdate(MMC_HandleTypeDef *hmmc, uint32_t Wide, uint32_t Speed);
344 HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc) in HAL_MMC_Init() argument
347 if (hmmc == NULL) in HAL_MMC_Init()
353 assert_param(IS_SDMMC_ALL_INSTANCE(hmmc->Instance)); in HAL_MMC_Init()
354 assert_param(IS_SDMMC_CLOCK_EDGE(hmmc->Init.ClockEdge)); in HAL_MMC_Init()
355 assert_param(IS_SDMMC_CLOCK_POWER_SAVE(hmmc->Init.ClockPowerSave)); in HAL_MMC_Init()
356 assert_param(IS_SDMMC_BUS_WIDE(hmmc->Init.BusWide)); in HAL_MMC_Init()
357 assert_param(IS_SDMMC_HARDWARE_FLOW_CONTROL(hmmc->Init.HardwareFlowControl)); in HAL_MMC_Init()
358 assert_param(IS_SDMMC_CLKDIV(hmmc->Init.ClockDiv)); in HAL_MMC_Init()
360 if (hmmc->State == HAL_MMC_STATE_RESET) in HAL_MMC_Init()
363 hmmc->Lock = HAL_UNLOCKED; in HAL_MMC_Init()
366 hmmc->TxCpltCallback = HAL_MMC_TxCpltCallback; in HAL_MMC_Init()
367 hmmc->RxCpltCallback = HAL_MMC_RxCpltCallback; in HAL_MMC_Init()
368 hmmc->ErrorCallback = HAL_MMC_ErrorCallback; in HAL_MMC_Init()
369 hmmc->AbortCpltCallback = HAL_MMC_AbortCallback; in HAL_MMC_Init()
370 hmmc->Read_DMALnkLstBufCpltCallback = HAL_MMCEx_Read_DMALnkLstBufCpltCallback; in HAL_MMC_Init()
371 hmmc->Write_DMALnkLstBufCpltCallback = HAL_MMCEx_Write_DMALnkLstBufCpltCallback; in HAL_MMC_Init()
373 if (hmmc->MspInitCallback == NULL) in HAL_MMC_Init()
375 hmmc->MspInitCallback = HAL_MMC_MspInit; in HAL_MMC_Init()
379 hmmc->MspInitCallback(hmmc); in HAL_MMC_Init()
382 HAL_MMC_MspInit(hmmc); in HAL_MMC_Init()
386 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_Init()
389 if (HAL_MMC_InitCard(hmmc) == HAL_ERROR) in HAL_MMC_Init()
395 hmmc->ErrorCode = HAL_DMA_ERROR_NONE; in HAL_MMC_Init()
398 hmmc->Context = MMC_CONTEXT_NONE; in HAL_MMC_Init()
401 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Init()
404 if (hmmc->Init.BusWide != SDMMC_BUS_WIDE_1B) in HAL_MMC_Init()
406 if (HAL_MMC_ConfigWideBusOperation(hmmc, hmmc->Init.BusWide) != HAL_OK) in HAL_MMC_Init()
422 HAL_StatusTypeDef HAL_MMC_InitCard(MMC_HandleTypeDef *hmmc) in HAL_MMC_InitCard() argument
435 if (hmmc->Instance == SDMMC1) in HAL_MMC_InitCard()
440 else if (hmmc->Instance == SDMMC2) in HAL_MMC_InitCard()
451 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_InitCard()
452 hmmc->ErrorCode = SDMMC_ERROR_INVALID_PARAMETER; in HAL_MMC_InitCard()
462 (void)SDMMC_Init(hmmc->Instance, Init); in HAL_MMC_InitCard()
465 (void)SDMMC_PowerState_ON(hmmc->Instance); in HAL_MMC_InitCard()
480 errorstate = MMC_PowerON(hmmc); in HAL_MMC_InitCard()
483 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_InitCard()
484 hmmc->ErrorCode |= errorstate; in HAL_MMC_InitCard()
489 errorstate = MMC_InitCard(hmmc); in HAL_MMC_InitCard()
492 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_InitCard()
493 hmmc->ErrorCode |= errorstate; in HAL_MMC_InitCard()
498 errorstate = SDMMC_CmdBlockLength(hmmc->Instance, MMC_BLOCKSIZE); in HAL_MMC_InitCard()
502 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_InitCard()
503 hmmc->ErrorCode |= errorstate; in HAL_MMC_InitCard()
504 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_InitCard()
516 HAL_StatusTypeDef HAL_MMC_DeInit(MMC_HandleTypeDef *hmmc) in HAL_MMC_DeInit() argument
519 if (hmmc == NULL) in HAL_MMC_DeInit()
525 assert_param(IS_SDMMC_ALL_INSTANCE(hmmc->Instance)); in HAL_MMC_DeInit()
527 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_DeInit()
530 MMC_PowerOFF(hmmc); in HAL_MMC_DeInit()
533 if (hmmc->MspDeInitCallback == NULL) in HAL_MMC_DeInit()
535 hmmc->MspDeInitCallback = HAL_MMC_MspDeInit; in HAL_MMC_DeInit()
539 hmmc->MspDeInitCallback(hmmc); in HAL_MMC_DeInit()
542 HAL_MMC_MspDeInit(hmmc); in HAL_MMC_DeInit()
545 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_DeInit()
546 hmmc->State = HAL_MMC_STATE_RESET; in HAL_MMC_DeInit()
556 __weak void HAL_MMC_MspInit(MMC_HandleTypeDef *hmmc) in HAL_MMC_MspInit() argument
559 UNUSED(hmmc); in HAL_MMC_MspInit()
571 __weak void HAL_MMC_MspDeInit(MMC_HandleTypeDef *hmmc) in HAL_MMC_MspDeInit() argument
574 UNUSED(hmmc); in HAL_MMC_MspDeInit()
612 HAL_StatusTypeDef HAL_MMC_ReadBlocks(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, in HAL_MMC_ReadBlocks() argument
627 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_ReadBlocks()
631 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_ReadBlocks()
633 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_ReadBlocks()
635 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_ReadBlocks()
637 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_ReadBlocks()
642 if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) in HAL_MMC_ReadBlocks()
648 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_ReadBlocks()
655 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_ReadBlocks()
660 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ReadBlocks()
663 hmmc->Instance->DCTRL = 0U; in HAL_MMC_ReadBlocks()
665 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_ReadBlocks()
677 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_ReadBlocks()
678 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_ReadBlocks()
683 hmmc->Context = MMC_CONTEXT_READ_MULTIPLE_BLOCK; in HAL_MMC_ReadBlocks()
686 errorstate = SDMMC_CmdReadMultiBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks()
690 hmmc->Context = MMC_CONTEXT_READ_SINGLE_BLOCK; in HAL_MMC_ReadBlocks()
693 errorstate = SDMMC_CmdReadSingleBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks()
698 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
699 hmmc->ErrorCode |= errorstate; in HAL_MMC_ReadBlocks()
700 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
706 while (!__HAL_MMC_GET_FLAG(hmmc, in HAL_MMC_ReadBlocks()
709 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXFIFOHF) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_MMC_ReadBlocks()
714 data = SDMMC_ReadFIFO(hmmc->Instance); in HAL_MMC_ReadBlocks()
730 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
731 hmmc->ErrorCode |= HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_ReadBlocks()
732 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
736 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_ReadBlocks()
739 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_MMC_ReadBlocks()
742 errorstate = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_ReadBlocks()
746 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
747 hmmc->ErrorCode |= errorstate; in HAL_MMC_ReadBlocks()
748 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
754 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DTIMEOUT)) in HAL_MMC_ReadBlocks()
757 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
758 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT; in HAL_MMC_ReadBlocks()
759 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
762 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL)) in HAL_MMC_ReadBlocks()
765 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
766 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL; in HAL_MMC_ReadBlocks()
767 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
770 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXOVERR)) in HAL_MMC_ReadBlocks()
773 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks()
774 hmmc->ErrorCode |= HAL_MMC_ERROR_RX_OVERRUN; in HAL_MMC_ReadBlocks()
775 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
784 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_ReadBlocks()
786 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks()
792 hmmc->ErrorCode |= HAL_MMC_ERROR_BUSY; in HAL_MMC_ReadBlocks()
809 HAL_StatusTypeDef HAL_MMC_WriteBlocks(MMC_HandleTypeDef *hmmc, const uint8_t *pData, uint32_t Block… in HAL_MMC_WriteBlocks() argument
823 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_WriteBlocks()
827 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_WriteBlocks()
829 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_WriteBlocks()
831 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_WriteBlocks()
833 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_WriteBlocks()
838 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_WriteBlocks()
843 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_WriteBlocks()
850 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_WriteBlocks()
855 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_WriteBlocks()
858 hmmc->Instance->DCTRL = 0U; in HAL_MMC_WriteBlocks()
860 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_WriteBlocks()
872 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_WriteBlocks()
873 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_WriteBlocks()
878 hmmc->Context = MMC_CONTEXT_WRITE_MULTIPLE_BLOCK; in HAL_MMC_WriteBlocks()
881 errorstate = SDMMC_CmdWriteMultiBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks()
885 hmmc->Context = MMC_CONTEXT_WRITE_SINGLE_BLOCK; in HAL_MMC_WriteBlocks()
888 errorstate = SDMMC_CmdWriteSingleBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks()
893 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
894 hmmc->ErrorCode |= errorstate; in HAL_MMC_WriteBlocks()
895 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
901 while (!__HAL_MMC_GET_FLAG(hmmc, in HAL_MMC_WriteBlocks()
904 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_TXFIFOHE) && (dataremaining >= SDMMC_FIFO_SIZE)) in HAL_MMC_WriteBlocks()
917 (void)SDMMC_WriteFIFO(hmmc->Instance, &data); in HAL_MMC_WriteBlocks()
925 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
926 hmmc->ErrorCode |= errorstate; in HAL_MMC_WriteBlocks()
927 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
931 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_WriteBlocks()
934 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DATAEND) && (NumberOfBlocks > 1U)) in HAL_MMC_WriteBlocks()
937 errorstate = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_WriteBlocks()
941 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
942 hmmc->ErrorCode |= errorstate; in HAL_MMC_WriteBlocks()
943 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
949 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DTIMEOUT)) in HAL_MMC_WriteBlocks()
952 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
953 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT; in HAL_MMC_WriteBlocks()
954 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
957 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL)) in HAL_MMC_WriteBlocks()
960 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
961 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL; in HAL_MMC_WriteBlocks()
962 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
965 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_TXUNDERR)) in HAL_MMC_WriteBlocks()
968 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks()
969 hmmc->ErrorCode |= HAL_MMC_ERROR_TX_UNDERRUN; in HAL_MMC_WriteBlocks()
970 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
979 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_WriteBlocks()
981 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks()
987 hmmc->ErrorCode |= HAL_MMC_ERROR_BUSY; in HAL_MMC_WriteBlocks()
1005 HAL_StatusTypeDef HAL_MMC_ReadBlocks_IT(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, in HAL_MMC_ReadBlocks_IT() argument
1014 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_ReadBlocks_IT()
1018 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_ReadBlocks_IT()
1020 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_ReadBlocks_IT()
1022 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_ReadBlocks_IT()
1024 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_ReadBlocks_IT()
1029 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_ReadBlocks_IT()
1034 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_ReadBlocks_IT()
1041 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_ReadBlocks_IT()
1046 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ReadBlocks_IT()
1049 hmmc->Instance->DCTRL = 0U; in HAL_MMC_ReadBlocks_IT()
1051 hmmc->pRxBuffPtr = pData; in HAL_MMC_ReadBlocks_IT()
1052 hmmc->RxXferSize = MMC_BLOCKSIZE * NumberOfBlocks; in HAL_MMC_ReadBlocks_IT()
1054 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_ReadBlocks_IT()
1066 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_ReadBlocks_IT()
1067 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_ReadBlocks_IT()
1072 hmmc->Context = (MMC_CONTEXT_READ_MULTIPLE_BLOCK | MMC_CONTEXT_IT); in HAL_MMC_ReadBlocks_IT()
1075 errorstate = SDMMC_CmdReadMultiBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks_IT()
1079 hmmc->Context = (MMC_CONTEXT_READ_SINGLE_BLOCK | MMC_CONTEXT_IT); in HAL_MMC_ReadBlocks_IT()
1082 errorstate = SDMMC_CmdReadSingleBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks_IT()
1088 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks_IT()
1089 hmmc->ErrorCode |= errorstate; in HAL_MMC_ReadBlocks_IT()
1090 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks_IT()
1094 …__HAL_MMC_ENABLE_IT(hmmc, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DAT… in HAL_MMC_ReadBlocks_IT()
1118 HAL_StatusTypeDef HAL_MMC_WriteBlocks_IT(MMC_HandleTypeDef *hmmc, const uint8_t *pData, in HAL_MMC_WriteBlocks_IT() argument
1127 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_WriteBlocks_IT()
1131 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_WriteBlocks_IT()
1133 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_WriteBlocks_IT()
1135 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_WriteBlocks_IT()
1137 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_WriteBlocks_IT()
1142 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_WriteBlocks_IT()
1147 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_WriteBlocks_IT()
1154 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_WriteBlocks_IT()
1159 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_WriteBlocks_IT()
1162 hmmc->Instance->DCTRL = 0U; in HAL_MMC_WriteBlocks_IT()
1164 hmmc->pTxBuffPtr = pData; in HAL_MMC_WriteBlocks_IT()
1165 hmmc->TxXferSize = MMC_BLOCKSIZE * NumberOfBlocks; in HAL_MMC_WriteBlocks_IT()
1167 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_WriteBlocks_IT()
1179 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_WriteBlocks_IT()
1181 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_WriteBlocks_IT()
1186 hmmc->Context = (MMC_CONTEXT_WRITE_MULTIPLE_BLOCK | MMC_CONTEXT_IT); in HAL_MMC_WriteBlocks_IT()
1189 errorstate = SDMMC_CmdWriteMultiBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks_IT()
1193 hmmc->Context = (MMC_CONTEXT_WRITE_SINGLE_BLOCK | MMC_CONTEXT_IT); in HAL_MMC_WriteBlocks_IT()
1196 errorstate = SDMMC_CmdWriteSingleBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks_IT()
1201 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks_IT()
1202 hmmc->ErrorCode |= errorstate; in HAL_MMC_WriteBlocks_IT()
1203 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks_IT()
1208 …__HAL_MMC_ENABLE_IT(hmmc, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DA… in HAL_MMC_WriteBlocks_IT()
1232 HAL_StatusTypeDef HAL_MMC_ReadBlocks_DMA(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, in HAL_MMC_ReadBlocks_DMA() argument
1241 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_ReadBlocks_DMA()
1245 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_ReadBlocks_DMA()
1247 hmmc->ErrorCode = HAL_DMA_ERROR_NONE; in HAL_MMC_ReadBlocks_DMA()
1249 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_ReadBlocks_DMA()
1251 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_ReadBlocks_DMA()
1256 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_ReadBlocks_DMA()
1261 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_ReadBlocks_DMA()
1268 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_ReadBlocks_DMA()
1273 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ReadBlocks_DMA()
1276 hmmc->Instance->DCTRL = 0U; in HAL_MMC_ReadBlocks_DMA()
1278 hmmc->pRxBuffPtr = pData; in HAL_MMC_ReadBlocks_DMA()
1279 hmmc->RxXferSize = MMC_BLOCKSIZE * NumberOfBlocks; in HAL_MMC_ReadBlocks_DMA()
1281 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_ReadBlocks_DMA()
1293 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_ReadBlocks_DMA()
1295 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_ReadBlocks_DMA()
1296 hmmc->Instance->IDMABASER = (uint32_t) pData ; in HAL_MMC_ReadBlocks_DMA()
1297 hmmc->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_MMC_ReadBlocks_DMA()
1302 hmmc->Context = (MMC_CONTEXT_READ_MULTIPLE_BLOCK | MMC_CONTEXT_DMA); in HAL_MMC_ReadBlocks_DMA()
1305 errorstate = SDMMC_CmdReadMultiBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks_DMA()
1309 hmmc->Context = (MMC_CONTEXT_READ_SINGLE_BLOCK | MMC_CONTEXT_DMA); in HAL_MMC_ReadBlocks_DMA()
1312 errorstate = SDMMC_CmdReadSingleBlock(hmmc->Instance, add); in HAL_MMC_ReadBlocks_DMA()
1317 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ReadBlocks_DMA()
1318 hmmc->ErrorCode = errorstate; in HAL_MMC_ReadBlocks_DMA()
1319 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ReadBlocks_DMA()
1324 …__HAL_MMC_ENABLE_IT(hmmc, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DAT… in HAL_MMC_ReadBlocks_DMA()
1347 HAL_StatusTypeDef HAL_MMC_WriteBlocks_DMA(MMC_HandleTypeDef *hmmc, const uint8_t *pData, in HAL_MMC_WriteBlocks_DMA() argument
1356 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_WriteBlocks_DMA()
1360 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_WriteBlocks_DMA()
1362 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_WriteBlocks_DMA()
1364 if ((BlockAdd + NumberOfBlocks) > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_WriteBlocks_DMA()
1366 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_WriteBlocks_DMA()
1371 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_WriteBlocks_DMA()
1376 hmmc->ErrorCode |= HAL_MMC_ERROR_BLOCK_LEN_ERR; in HAL_MMC_WriteBlocks_DMA()
1383 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_WriteBlocks_DMA()
1388 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_WriteBlocks_DMA()
1391 hmmc->Instance->DCTRL = 0U; in HAL_MMC_WriteBlocks_DMA()
1393 hmmc->pTxBuffPtr = pData; in HAL_MMC_WriteBlocks_DMA()
1394 hmmc->TxXferSize = MMC_BLOCKSIZE * NumberOfBlocks; in HAL_MMC_WriteBlocks_DMA()
1396 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_WriteBlocks_DMA()
1408 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_WriteBlocks_DMA()
1410 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_WriteBlocks_DMA()
1412 hmmc->Instance->IDMABASER = (uint32_t) pData ; in HAL_MMC_WriteBlocks_DMA()
1413 hmmc->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_SINGLE_BUFF; in HAL_MMC_WriteBlocks_DMA()
1418 hmmc->Context = (MMC_CONTEXT_WRITE_MULTIPLE_BLOCK | MMC_CONTEXT_DMA); in HAL_MMC_WriteBlocks_DMA()
1421 errorstate = SDMMC_CmdWriteMultiBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks_DMA()
1425 hmmc->Context = (MMC_CONTEXT_WRITE_SINGLE_BLOCK | MMC_CONTEXT_DMA); in HAL_MMC_WriteBlocks_DMA()
1428 errorstate = SDMMC_CmdWriteSingleBlock(hmmc->Instance, add); in HAL_MMC_WriteBlocks_DMA()
1433 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_WriteBlocks_DMA()
1434 hmmc->ErrorCode |= errorstate; in HAL_MMC_WriteBlocks_DMA()
1435 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_WriteBlocks_DMA()
1440 …__HAL_MMC_ENABLE_IT(hmmc, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DA… in HAL_MMC_WriteBlocks_DMA()
1459 HAL_StatusTypeDef HAL_MMC_Erase(MMC_HandleTypeDef *hmmc, uint32_t BlockStartAdd, uint32_t BlockEndA… in HAL_MMC_Erase() argument
1465 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_Erase()
1467 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_Erase()
1471 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_Erase()
1475 if (end_add > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_Erase()
1477 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_Erase()
1482 if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) in HAL_MMC_Erase()
1488 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_Erase()
1493 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_Erase()
1496 if (((hmmc->MmcCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_MMC_Erase()
1499 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Erase()
1500 hmmc->ErrorCode |= HAL_MMC_ERROR_REQUEST_NOT_APPLICABLE; in HAL_MMC_Erase()
1501 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1505 if ((SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_MMC_Erase()
1508 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Erase()
1509 hmmc->ErrorCode |= HAL_MMC_ERROR_LOCK_UNLOCK_FAILED; in HAL_MMC_Erase()
1510 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1514 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_Erase()
1521 errorstate = SDMMC_CmdEraseStartAdd(hmmc->Instance, start_add); in HAL_MMC_Erase()
1525 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Erase()
1526 hmmc->ErrorCode |= errorstate; in HAL_MMC_Erase()
1527 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1532 errorstate = SDMMC_CmdEraseEndAdd(hmmc->Instance, end_add); in HAL_MMC_Erase()
1536 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Erase()
1537 hmmc->ErrorCode |= errorstate; in HAL_MMC_Erase()
1538 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1543 errorstate = SDMMC_CmdErase(hmmc->Instance, 0UL); in HAL_MMC_Erase()
1547 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Erase()
1548 hmmc->ErrorCode |= errorstate; in HAL_MMC_Erase()
1549 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1553 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Erase()
1568 void HAL_MMC_IRQHandler(MMC_HandleTypeDef *hmmc) in HAL_MMC_IRQHandler() argument
1571 uint32_t context = hmmc->Context; in HAL_MMC_IRQHandler()
1574 …if ((__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & MMC_CONTEXT_IT) != 0U)) in HAL_MMC_IRQHandler()
1576 MMC_Read_IT(hmmc); in HAL_MMC_IRQHandler()
1579 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DATAEND) != RESET) in HAL_MMC_IRQHandler()
1581 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_DATAEND); in HAL_MMC_IRQHandler()
1583 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_MMC_IRQHandler()
1587 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_IDMABTC); in HAL_MMC_IRQHandler()
1588 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_IRQHandler()
1592 hmmc->Instance->DLEN = 0; in HAL_MMC_IRQHandler()
1593 hmmc->Instance->DCTRL = 0; in HAL_MMC_IRQHandler()
1594 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA ; in HAL_MMC_IRQHandler()
1599 errorstate = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_IRQHandler()
1602 hmmc->ErrorCode |= errorstate; in HAL_MMC_IRQHandler()
1604 hmmc->ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1606 HAL_MMC_ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1612 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_IRQHandler()
1614 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_IRQHandler()
1618 hmmc->TxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1620 HAL_MMC_TxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1626 hmmc->RxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1628 HAL_MMC_RxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1637 errorstate = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_IRQHandler()
1640 hmmc->ErrorCode |= errorstate; in HAL_MMC_IRQHandler()
1642 hmmc->ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1644 HAL_MMC_ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1650 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_IRQHandler()
1652 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_IRQHandler()
1656 hmmc->RxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1658 HAL_MMC_RxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1664 hmmc->TxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1666 HAL_MMC_TxCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1676 …else if ((__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & MMC_CONTEXT_IT) !… in HAL_MMC_IRQHandler()
1678 MMC_Write_IT(hmmc); in HAL_MMC_IRQHandler()
1681 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL | in HAL_MMC_IRQHandler()
1685 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_DCRCFAIL) != RESET) in HAL_MMC_IRQHandler()
1687 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL; in HAL_MMC_IRQHandler()
1689 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_DTIMEOUT) != RESET) in HAL_MMC_IRQHandler()
1691 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT; in HAL_MMC_IRQHandler()
1693 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_RXOVERR) != RESET) in HAL_MMC_IRQHandler()
1695 hmmc->ErrorCode |= HAL_MMC_ERROR_RX_OVERRUN; in HAL_MMC_IRQHandler()
1697 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_TXUNDERR) != RESET) in HAL_MMC_IRQHandler()
1699 hmmc->ErrorCode |= HAL_MMC_ERROR_TX_UNDERRUN; in HAL_MMC_IRQHandler()
1703 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_IRQHandler()
1706 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_MMC_IRQHandler()
1709 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_IRQHandler()
1710 hmmc->Instance->DCTRL |= SDMMC_DCTRL_FIFORST; in HAL_MMC_IRQHandler()
1711 hmmc->Instance->CMD |= SDMMC_CMD_CMDSTOP; in HAL_MMC_IRQHandler()
1712 hmmc->ErrorCode |= SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_IRQHandler()
1713 hmmc->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP); in HAL_MMC_IRQHandler()
1714 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_DABORT); in HAL_MMC_IRQHandler()
1719 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_IRQHandler()
1721 hmmc->ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1723 HAL_MMC_ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1728 if (hmmc->ErrorCode != HAL_MMC_ERROR_NONE) in HAL_MMC_IRQHandler()
1731 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_IDMABTC); in HAL_MMC_IRQHandler()
1732 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_MMC_IRQHandler()
1735 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_IRQHandler()
1737 hmmc->ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1739 HAL_MMC_ErrorCallback(hmmc); in HAL_MMC_IRQHandler()
1749 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_IDMABTC) != RESET) in HAL_MMC_IRQHandler()
1751 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_IT_IDMABTC); in HAL_MMC_IRQHandler()
1756 hmmc->Write_DMALnkLstBufCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1758 HAL_MMCEx_Write_DMALnkLstBufCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1764 hmmc->Read_DMALnkLstBufCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1766 HAL_MMCEx_Read_DMALnkLstBufCpltCallback(hmmc); in HAL_MMC_IRQHandler()
1782 HAL_MMC_StateTypeDef HAL_MMC_GetState(const MMC_HandleTypeDef *hmmc) in HAL_MMC_GetState() argument
1784 return hmmc->State; in HAL_MMC_GetState()
1793 uint32_t HAL_MMC_GetError(const MMC_HandleTypeDef *hmmc) in HAL_MMC_GetError() argument
1795 return hmmc->ErrorCode; in HAL_MMC_GetError()
1803 __weak void HAL_MMC_TxCpltCallback(MMC_HandleTypeDef *hmmc) in HAL_MMC_TxCpltCallback() argument
1806 UNUSED(hmmc); in HAL_MMC_TxCpltCallback()
1818 __weak void HAL_MMC_RxCpltCallback(MMC_HandleTypeDef *hmmc) in HAL_MMC_RxCpltCallback() argument
1821 UNUSED(hmmc); in HAL_MMC_RxCpltCallback()
1833 __weak void HAL_MMC_ErrorCallback(MMC_HandleTypeDef *hmmc) in HAL_MMC_ErrorCallback() argument
1836 UNUSED(hmmc); in HAL_MMC_ErrorCallback()
1848 __weak void HAL_MMC_AbortCallback(MMC_HandleTypeDef *hmmc) in HAL_MMC_AbortCallback() argument
1851 UNUSED(hmmc); in HAL_MMC_AbortCallback()
1879 HAL_StatusTypeDef HAL_MMC_RegisterCallback(MMC_HandleTypeDef *hmmc, HAL_MMC_CallbackIDTypeDef Callb… in HAL_MMC_RegisterCallback() argument
1887 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_RegisterCallback()
1891 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_RegisterCallback()
1896 hmmc->TxCpltCallback = pCallback; in HAL_MMC_RegisterCallback()
1899 hmmc->RxCpltCallback = pCallback; in HAL_MMC_RegisterCallback()
1902 hmmc->ErrorCallback = pCallback; in HAL_MMC_RegisterCallback()
1905 hmmc->AbortCpltCallback = pCallback; in HAL_MMC_RegisterCallback()
1908 hmmc->Read_DMALnkLstBufCpltCallback = pCallback; in HAL_MMC_RegisterCallback()
1911 hmmc->Write_DMALnkLstBufCpltCallback = pCallback; in HAL_MMC_RegisterCallback()
1914 hmmc->MspInitCallback = pCallback; in HAL_MMC_RegisterCallback()
1917 hmmc->MspDeInitCallback = pCallback; in HAL_MMC_RegisterCallback()
1921 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_RegisterCallback()
1927 else if (hmmc->State == HAL_MMC_STATE_RESET) in HAL_MMC_RegisterCallback()
1932 hmmc->MspInitCallback = pCallback; in HAL_MMC_RegisterCallback()
1935 hmmc->MspDeInitCallback = pCallback; in HAL_MMC_RegisterCallback()
1939 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_RegisterCallback()
1948 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_RegisterCallback()
1975 HAL_StatusTypeDef HAL_MMC_UnRegisterCallback(MMC_HandleTypeDef *hmmc, HAL_MMC_CallbackIDTypeDef Cal… in HAL_MMC_UnRegisterCallback() argument
1979 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_UnRegisterCallback()
1984 hmmc->TxCpltCallback = HAL_MMC_TxCpltCallback; in HAL_MMC_UnRegisterCallback()
1987 hmmc->RxCpltCallback = HAL_MMC_RxCpltCallback; in HAL_MMC_UnRegisterCallback()
1990 hmmc->ErrorCallback = HAL_MMC_ErrorCallback; in HAL_MMC_UnRegisterCallback()
1993 hmmc->AbortCpltCallback = HAL_MMC_AbortCallback; in HAL_MMC_UnRegisterCallback()
1996 hmmc->Read_DMALnkLstBufCpltCallback = HAL_MMCEx_Read_DMALnkLstBufCpltCallback; in HAL_MMC_UnRegisterCallback()
1999 hmmc->Write_DMALnkLstBufCpltCallback = HAL_MMCEx_Write_DMALnkLstBufCpltCallback; in HAL_MMC_UnRegisterCallback()
2002 hmmc->MspInitCallback = HAL_MMC_MspInit; in HAL_MMC_UnRegisterCallback()
2005 hmmc->MspDeInitCallback = HAL_MMC_MspDeInit; in HAL_MMC_UnRegisterCallback()
2009 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_UnRegisterCallback()
2015 else if (hmmc->State == HAL_MMC_STATE_RESET) in HAL_MMC_UnRegisterCallback()
2020 hmmc->MspInitCallback = HAL_MMC_MspInit; in HAL_MMC_UnRegisterCallback()
2023 hmmc->MspDeInitCallback = HAL_MMC_MspDeInit; in HAL_MMC_UnRegisterCallback()
2027 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_UnRegisterCallback()
2036 hmmc->ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK; in HAL_MMC_UnRegisterCallback()
2072 HAL_StatusTypeDef HAL_MMC_GetCardCID(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCIDTypeDef *pCID) in HAL_MMC_GetCardCID() argument
2074 pCID->ManufacturerID = (uint8_t)((hmmc->CID[0] & 0xFF000000U) >> 24U); in HAL_MMC_GetCardCID()
2076 pCID->OEM_AppliID = (uint16_t)((hmmc->CID[0] & 0x00FFFF00U) >> 8U); in HAL_MMC_GetCardCID()
2078 pCID->ProdName1 = (((hmmc->CID[0] & 0x000000FFU) << 24U) | ((hmmc->CID[1] & 0xFFFFFF00U) >> 8U)); in HAL_MMC_GetCardCID()
2080 pCID->ProdName2 = (uint8_t)(hmmc->CID[1] & 0x000000FFU); in HAL_MMC_GetCardCID()
2082 pCID->ProdRev = (uint8_t)((hmmc->CID[2] & 0xFF000000U) >> 24U); in HAL_MMC_GetCardCID()
2084 pCID->ProdSN = (((hmmc->CID[2] & 0x00FFFFFFU) << 8U) | ((hmmc->CID[3] & 0xFF000000U) >> 24U)); in HAL_MMC_GetCardCID()
2086 pCID->Reserved1 = (uint8_t)((hmmc->CID[3] & 0x00F00000U) >> 20U); in HAL_MMC_GetCardCID()
2088 pCID->ManufactDate = (uint16_t)((hmmc->CID[3] & 0x000FFF00U) >> 8U); in HAL_MMC_GetCardCID()
2090 pCID->CID_CRC = (uint8_t)((hmmc->CID[3] & 0x000000FEU) >> 1U); in HAL_MMC_GetCardCID()
2105 HAL_StatusTypeDef HAL_MMC_GetCardCSD(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCSDTypeDef *pCSD) in HAL_MMC_GetCardCSD() argument
2109 pCSD->CSDStruct = (uint8_t)((hmmc->CSD[0] & 0xC0000000U) >> 30U); in HAL_MMC_GetCardCSD()
2111 pCSD->SysSpecVersion = (uint8_t)((hmmc->CSD[0] & 0x3C000000U) >> 26U); in HAL_MMC_GetCardCSD()
2113 pCSD->Reserved1 = (uint8_t)((hmmc->CSD[0] & 0x03000000U) >> 24U); in HAL_MMC_GetCardCSD()
2115 pCSD->TAAC = (uint8_t)((hmmc->CSD[0] & 0x00FF0000U) >> 16U); in HAL_MMC_GetCardCSD()
2117 pCSD->NSAC = (uint8_t)((hmmc->CSD[0] & 0x0000FF00U) >> 8U); in HAL_MMC_GetCardCSD()
2119 pCSD->MaxBusClkFrec = (uint8_t)(hmmc->CSD[0] & 0x000000FFU); in HAL_MMC_GetCardCSD()
2121 pCSD->CardComdClasses = (uint16_t)((hmmc->CSD[1] & 0xFFF00000U) >> 20U); in HAL_MMC_GetCardCSD()
2123 pCSD->RdBlockLen = (uint8_t)((hmmc->CSD[1] & 0x000F0000U) >> 16U); in HAL_MMC_GetCardCSD()
2125 pCSD->PartBlockRead = (uint8_t)((hmmc->CSD[1] & 0x00008000U) >> 15U); in HAL_MMC_GetCardCSD()
2127 pCSD->WrBlockMisalign = (uint8_t)((hmmc->CSD[1] & 0x00004000U) >> 14U); in HAL_MMC_GetCardCSD()
2129 pCSD->RdBlockMisalign = (uint8_t)((hmmc->CSD[1] & 0x00002000U) >> 13U); in HAL_MMC_GetCardCSD()
2131 pCSD->DSRImpl = (uint8_t)((hmmc->CSD[1] & 0x00001000U) >> 12U); in HAL_MMC_GetCardCSD()
2135 if (MMC_ReadExtCSD(hmmc, &block_nbr, 212, 0x0FFFFFFFU) != HAL_OK) /* Field SEC_COUNT [215:212] */ in HAL_MMC_GetCardCSD()
2140 if (hmmc->MmcCard.CardType == MMC_LOW_CAPACITY_CARD) in HAL_MMC_GetCardCSD()
2142 … pCSD->DeviceSize = (((hmmc->CSD[1] & 0x000003FFU) << 2U) | ((hmmc->CSD[2] & 0xC0000000U) >> 30U)); in HAL_MMC_GetCardCSD()
2144 pCSD->MaxRdCurrentVDDMin = (uint8_t)((hmmc->CSD[2] & 0x38000000U) >> 27U); in HAL_MMC_GetCardCSD()
2146 pCSD->MaxRdCurrentVDDMax = (uint8_t)((hmmc->CSD[2] & 0x07000000U) >> 24U); in HAL_MMC_GetCardCSD()
2148 pCSD->MaxWrCurrentVDDMin = (uint8_t)((hmmc->CSD[2] & 0x00E00000U) >> 21U); in HAL_MMC_GetCardCSD()
2150 pCSD->MaxWrCurrentVDDMax = (uint8_t)((hmmc->CSD[2] & 0x001C0000U) >> 18U); in HAL_MMC_GetCardCSD()
2152 pCSD->DeviceSizeMul = (uint8_t)((hmmc->CSD[2] & 0x00038000U) >> 15U); in HAL_MMC_GetCardCSD()
2154 hmmc->MmcCard.BlockNbr = (pCSD->DeviceSize + 1U) ; in HAL_MMC_GetCardCSD()
2155 hmmc->MmcCard.BlockNbr *= (1UL << ((pCSD->DeviceSizeMul & 0x07U) + 2U)); in HAL_MMC_GetCardCSD()
2156 hmmc->MmcCard.BlockSize = (1UL << (pCSD->RdBlockLen & 0x0FU)); in HAL_MMC_GetCardCSD()
2158 …hmmc->MmcCard.LogBlockNbr = (hmmc->MmcCard.BlockNbr) * ((hmmc->MmcCard.BlockSize) / MMC_BLOCKSIZE); in HAL_MMC_GetCardCSD()
2159 hmmc->MmcCard.LogBlockSize = MMC_BLOCKSIZE; in HAL_MMC_GetCardCSD()
2161 else if (hmmc->MmcCard.CardType == MMC_HIGH_CAPACITY_CARD) in HAL_MMC_GetCardCSD()
2163 hmmc->MmcCard.BlockNbr = block_nbr; in HAL_MMC_GetCardCSD()
2164 hmmc->MmcCard.LogBlockNbr = hmmc->MmcCard.BlockNbr; in HAL_MMC_GetCardCSD()
2165 hmmc->MmcCard.BlockSize = MMC_BLOCKSIZE; in HAL_MMC_GetCardCSD()
2166 hmmc->MmcCard.LogBlockSize = hmmc->MmcCard.BlockSize; in HAL_MMC_GetCardCSD()
2171 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardCSD()
2172 hmmc->ErrorCode |= HAL_MMC_ERROR_UNSUPPORTED_FEATURE; in HAL_MMC_GetCardCSD()
2173 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardCSD()
2177 pCSD->EraseGrSize = (uint8_t)((hmmc->CSD[2] & 0x00004000U) >> 14U); in HAL_MMC_GetCardCSD()
2179 pCSD->EraseGrMul = (uint8_t)((hmmc->CSD[2] & 0x00003F80U) >> 7U); in HAL_MMC_GetCardCSD()
2181 pCSD->WrProtectGrSize = (uint8_t)(hmmc->CSD[2] & 0x0000007FU); in HAL_MMC_GetCardCSD()
2183 pCSD->WrProtectGrEnable = (uint8_t)((hmmc->CSD[3] & 0x80000000U) >> 31U); in HAL_MMC_GetCardCSD()
2185 pCSD->ManDeflECC = (uint8_t)((hmmc->CSD[3] & 0x60000000U) >> 29U); in HAL_MMC_GetCardCSD()
2187 pCSD->WrSpeedFact = (uint8_t)((hmmc->CSD[3] & 0x1C000000U) >> 26U); in HAL_MMC_GetCardCSD()
2189 pCSD->MaxWrBlockLen = (uint8_t)((hmmc->CSD[3] & 0x03C00000U) >> 22U); in HAL_MMC_GetCardCSD()
2191 pCSD->WriteBlockPaPartial = (uint8_t)((hmmc->CSD[3] & 0x00200000U) >> 21U); in HAL_MMC_GetCardCSD()
2195 pCSD->ContentProtectAppli = (uint8_t)((hmmc->CSD[3] & 0x00010000U) >> 16U); in HAL_MMC_GetCardCSD()
2197 pCSD->FileFormatGroup = (uint8_t)((hmmc->CSD[3] & 0x00008000U) >> 15U); in HAL_MMC_GetCardCSD()
2199 pCSD->CopyFlag = (uint8_t)((hmmc->CSD[3] & 0x00004000U) >> 14U); in HAL_MMC_GetCardCSD()
2201 pCSD->PermWrProtect = (uint8_t)((hmmc->CSD[3] & 0x00002000U) >> 13U); in HAL_MMC_GetCardCSD()
2203 pCSD->TempWrProtect = (uint8_t)((hmmc->CSD[3] & 0x00001000U) >> 12U); in HAL_MMC_GetCardCSD()
2205 pCSD->FileFormat = (uint8_t)((hmmc->CSD[3] & 0x00000C00U) >> 10U); in HAL_MMC_GetCardCSD()
2207 pCSD->ECC = (uint8_t)((hmmc->CSD[3] & 0x00000300U) >> 8U); in HAL_MMC_GetCardCSD()
2209 pCSD->CSD_CRC = (uint8_t)((hmmc->CSD[3] & 0x000000FEU) >> 1U); in HAL_MMC_GetCardCSD()
2223 HAL_StatusTypeDef HAL_MMC_GetCardInfo(MMC_HandleTypeDef *hmmc, HAL_MMC_CardInfoTypeDef *pCardInfo) in HAL_MMC_GetCardInfo() argument
2225 pCardInfo->CardType = (uint32_t)(hmmc->MmcCard.CardType); in HAL_MMC_GetCardInfo()
2226 pCardInfo->Class = (uint32_t)(hmmc->MmcCard.Class); in HAL_MMC_GetCardInfo()
2227 pCardInfo->RelCardAdd = (uint32_t)(hmmc->MmcCard.RelCardAdd); in HAL_MMC_GetCardInfo()
2228 pCardInfo->BlockNbr = (uint32_t)(hmmc->MmcCard.BlockNbr); in HAL_MMC_GetCardInfo()
2229 pCardInfo->BlockSize = (uint32_t)(hmmc->MmcCard.BlockSize); in HAL_MMC_GetCardInfo()
2230 pCardInfo->LogBlockNbr = (uint32_t)(hmmc->MmcCard.LogBlockNbr); in HAL_MMC_GetCardInfo()
2231 pCardInfo->LogBlockSize = (uint32_t)(hmmc->MmcCard.LogBlockSize); in HAL_MMC_GetCardInfo()
2245 HAL_StatusTypeDef HAL_MMC_GetCardExtCSD(MMC_HandleTypeDef *hmmc, uint32_t *pExtCSD, uint32_t Timeou… in HAL_MMC_GetCardExtCSD() argument
2255 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_GetCardExtCSD()
2259 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_GetCardExtCSD()
2261 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in HAL_MMC_GetCardExtCSD()
2263 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_GetCardExtCSD()
2266 hmmc->Instance->DCTRL = 0; in HAL_MMC_GetCardExtCSD()
2278 (void)SDMMC_ConfigData(hmmc->Instance, &config); in HAL_MMC_GetCardExtCSD()
2279 __SDMMC_CMDTRANS_ENABLE(hmmc->Instance); in HAL_MMC_GetCardExtCSD()
2282 errorstate = SDMMC_CmdSendEXTCSD(hmmc->Instance, 0); in HAL_MMC_GetCardExtCSD()
2286 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardExtCSD()
2287 hmmc->ErrorCode |= errorstate; in HAL_MMC_GetCardExtCSD()
2288 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2293 while (!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXOVERR | in HAL_MMC_GetCardExtCSD()
2296 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXFIFOHF)) in HAL_MMC_GetCardExtCSD()
2301 *tmp_buf = SDMMC_ReadFIFO(hmmc->Instance); in HAL_MMC_GetCardExtCSD()
2309 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardExtCSD()
2310 hmmc->ErrorCode |= HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_GetCardExtCSD()
2311 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2316 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_GetCardExtCSD()
2319 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DTIMEOUT)) in HAL_MMC_GetCardExtCSD()
2322 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardExtCSD()
2323 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT; in HAL_MMC_GetCardExtCSD()
2324 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2327 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL)) in HAL_MMC_GetCardExtCSD()
2330 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardExtCSD()
2331 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL; in HAL_MMC_GetCardExtCSD()
2332 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2335 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXOVERR)) in HAL_MMC_GetCardExtCSD()
2338 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_GetCardExtCSD()
2339 hmmc->ErrorCode |= HAL_MMC_ERROR_RX_OVERRUN; in HAL_MMC_GetCardExtCSD()
2340 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2349 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_GetCardExtCSD()
2350 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetCardExtCSD()
2367 HAL_StatusTypeDef HAL_MMC_ConfigWideBusOperation(MMC_HandleTypeDef *hmmc, uint32_t WideMode) in HAL_MMC_ConfigWideBusOperation() argument
2378 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ConfigWideBusOperation()
2381 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_BUSSPEED) != 0U) in HAL_MMC_ConfigWideBusOperation()
2383 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_DDR) != 0U) in HAL_MMC_ConfigWideBusOperation()
2385 errorstate = MMC_PwrClassUpdate(hmmc, WideMode, SDMMC_SPEED_MODE_DDR); in HAL_MMC_ConfigWideBusOperation()
2389 errorstate = MMC_PwrClassUpdate(hmmc, WideMode, SDMMC_SPEED_MODE_HIGH); in HAL_MMC_ConfigWideBusOperation()
2394 errorstate = MMC_PwrClassUpdate(hmmc, WideMode, SDMMC_SPEED_MODE_DEFAULT); in HAL_MMC_ConfigWideBusOperation()
2401 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70200U); in HAL_MMC_ConfigWideBusOperation()
2405 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70100U); in HAL_MMC_ConfigWideBusOperation()
2409 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70000U); in HAL_MMC_ConfigWideBusOperation()
2424 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in HAL_MMC_ConfigWideBusOperation()
2431 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_ConfigWideBusOperation()
2446 Init = hmmc->Init; in HAL_MMC_ConfigWideBusOperation()
2448 (void)SDMMC_Init(hmmc->Instance, Init); in HAL_MMC_ConfigWideBusOperation()
2463 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ConfigWideBusOperation()
2468 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ConfigWideBusOperation()
2469 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigWideBusOperation()
2488 HAL_StatusTypeDef HAL_MMC_ConfigSpeedBusOperation(MMC_HandleTypeDef *hmmc, uint32_t SpeedMode) in HAL_MMC_ConfigSpeedBusOperation() argument
2499 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ConfigSpeedBusOperation()
2502 device_type = (hmmc->Ext_CSD[49] & 0x000000FFU); in HAL_MMC_ConfigSpeedBusOperation()
2508 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS) != 0U) && ((device_type & 0x04U) != 0U)) in HAL_MMC_ConfigSpeedBusOperation()
2511 errorstate = MMC_HighSpeed(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2514 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2518 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_CLKDIV) != 0U) in HAL_MMC_ConfigSpeedBusOperation()
2521 errorstate = MMC_DDR_Mode(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2524 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2532 errorstate = MMC_HighSpeed(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2535 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2546 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS) != 0U) && ((device_type & 0x04U) != 0U)) in HAL_MMC_ConfigSpeedBusOperation()
2549 errorstate = MMC_HighSpeed(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2552 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2556 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_CLKDIV) != 0U) in HAL_MMC_ConfigSpeedBusOperation()
2559 errorstate = MMC_DDR_Mode(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2562 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2570 hmmc->ErrorCode |= HAL_MMC_ERROR_UNSUPPORTED_FEATURE; in HAL_MMC_ConfigSpeedBusOperation()
2580 errorstate = MMC_HighSpeed(hmmc, ENABLE); in HAL_MMC_ConfigSpeedBusOperation()
2583 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2589 hmmc->ErrorCode |= HAL_MMC_ERROR_UNSUPPORTED_FEATURE; in HAL_MMC_ConfigSpeedBusOperation()
2596 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_DDR) != 0U) in HAL_MMC_ConfigSpeedBusOperation()
2599 errorstate = MMC_DDR_Mode(hmmc, DISABLE); in HAL_MMC_ConfigSpeedBusOperation()
2602 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2605 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_BUSSPEED) != 0U) in HAL_MMC_ConfigSpeedBusOperation()
2608 errorstate = MMC_HighSpeed(hmmc, DISABLE); in HAL_MMC_ConfigSpeedBusOperation()
2611 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSpeedBusOperation()
2617 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_ConfigSpeedBusOperation()
2624 while ((HAL_MMC_GetCardState(hmmc) != HAL_MMC_CARD_TRANSFER)) in HAL_MMC_ConfigSpeedBusOperation()
2628 hmmc->ErrorCode = HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_ConfigSpeedBusOperation()
2629 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ConfigSpeedBusOperation()
2635 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ConfigSpeedBusOperation()
2644 HAL_MMC_CardStateTypeDef HAL_MMC_GetCardState(MMC_HandleTypeDef *hmmc) in HAL_MMC_GetCardState() argument
2650 errorstate = MMC_SendStatus(hmmc, &resp1); in HAL_MMC_GetCardState()
2653 hmmc->ErrorCode |= errorstate; in HAL_MMC_GetCardState()
2667 HAL_StatusTypeDef HAL_MMC_Abort(MMC_HandleTypeDef *hmmc) in HAL_MMC_Abort() argument
2672 if (hmmc->State == HAL_MMC_STATE_BUSY) in HAL_MMC_Abort()
2675 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_MMC_Abort()
2677 __SDMMC_CMDTRANS_DISABLE(hmmc->Instance); in HAL_MMC_Abort()
2685 hmmc->ErrorCode = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_Abort()
2686 error_code = hmmc->ErrorCode; in HAL_MMC_Abort()
2693 if ((hmmc->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_CARD) in HAL_MMC_Abort()
2695 if (hmmc->ErrorCode == HAL_MMC_ERROR_NONE) in HAL_MMC_Abort()
2697 while (!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DABORT | SDMMC_FLAG_BUSYD0END)) in HAL_MMC_Abort()
2701 hmmc->ErrorCode = HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_Abort()
2702 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Abort()
2708 if (hmmc->ErrorCode == HAL_MMC_ERROR_CMD_RSP_TIMEOUT) in HAL_MMC_Abort()
2710 while (!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DATAEND)) in HAL_MMC_Abort()
2714 hmmc->ErrorCode = HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_Abort()
2715 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Abort()
2721 else if ((hmmc->Instance->DCTRL & SDMMC_DCTRL_DTDIR) == SDMMC_TRANSFER_DIR_TO_SDMMC) in HAL_MMC_Abort()
2723 while (!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DABORT | SDMMC_FLAG_DATAEND)) in HAL_MMC_Abort()
2727 hmmc->ErrorCode = HAL_MMC_ERROR_TIMEOUT; in HAL_MMC_Abort()
2728 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Abort()
2744 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_Abort()
2745 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_Abort()
2747 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_MMC_Abort()
2749 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Abort()
2752 hmmc->Context = MMC_CONTEXT_NONE; in HAL_MMC_Abort()
2762 HAL_StatusTypeDef HAL_MMC_Abort_IT(MMC_HandleTypeDef *hmmc) in HAL_MMC_Abort_IT() argument
2767 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | \ in HAL_MMC_Abort_IT()
2771 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA; in HAL_MMC_Abort_IT()
2774 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in HAL_MMC_Abort_IT()
2776 CardState = HAL_MMC_GetCardState(hmmc); in HAL_MMC_Abort_IT()
2777 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Abort_IT()
2781 hmmc->ErrorCode = SDMMC_CmdStopTransfer(hmmc->Instance); in HAL_MMC_Abort_IT()
2783 if (hmmc->ErrorCode != HAL_MMC_ERROR_NONE) in HAL_MMC_Abort_IT()
2790 hmmc->AbortCpltCallback(hmmc); in HAL_MMC_Abort_IT()
2792 HAL_MMC_AbortCallback(hmmc); in HAL_MMC_Abort_IT()
2818 HAL_StatusTypeDef HAL_MMC_EraseSequence(MMC_HandleTypeDef *hmmc, uint32_t EraseType, in HAL_MMC_EraseSequence() argument
2832 hmmc->ErrorCode |= HAL_MMC_ERROR_PARAM; in HAL_MMC_EraseSequence()
2837 if (end_add > (hmmc->MmcCard.LogBlockNbr)) in HAL_MMC_EraseSequence()
2839 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_OUT_OF_RANGE; in HAL_MMC_EraseSequence()
2844 …if (((hmmc->Ext_CSD[(MMC_EXT_CSD_DATA_SEC_SIZE_INDEX / 4)] >> MMC_EXT_CSD_DATA_SEC_SIZE_POS) & 0x0… in HAL_MMC_EraseSequence()
2849 hmmc->ErrorCode |= HAL_MMC_ERROR_ADDR_MISALIGNED; in HAL_MMC_EraseSequence()
2855 if (((hmmc->MmcCard.Class) & SDMMC_CCCC_ERASE) == 0U) in HAL_MMC_EraseSequence()
2857 hmmc->ErrorCode |= HAL_MMC_ERROR_REQUEST_NOT_APPLICABLE; in HAL_MMC_EraseSequence()
2862 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_EraseSequence()
2865 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_EraseSequence()
2868 if ((SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED) in HAL_MMC_EraseSequence()
2870 hmmc->ErrorCode |= HAL_MMC_ERROR_LOCK_UNLOCK_FAILED; in HAL_MMC_EraseSequence()
2871 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_EraseSequence()
2876 if ((hmmc->MmcCard.CardType) != MMC_HIGH_CAPACITY_CARD) in HAL_MMC_EraseSequence()
2883 errorstate = SDMMC_CmdEraseStartAdd(hmmc->Instance, start_add); in HAL_MMC_EraseSequence()
2887 errorstate = SDMMC_CmdEraseEndAdd(hmmc->Instance, end_add); in HAL_MMC_EraseSequence()
2891 errorstate = SDMMC_CmdErase(hmmc->Instance, EraseType); in HAL_MMC_EraseSequence()
2897 … while ((!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_BUSYD0END)) && (errorstate == HAL_MMC_ERROR_NONE)) in HAL_MMC_EraseSequence()
2906 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_EraseSequence()
2913 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_EraseSequence()
2919 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_EraseSequence()
2920 hmmc->ErrorCode |= errorstate; in HAL_MMC_EraseSequence()
2949 HAL_StatusTypeDef HAL_MMC_Sanitize(MMC_HandleTypeDef *hmmc) in HAL_MMC_Sanitize() argument
2957 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_Sanitize()
2960 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_Sanitize()
2963 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03A50100U); in HAL_MMC_Sanitize()
2967 … while ((!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_BUSYD0END)) && (errorstate == HAL_MMC_ERROR_NONE)) in HAL_MMC_Sanitize()
2976 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_Sanitize()
2984 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in HAL_MMC_Sanitize()
2991 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_Sanitize()
3016 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_Sanitize()
3022 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_Sanitize()
3023 hmmc->ErrorCode |= errorstate; in HAL_MMC_Sanitize()
3060 HAL_StatusTypeDef HAL_MMC_ConfigSecRemovalType(MMC_HandleTypeDef *hmmc, uint32_t SRTMode) in HAL_MMC_ConfigSecRemovalType() argument
3071 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_ConfigSecRemovalType()
3074 if (HAL_MMC_GetSupportedSecRemovalType(hmmc, &srt) == HAL_OK) in HAL_MMC_ConfigSecRemovalType()
3077 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_ConfigSecRemovalType()
3084 errorstate = SDMMC_CmdSwitch(hmmc->Instance, (0x03100000U | (srt << 8U))); in HAL_MMC_ConfigSecRemovalType()
3091 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in HAL_MMC_ConfigSecRemovalType()
3098 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_ConfigSecRemovalType()
3127 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_ConfigSecRemovalType()
3138 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_ConfigSecRemovalType()
3139 hmmc->ErrorCode |= errorstate; in HAL_MMC_ConfigSecRemovalType()
3166 HAL_StatusTypeDef HAL_MMC_GetSupportedSecRemovalType(MMC_HandleTypeDef *hmmc, uint32_t *SupportedSR… in HAL_MMC_GetSupportedSecRemovalType() argument
3169 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_GetSupportedSecRemovalType()
3172 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_GetSupportedSecRemovalType()
3175 *SupportedSRT = (hmmc->Ext_CSD[4] & 0x0000000FU); /* Bits [3:0] of field 16 */ in HAL_MMC_GetSupportedSecRemovalType()
3178 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_GetSupportedSecRemovalType()
3193 HAL_StatusTypeDef HAL_MMC_SleepDevice(MMC_HandleTypeDef *hmmc) in HAL_MMC_SleepDevice() argument
3203 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_SleepDevice()
3206 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_SleepDevice()
3209 errorstate = SDMMC_CmdSwitch(hmmc->Instance, (0x03220100U)); in HAL_MMC_SleepDevice()
3216 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in HAL_MMC_SleepDevice()
3223 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_SleepDevice()
3242 errorstate = SDMMC_CmdSwitch(hmmc->Instance, (0x03220400U)); in HAL_MMC_SleepDevice()
3246 sleep_timeout = ((hmmc->Ext_CSD[(MMC_EXT_CSD_SLEEP_NOTIFICATION_TIME_INDEX / 4)] >> in HAL_MMC_SleepDevice()
3258 … while ((!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_BUSYD0END)) && (errorstate == HAL_MMC_ERROR_NONE)) in HAL_MMC_SleepDevice()
3267 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_SleepDevice()
3275 errorstate = SDMMC_CmdSendStatus(hmmc->Instance, in HAL_MMC_SleepDevice()
3276 … (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) << 16U)); in HAL_MMC_SleepDevice()
3283 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_SleepDevice()
3302 (void)SDMMC_CmdSelDesel(hmmc->Instance, 0U); in HAL_MMC_SleepDevice()
3305 sleep_timeout = ((hmmc->Ext_CSD[(MMC_EXT_CSD_S_A_TIMEOUT_INDEX / 4)] >> in HAL_MMC_SleepDevice()
3316 if (HAL_MMC_GetCardState(hmmc) == HAL_MMC_CARD_STANDBY) in HAL_MMC_SleepDevice()
3319 errorstate = SDMMC_CmdSleepMmc(hmmc->Instance, in HAL_MMC_SleepDevice()
3320 … ((hmmc->MmcCard.RelCardAdd << 16U) | (0x1U << 15U))); in HAL_MMC_SleepDevice()
3324 … while ((!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_BUSYD0END)) && (errorstate == HAL_MMC_ERROR_NONE)) in HAL_MMC_SleepDevice()
3333 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_SleepDevice()
3357 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_SleepDevice()
3363 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_SleepDevice()
3364 hmmc->ErrorCode |= errorstate; in HAL_MMC_SleepDevice()
3391 HAL_StatusTypeDef HAL_MMC_AwakeDevice(MMC_HandleTypeDef *hmmc) in HAL_MMC_AwakeDevice() argument
3401 if (hmmc->State == HAL_MMC_STATE_READY) in HAL_MMC_AwakeDevice()
3404 hmmc->State = HAL_MMC_STATE_BUSY; in HAL_MMC_AwakeDevice()
3407 …sleep_timeout = ((hmmc->Ext_CSD[(MMC_EXT_CSD_S_A_TIMEOUT_INDEX / 4)] >> MMC_EXT_CSD_S_A_TIMEOUT_PO… in HAL_MMC_AwakeDevice()
3419 errorstate = SDMMC_CmdSleepMmc(hmmc->Instance, (hmmc->MmcCard.RelCardAdd << 16U)); in HAL_MMC_AwakeDevice()
3423 … while ((!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_BUSYD0END)) && (errorstate == HAL_MMC_ERROR_NONE)) in HAL_MMC_AwakeDevice()
3432 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_BUSYD0END); in HAL_MMC_AwakeDevice()
3436 if (HAL_MMC_GetCardState(hmmc) == HAL_MMC_CARD_STANDBY) in HAL_MMC_AwakeDevice()
3439 errorstate = SDMMC_CmdSelDesel(hmmc->Instance, (hmmc->MmcCard.RelCardAdd << 16U)); in HAL_MMC_AwakeDevice()
3442 if (HAL_MMC_GetCardState(hmmc) == HAL_MMC_CARD_TRANSFER) in HAL_MMC_AwakeDevice()
3445 errorstate = SDMMC_CmdSwitch(hmmc->Instance, (0x03220100U)); in HAL_MMC_AwakeDevice()
3452 errorstate = SDMMC_CmdSendStatus(hmmc->Instance, in HAL_MMC_AwakeDevice()
3453 … (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) << 16U)); in HAL_MMC_AwakeDevice()
3460 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in HAL_MMC_AwakeDevice()
3497 hmmc->State = HAL_MMC_STATE_READY; in HAL_MMC_AwakeDevice()
3503 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in HAL_MMC_AwakeDevice()
3504 hmmc->ErrorCode |= errorstate; in HAL_MMC_AwakeDevice()
3543 static uint32_t MMC_InitCard(MMC_HandleTypeDef *hmmc) in MMC_InitCard() argument
3551 if (SDMMC_GetPowerState(hmmc->Instance) == 0U) in MMC_InitCard()
3558 errorstate = SDMMC_CmdSendCID(hmmc->Instance); in MMC_InitCard()
3566 hmmc->CID[0U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_InitCard()
3567 hmmc->CID[1U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP2); in MMC_InitCard()
3568 hmmc->CID[2U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP3); in MMC_InitCard()
3569 hmmc->CID[3U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP4); in MMC_InitCard()
3574 errorstate = SDMMC_CmdSetRelAddMmc(hmmc->Instance, mmc_rca); in MMC_InitCard()
3581 hmmc->MmcCard.RelCardAdd = mmc_rca; in MMC_InitCard()
3584 errorstate = SDMMC_CmdSendCSD(hmmc->Instance, (uint32_t)(hmmc->MmcCard.RelCardAdd << 16U)); in MMC_InitCard()
3592 hmmc->CSD[0U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_InitCard()
3593 hmmc->CSD[1U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP2); in MMC_InitCard()
3594 hmmc->CSD[2U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP3); in MMC_InitCard()
3595 hmmc->CSD[3U] = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP4); in MMC_InitCard()
3599 hmmc->MmcCard.Class = (SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP2) >> 20U); in MMC_InitCard()
3602 …errorstate = SDMMC_CmdSelDesel(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) << … in MMC_InitCard()
3609 if (HAL_MMC_GetCardCSD(hmmc, &CSD) != HAL_OK) in MMC_InitCard()
3611 return hmmc->ErrorCode; in MMC_InitCard()
3615 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_InitCard()
3618 hmmc->ErrorCode |= errorstate; in MMC_InitCard()
3622 if (HAL_MMC_GetCardExtCSD(hmmc, hmmc->Ext_CSD, SDMMC_DATATIMEOUT) != HAL_OK) in MMC_InitCard()
3624 return hmmc->ErrorCode; in MMC_InitCard()
3628 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_InitCard()
3631 hmmc->ErrorCode |= errorstate; in MMC_InitCard()
3635 Init = hmmc->Init; in MMC_InitCard()
3637 (void)SDMMC_Init(hmmc->Instance, Init); in MMC_InitCard()
3650 static uint32_t MMC_PowerON(MMC_HandleTypeDef *hmmc) in MMC_PowerON() argument
3658 errorstate = SDMMC_CmdGoIdleState(hmmc->Instance); in MMC_PowerON()
3672 errorstate = SDMMC_CmdOpCondition(hmmc->Instance, MMC_VOLTAGE_RANGE); in MMC_PowerON()
3679 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_PowerON()
3688 hmmc->MmcCard.CardType = MMC_HIGH_CAPACITY_CARD; in MMC_PowerON()
3692 hmmc->MmcCard.CardType = MMC_LOW_CAPACITY_CARD; in MMC_PowerON()
3703 static void MMC_PowerOFF(MMC_HandleTypeDef *hmmc) in MMC_PowerOFF() argument
3706 (void)SDMMC_PowerState_OFF(hmmc->Instance); in MMC_PowerOFF()
3716 static uint32_t MMC_SendStatus(MMC_HandleTypeDef *hmmc, uint32_t *pCardStatus) in MMC_SendStatus() argument
3726 errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(hmmc->MmcCard.RelCardAdd << 16U)); in MMC_SendStatus()
3733 *pCardStatus = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_SendStatus()
3746 static HAL_StatusTypeDef MMC_ReadExtCSD(MMC_HandleTypeDef *hmmc, uint32_t *pFieldData, in MMC_ReadExtCSD() argument
3756 hmmc->ErrorCode = HAL_MMC_ERROR_NONE; in MMC_ReadExtCSD()
3759 hmmc->Instance->DCTRL = 0; in MMC_ReadExtCSD()
3768 (void)SDMMC_ConfigData(hmmc->Instance, &config); in MMC_ReadExtCSD()
3771 errorstate = SDMMC_CmdSendEXTCSD(hmmc->Instance, 0); in MMC_ReadExtCSD()
3775 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in MMC_ReadExtCSD()
3776 hmmc->ErrorCode |= errorstate; in MMC_ReadExtCSD()
3777 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3782 while (!__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | in MMC_ReadExtCSD()
3785 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXFIFOHF)) in MMC_ReadExtCSD()
3790 tmp_data = SDMMC_ReadFIFO(hmmc->Instance); in MMC_ReadExtCSD()
3804 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in MMC_ReadExtCSD()
3805 hmmc->ErrorCode |= HAL_MMC_ERROR_TIMEOUT; in MMC_ReadExtCSD()
3806 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3812 if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DTIMEOUT)) in MMC_ReadExtCSD()
3815 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in MMC_ReadExtCSD()
3816 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT; in MMC_ReadExtCSD()
3817 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3820 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL)) in MMC_ReadExtCSD()
3823 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in MMC_ReadExtCSD()
3824 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL; in MMC_ReadExtCSD()
3825 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3828 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXOVERR)) in MMC_ReadExtCSD()
3831 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_FLAGS); in MMC_ReadExtCSD()
3832 hmmc->ErrorCode |= HAL_MMC_ERROR_RX_OVERRUN; in MMC_ReadExtCSD()
3833 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3842 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_ReadExtCSD()
3845 hmmc->ErrorCode |= errorstate; in MMC_ReadExtCSD()
3849 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS); in MMC_ReadExtCSD()
3851 hmmc->State = HAL_MMC_STATE_READY; in MMC_ReadExtCSD()
3862 static void MMC_Read_IT(MMC_HandleTypeDef *hmmc) in MMC_Read_IT() argument
3868 tmp = hmmc->pRxBuffPtr; in MMC_Read_IT()
3870 if (hmmc->RxXferSize >= SDMMC_FIFO_SIZE) in MMC_Read_IT()
3875 data = SDMMC_ReadFIFO(hmmc->Instance); in MMC_Read_IT()
3886 hmmc->pRxBuffPtr = tmp; in MMC_Read_IT()
3887 hmmc->RxXferSize -= SDMMC_FIFO_SIZE; in MMC_Read_IT()
3897 static void MMC_Write_IT(MMC_HandleTypeDef *hmmc) in MMC_Write_IT() argument
3903 tmp = hmmc->pTxBuffPtr; in MMC_Write_IT()
3905 if (hmmc->TxXferSize >= SDMMC_FIFO_SIZE) in MMC_Write_IT()
3918 (void)SDMMC_WriteFIFO(hmmc->Instance, &data); in MMC_Write_IT()
3921 hmmc->pTxBuffPtr = tmp; in MMC_Write_IT()
3922 hmmc->TxXferSize -= SDMMC_FIFO_SIZE; in MMC_Write_IT()
3932 static uint32_t MMC_HighSpeed(MMC_HandleTypeDef *hmmc, FunctionalState state) in MMC_HighSpeed() argument
3940 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_BUSSPEED) != 0U) && (state == DISABLE)) in MMC_HighSpeed()
3942 …errorstate = MMC_PwrClassUpdate(hmmc, (hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS), SDMMC_SPEED_MO… in MMC_HighSpeed()
3946 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B90000U); in MMC_HighSpeed()
3950 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_BUSSPEED) == 0U) && (state != DISABLE)) in MMC_HighSpeed()
3952 …errorstate = MMC_PwrClassUpdate(hmmc, (hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS), SDMMC_SPEED_MO… in MMC_HighSpeed()
3956 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B90100U); in MMC_HighSpeed()
3966 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_HighSpeed()
3973 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_HighSpeed()
3988 Init.ClockEdge = hmmc->Init.ClockEdge; in MMC_HighSpeed()
3989 Init.ClockPowerSave = hmmc->Init.ClockPowerSave; in MMC_HighSpeed()
3990 Init.BusWide = (hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS); in MMC_HighSpeed()
3991 Init.HardwareFlowControl = hmmc->Init.HardwareFlowControl; in MMC_HighSpeed()
3995 Init.ClockDiv = hmmc->Init.ClockDiv; in MMC_HighSpeed()
3996 (void)SDMMC_Init(hmmc->Instance, Init); in MMC_HighSpeed()
3998 CLEAR_BIT(hmmc->Instance->CLKCR, SDMMC_CLKCR_BUSSPEED); in MMC_HighSpeed()
4003 if (hmmc->Instance == SDMMC1) in MMC_HighSpeed()
4008 else if (hmmc->Instance == SDMMC2) in MMC_HighSpeed()
4032 (void)SDMMC_Init(hmmc->Instance, Init); in MMC_HighSpeed()
4034 SET_BIT(hmmc->Instance->CLKCR, SDMMC_CLKCR_BUSSPEED); in MMC_HighSpeed()
4058 static uint32_t MMC_DDR_Mode(MMC_HandleTypeDef *hmmc, FunctionalState state) in MMC_DDR_Mode() argument
4064 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_DDR) != 0U) && (state == DISABLE)) in MMC_DDR_Mode()
4066 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS_0) != 0U) in MMC_DDR_Mode()
4068 errorstate = MMC_PwrClassUpdate(hmmc, SDMMC_BUS_WIDE_4B, SDMMC_SPEED_MODE_HIGH); in MMC_DDR_Mode()
4072 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70100U); in MMC_DDR_Mode()
4077 errorstate = MMC_PwrClassUpdate(hmmc, SDMMC_BUS_WIDE_8B, SDMMC_SPEED_MODE_HIGH); in MMC_DDR_Mode()
4081 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70200U); in MMC_DDR_Mode()
4086 if (((hmmc->Instance->CLKCR & SDMMC_CLKCR_DDR) == 0U) && (state != DISABLE)) in MMC_DDR_Mode()
4088 if ((hmmc->Instance->CLKCR & SDMMC_CLKCR_WIDBUS_0) != 0U) in MMC_DDR_Mode()
4090 errorstate = MMC_PwrClassUpdate(hmmc, SDMMC_BUS_WIDE_4B, SDMMC_SPEED_MODE_DDR); in MMC_DDR_Mode()
4094 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70500U); in MMC_DDR_Mode()
4099 errorstate = MMC_PwrClassUpdate(hmmc, SDMMC_BUS_WIDE_8B, SDMMC_SPEED_MODE_DDR); in MMC_DDR_Mode()
4103 errorstate = SDMMC_CmdSwitch(hmmc->Instance, 0x03B70600U); in MMC_DDR_Mode()
4114 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_DDR_Mode()
4121 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_DDR_Mode()
4138 CLEAR_BIT(hmmc->Instance->CLKCR, SDMMC_CLKCR_DDR); in MMC_DDR_Mode()
4142 SET_BIT(hmmc->Instance->CLKCR, SDMMC_CLKCR_DDR); in MMC_DDR_Mode()
4166 static uint32_t MMC_PwrClassUpdate(MMC_HandleTypeDef *hmmc, uint32_t Wide, uint32_t Speed) in MMC_PwrClassUpdate() argument
4179 …if (MMC_ReadExtCSD(hmmc, &power_class, 187, SDMMC_DATATIMEOUT) != HAL_OK) /* Field POWER_CLASS [18… in MMC_PwrClassUpdate()
4192 …supported_pwr_class = ((hmmc->Ext_CSD[(MMC_EXT_CSD_PWR_CL_DDR_52_INDEX / 4)] >> MMC_EXT_CSD_PWR_CL… in MMC_PwrClassUpdate()
4198 …supported_pwr_class = ((hmmc->Ext_CSD[(MMC_EXT_CSD_PWR_CL_52_INDEX / 4)] >> MMC_EXT_CSD_PWR_CL_52_… in MMC_PwrClassUpdate()
4204 …supported_pwr_class = ((hmmc->Ext_CSD[(MMC_EXT_CSD_PWR_CL_26_INDEX / 4)] >> MMC_EXT_CSD_PWR_CL_26_… in MMC_PwrClassUpdate()
4219 …errorstate = SDMMC_CmdSwitch(hmmc->Instance, (0x03BB0000U | ((supported_pwr_class & 0x0FU) << 8U))… in MMC_PwrClassUpdate()
4227 …errorstate = SDMMC_CmdSendStatus(hmmc->Instance, (uint32_t)(((uint32_t)hmmc->MmcCard.RelCardAdd) <… in MMC_PwrClassUpdate()
4234 response = SDMMC_GetResponse(hmmc->Instance, SDMMC_RESP1); in MMC_PwrClassUpdate()
4268 __weak void HAL_MMCEx_Read_DMALnkLstBufCpltCallback(MMC_HandleTypeDef *hmmc) in HAL_MMCEx_Read_DMALnkLstBufCpltCallback() argument
4271 UNUSED(hmmc); in HAL_MMCEx_Read_DMALnkLstBufCpltCallback()
4282 __weak void HAL_MMCEx_Write_DMALnkLstBufCpltCallback(MMC_HandleTypeDef *hmmc) in HAL_MMCEx_Write_DMALnkLstBufCpltCallback() argument
4285 UNUSED(hmmc); in HAL_MMCEx_Write_DMALnkLstBufCpltCallback()