271 #ifdef HAL_SD_MODULE_ENABLED
292 static uint32_t SD_SendSDStatus(
SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
293 static uint32_t SD_SendStatus(
SD_HandleTypeDef *hsd, uint32_t *pCardStatus);
344 assert_param(IS_SDIO_ALL_INSTANCE(hsd->Instance));
345 assert_param(IS_SDIO_CLOCK_EDGE(hsd->Init.ClockEdge));
346 assert_param(IS_SDIO_CLOCK_BYPASS(hsd->Init.ClockBypass));
347 assert_param(IS_SDIO_CLOCK_POWER_SAVE(hsd->Init.ClockPowerSave));
348 assert_param(IS_SDIO_BUS_WIDE(hsd->Init.BusWide));
349 assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(hsd->Init.HardwareFlowControl));
350 assert_param(IS_SDIO_CLKDIV(hsd->Init.ClockDiv));
352 if(hsd->State == HAL_SD_STATE_RESET)
355 hsd->Lock = HAL_UNLOCKED;
356 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
363 if(hsd->MspInitCallback == NULL)
369 hsd->MspInitCallback(hsd);
376 hsd->State = HAL_SD_STATE_BUSY;
385 hsd->ErrorCode = HAL_SD_ERROR_NONE;
388 hsd->Context = SD_CONTEXT_NONE;
391 hsd->State = HAL_SD_STATE_READY;
406 HAL_StatusTypeDef status;
410 Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
411 Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
412 Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
413 Init.BusWide = SDIO_BUS_WIDE_1B;
414 Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
415 Init.ClockDiv = SDIO_INIT_CLK_DIV;
425 __HAL_SD_DISABLE(hsd);
431 __HAL_SD_ENABLE(hsd);
437 errorstate = SD_PowerON(hsd);
438 if(errorstate != HAL_SD_ERROR_NONE)
440 hsd->State = HAL_SD_STATE_READY;
441 hsd->ErrorCode |= errorstate;
446 errorstate = SD_InitCard(hsd);
447 if(errorstate != HAL_SD_ERROR_NONE)
449 hsd->State = HAL_SD_STATE_READY;
450 hsd->ErrorCode |= errorstate;
456 if(errorstate != HAL_SD_ERROR_NONE)
459 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
460 hsd->ErrorCode |= errorstate;
461 hsd->State = HAL_SD_STATE_READY;
482 assert_param(IS_SDIO_ALL_INSTANCE(hsd->Instance));
484 hsd->State = HAL_SD_STATE_BUSY;
489 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
490 if(hsd->MspDeInitCallback == NULL)
496 hsd->MspDeInitCallback(hsd);
502 hsd->ErrorCode = HAL_SD_ERROR_NONE;
503 hsd->State = HAL_SD_STATE_RESET;
575 uint32_t count, data, dataremaining;
576 uint32_t add = BlockAdd;
577 uint8_t *tempbuff = pData;
581 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
585 if(hsd->State == HAL_SD_STATE_READY)
587 hsd->ErrorCode = HAL_SD_ERROR_NONE;
589 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
591 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
595 hsd->State = HAL_SD_STATE_BUSY;
598 hsd->Instance->DCTRL = 0U;
600 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
607 config.
DataLength = NumberOfBlocks * BLOCKSIZE;
611 config.
DPSM = SDIO_DPSM_ENABLE;
615 if(NumberOfBlocks > 1U)
617 hsd->Context = SD_CONTEXT_READ_MULTIPLE_BLOCK;
624 hsd->Context = SD_CONTEXT_READ_SINGLE_BLOCK;
629 if(errorstate != HAL_SD_ERROR_NONE)
632 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
633 hsd->ErrorCode |= errorstate;
634 hsd->State = HAL_SD_STATE_READY;
635 hsd->Context = SD_CONTEXT_NONE;
641 #if defined(SDIO_STA_STBITERR)
642 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))
644 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
647 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) && (dataremaining > 0U))
650 for(count = 0U; count < 8U; count++)
653 *tempbuff = (uint8_t)(data & 0xFFU);
656 *tempbuff = (uint8_t)((data >> 8U) & 0xFFU);
659 *tempbuff = (uint8_t)((data >> 16U) & 0xFFU);
662 *tempbuff = (uint8_t)((data >> 24U) & 0xFFU);
668 if(((
HAL_GetTick()-tickstart) >= Timeout) || (Timeout == 0U))
671 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
672 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT;
673 hsd->State= HAL_SD_STATE_READY;
674 hsd->Context = SD_CONTEXT_NONE;
680 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U))
682 if(hsd->SdCard.CardType != CARD_SECURED)
686 if(errorstate != HAL_SD_ERROR_NONE)
689 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
690 hsd->ErrorCode |= errorstate;
691 hsd->State = HAL_SD_STATE_READY;
692 hsd->Context = SD_CONTEXT_NONE;
699 #if defined(SDIO_STA_STBITERR)
700 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR)))
702 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT))
706 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
707 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT;
708 hsd->State = HAL_SD_STATE_READY;
709 hsd->Context = SD_CONTEXT_NONE;
712 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL))
715 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
716 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL;
717 hsd->State = HAL_SD_STATE_READY;
718 hsd->Context = SD_CONTEXT_NONE;
721 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR))
724 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
725 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN;
726 hsd->State = HAL_SD_STATE_READY;
727 hsd->Context = SD_CONTEXT_NONE;
736 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) && (dataremaining > 0U))
739 *tempbuff = (uint8_t)(data & 0xFFU);
742 *tempbuff = (uint8_t)((data >> 8U) & 0xFFU);
745 *tempbuff = (uint8_t)((data >> 16U) & 0xFFU);
748 *tempbuff = (uint8_t)((data >> 24U) & 0xFFU);
752 if(((
HAL_GetTick()-tickstart) >= Timeout) || (Timeout == 0U))
755 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
756 hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT;
757 hsd->State= HAL_SD_STATE_READY;
758 hsd->Context = SD_CONTEXT_NONE;
764 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
766 hsd->State = HAL_SD_STATE_READY;
772 hsd->ErrorCode |= HAL_SD_ERROR_BUSY;
794 uint32_t count, data, dataremaining;
795 uint32_t add = BlockAdd;
796 uint8_t *tempbuff = pData;
800 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
804 if(hsd->State == HAL_SD_STATE_READY)
806 hsd->ErrorCode = HAL_SD_ERROR_NONE;
808 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
810 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
814 hsd->State = HAL_SD_STATE_BUSY;
817 hsd->Instance->DCTRL = 0U;
819 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
826 config.
DataLength = NumberOfBlocks * BLOCKSIZE;
830 config.
DPSM = SDIO_DPSM_ENABLE;
834 if(NumberOfBlocks > 1U)
836 hsd->Context = SD_CONTEXT_WRITE_MULTIPLE_BLOCK;
843 hsd->Context = SD_CONTEXT_WRITE_SINGLE_BLOCK;
848 if(errorstate != HAL_SD_ERROR_NONE)
851 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
852 hsd->ErrorCode |= errorstate;
853 hsd->State = HAL_SD_STATE_READY;
854 hsd->Context = SD_CONTEXT_NONE;
860 #if defined(SDIO_STA_STBITERR)
861 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))
863 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
866 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) && (dataremaining > 0U))
869 for(count = 0U; count < 8U; count++)
871 data = (uint32_t)(*tempbuff);
874 data |= ((uint32_t)(*tempbuff) << 8U);
877 data |= ((uint32_t)(*tempbuff) << 16U);
880 data |= ((uint32_t)(*tempbuff) << 24U);
887 if(((
HAL_GetTick()-tickstart) >= Timeout) || (Timeout == 0U))
890 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
891 hsd->ErrorCode |= errorstate;
892 hsd->State = HAL_SD_STATE_READY;
893 hsd->Context = SD_CONTEXT_NONE;
899 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) && (NumberOfBlocks > 1U))
901 if(hsd->SdCard.CardType != CARD_SECURED)
905 if(errorstate != HAL_SD_ERROR_NONE)
908 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
909 hsd->ErrorCode |= errorstate;
910 hsd->State = HAL_SD_STATE_READY;
911 hsd->Context = SD_CONTEXT_NONE;
918 #if defined(SDIO_STA_STBITERR)
919 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR)))
921 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT))
925 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
926 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT;
927 hsd->State = HAL_SD_STATE_READY;
928 hsd->Context = SD_CONTEXT_NONE;
931 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL))
934 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
935 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL;
936 hsd->State = HAL_SD_STATE_READY;
937 hsd->Context = SD_CONTEXT_NONE;
940 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR))
943 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
944 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN;
945 hsd->State = HAL_SD_STATE_READY;
946 hsd->Context = SD_CONTEXT_NONE;
955 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
957 hsd->State = HAL_SD_STATE_READY;
963 hsd->ErrorCode |= HAL_SD_ERROR_BUSY;
985 uint32_t add = BlockAdd;
989 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
993 if(hsd->State == HAL_SD_STATE_READY)
995 hsd->ErrorCode = HAL_SD_ERROR_NONE;
997 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
999 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
1003 hsd->State = HAL_SD_STATE_BUSY;
1006 hsd->Instance->DCTRL = 0U;
1008 hsd->pRxBuffPtr = pData;
1009 hsd->RxXferSize = BLOCKSIZE * NumberOfBlocks;
1011 #if defined(SDIO_STA_STBITERR)
1012 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_FLAG_RXFIFOHF | SDIO_IT_STBITERR));
1014 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_FLAG_RXFIFOHF));
1017 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
1024 config.
DataLength = BLOCKSIZE * NumberOfBlocks;
1028 config.
DPSM = SDIO_DPSM_ENABLE;
1032 if(NumberOfBlocks > 1U)
1034 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_IT);
1041 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_IT);
1046 if(errorstate != HAL_SD_ERROR_NONE)
1049 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1050 hsd->ErrorCode |= errorstate;
1051 hsd->State = HAL_SD_STATE_READY;
1052 hsd->Context = SD_CONTEXT_NONE;
1080 uint32_t errorstate;
1081 uint32_t add = BlockAdd;
1085 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
1089 if(hsd->State == HAL_SD_STATE_READY)
1091 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1093 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
1095 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
1099 hsd->State = HAL_SD_STATE_BUSY;
1102 hsd->Instance->DCTRL = 0U;
1104 hsd->pTxBuffPtr = pData;
1105 hsd->TxXferSize = BLOCKSIZE * NumberOfBlocks;
1108 #if defined(SDIO_STA_STBITERR)
1109 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND | SDIO_FLAG_TXFIFOHE | SDIO_IT_STBITERR));
1111 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND | SDIO_FLAG_TXFIFOHE));
1114 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
1120 if(NumberOfBlocks > 1U)
1122 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT);
1129 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_IT);
1134 if(errorstate != HAL_SD_ERROR_NONE)
1137 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1138 hsd->ErrorCode |= errorstate;
1139 hsd->State = HAL_SD_STATE_READY;
1140 hsd->Context = SD_CONTEXT_NONE;
1146 config.
DataLength = BLOCKSIZE * NumberOfBlocks;
1150 config.
DPSM = SDIO_DPSM_ENABLE;
1177 uint32_t errorstate;
1178 uint32_t add = BlockAdd;
1182 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
1186 if(hsd->State == HAL_SD_STATE_READY)
1188 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1190 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
1192 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
1196 hsd->State = HAL_SD_STATE_BUSY;
1199 hsd->Instance->DCTRL = 0U;
1201 #if defined(SDIO_STA_STBITERR)
1202 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_IT_STBITERR));
1204 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
1208 hsd->hdmarx->XferCpltCallback = SD_DMAReceiveCplt;
1211 hsd->hdmarx->XferErrorCallback = SD_DMAError;
1214 hsd->hdmarx->XferAbortCallback = NULL;
1217 hsd->hdmarx->Init.Direction = DMA_PERIPH_TO_MEMORY;
1218 MODIFY_REG(hsd->hdmarx->Instance->CR, DMA_SxCR_DIR, hsd->hdmarx->Init.Direction);
1221 if(
HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK)
1223 __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
1224 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1225 hsd->ErrorCode |= HAL_SD_ERROR_DMA;
1226 hsd->State = HAL_SD_STATE_READY;
1232 __HAL_SD_DMA_ENABLE(hsd);
1234 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
1241 config.
DataLength = BLOCKSIZE * NumberOfBlocks;
1245 config.
DPSM = SDIO_DPSM_ENABLE;
1249 if(NumberOfBlocks > 1U)
1251 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA);
1258 hsd->Context = (SD_CONTEXT_READ_SINGLE_BLOCK | SD_CONTEXT_DMA);
1263 if(errorstate != HAL_SD_ERROR_NONE)
1266 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1267 hsd->ErrorCode |= errorstate;
1268 hsd->State = HAL_SD_STATE_READY;
1269 hsd->Context = SD_CONTEXT_NONE;
1298 uint32_t errorstate;
1299 uint32_t add = BlockAdd;
1303 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
1307 if(hsd->State == HAL_SD_STATE_READY)
1309 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1311 if((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
1313 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
1317 hsd->State = HAL_SD_STATE_BUSY;
1320 hsd->Instance->DCTRL = 0U;
1323 #if defined(SDIO_STA_STBITERR)
1324 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR));
1326 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR));
1330 hsd->hdmatx->XferCpltCallback = SD_DMATransmitCplt;
1333 hsd->hdmatx->XferErrorCallback = SD_DMAError;
1336 hsd->hdmatx->XferAbortCallback = NULL;
1338 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
1344 if(NumberOfBlocks > 1U)
1346 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA);
1353 hsd->Context = (SD_CONTEXT_WRITE_SINGLE_BLOCK | SD_CONTEXT_DMA);
1358 if(errorstate != HAL_SD_ERROR_NONE)
1361 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1362 hsd->ErrorCode |= errorstate;
1363 hsd->State = HAL_SD_STATE_READY;
1364 hsd->Context = SD_CONTEXT_NONE;
1369 __HAL_SD_DMA_ENABLE(hsd);
1372 hsd->hdmatx->Init.Direction = DMA_MEMORY_TO_PERIPH;
1373 MODIFY_REG(hsd->hdmatx->Instance->CR, DMA_SxCR_DIR, hsd->hdmatx->Init.Direction);
1376 if(
HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK)
1378 #if defined(SDIO_STA_STBITERR)
1379 __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR));
1381 __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR));
1383 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1384 hsd->ErrorCode |= HAL_SD_ERROR_DMA;
1385 hsd->State = HAL_SD_STATE_READY;
1386 hsd->Context = SD_CONTEXT_NONE;
1393 config.
DataLength = BLOCKSIZE * NumberOfBlocks;
1397 config.
DPSM = SDIO_DPSM_ENABLE;
1420 uint32_t errorstate;
1421 uint32_t start_add = BlockStartAdd;
1422 uint32_t end_add = BlockEndAdd;
1424 if(hsd->State == HAL_SD_STATE_READY)
1426 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1428 if(end_add < start_add)
1430 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
1434 if(end_add > (hsd->SdCard.LogBlockNbr))
1436 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
1440 hsd->State = HAL_SD_STATE_BUSY;
1443 if(((hsd->SdCard.Class) & SDIO_CCCC_ERASE) == 0U)
1446 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1447 hsd->ErrorCode |= HAL_SD_ERROR_REQUEST_NOT_APPLICABLE;
1448 hsd->State = HAL_SD_STATE_READY;
1452 if((
SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
1455 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1456 hsd->ErrorCode |= HAL_SD_ERROR_LOCK_UNLOCK_FAILED;
1457 hsd->State = HAL_SD_STATE_READY;
1462 if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
1469 if(hsd->SdCard.CardType != CARD_SECURED)
1473 if(errorstate != HAL_SD_ERROR_NONE)
1476 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1477 hsd->ErrorCode |= errorstate;
1478 hsd->State = HAL_SD_STATE_READY;
1484 if(errorstate != HAL_SD_ERROR_NONE)
1487 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1488 hsd->ErrorCode |= errorstate;
1489 hsd->State = HAL_SD_STATE_READY;
1496 if(errorstate != HAL_SD_ERROR_NONE)
1499 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
1500 hsd->ErrorCode |= errorstate;
1501 hsd->State = HAL_SD_STATE_READY;
1505 hsd->State = HAL_SD_STATE_READY;
1522 uint32_t errorstate;
1523 uint32_t context = hsd->Context;
1526 if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U))
1531 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DATAEND) != RESET)
1533 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DATAEND);
1535 #if defined(SDIO_STA_STBITERR)
1536 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
1537 SDIO_IT_TXUNDERR | SDIO_IT_RXOVERR | SDIO_IT_TXFIFOHE |\
1538 SDIO_IT_RXFIFOHF | SDIO_IT_STBITERR);
1540 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
1541 SDIO_IT_TXUNDERR | SDIO_IT_RXOVERR | SDIO_IT_TXFIFOHE |\
1545 hsd->Instance->DCTRL &= ~(SDIO_DCTRL_DTEN);
1547 if((context & SD_CONTEXT_IT) != 0U)
1549 if(((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1552 if(errorstate != HAL_SD_ERROR_NONE)
1554 hsd->ErrorCode |= errorstate;
1555 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1556 hsd->ErrorCallback(hsd);
1564 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
1566 hsd->State = HAL_SD_STATE_READY;
1567 hsd->Context = SD_CONTEXT_NONE;
1568 if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1570 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1571 hsd->RxCpltCallback(hsd);
1578 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1579 hsd->TxCpltCallback(hsd);
1585 else if((context & SD_CONTEXT_DMA) != 0U)
1587 if((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1590 if(errorstate != HAL_SD_ERROR_NONE)
1592 hsd->ErrorCode |= errorstate;
1593 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1594 hsd->ErrorCallback(hsd);
1600 if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) == 0U) && ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) == 0U))
1604 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
1606 hsd->State = HAL_SD_STATE_READY;
1608 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1609 hsd->TxCpltCallback(hsd);
1621 else if((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U))
1626 #if defined(SDIO_STA_STBITERR)
1627 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_FLAG_TXUNDERR | SDIO_FLAG_STBITERR) != RESET)
1629 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_FLAG_TXUNDERR) != RESET)
1633 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL) != RESET)
1635 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL;
1637 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) != RESET)
1639 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT;
1641 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR) != RESET)
1643 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN;
1645 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_TXUNDERR) != RESET)
1647 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN;
1649 #if defined(SDIO_STA_STBITERR)
1650 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR) != RESET)
1652 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT;
1656 #if defined(SDIO_STA_STBITERR)
1658 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS | SDIO_FLAG_STBITERR);
1661 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
1662 SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR | SDIO_IT_STBITERR);
1665 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
1668 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
1669 SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
1674 if((context & SD_CONTEXT_IT) != 0U)
1677 hsd->State = HAL_SD_STATE_READY;
1678 hsd->Context = SD_CONTEXT_NONE;
1679 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1680 hsd->ErrorCallback(hsd);
1685 else if((context & SD_CONTEXT_DMA) != 0U)
1688 if(((context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1691 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort;
1695 SD_DMATxAbort(hsd->hdmatx);
1698 else if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1701 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort;
1705 SD_DMARxAbort(hsd->hdmarx);
1710 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1711 hsd->State = HAL_SD_STATE_READY;
1712 hsd->Context = SD_CONTEXT_NONE;
1713 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1714 hsd->AbortCpltCallback(hsd);
1749 return hsd->ErrorCode;
1812 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
1830 HAL_StatusTypeDef status = HAL_OK;
1832 if(pCallback == NULL)
1835 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1842 if(hsd->State == HAL_SD_STATE_READY)
1847 hsd->TxCpltCallback = pCallback;
1850 hsd->RxCpltCallback = pCallback;
1853 hsd->ErrorCallback = pCallback;
1856 hsd->AbortCpltCallback = pCallback;
1859 hsd->MspInitCallback = pCallback;
1862 hsd->MspDeInitCallback = pCallback;
1866 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1872 else if (hsd->State == HAL_SD_STATE_RESET)
1877 hsd->MspInitCallback = pCallback;
1880 hsd->MspDeInitCallback = pCallback;
1884 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1893 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1919 HAL_StatusTypeDef status = HAL_OK;
1924 if(hsd->State == HAL_SD_STATE_READY)
1948 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1954 else if (hsd->State == HAL_SD_STATE_RESET)
1966 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
1975 hsd->ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
2015 pCID->
ManufacturerID = (uint8_t)((hsd->CID[0] & 0xFF000000U) >> 24U);
2017 pCID->
OEM_AppliID = (uint16_t)((hsd->CID[0] & 0x00FFFF00U) >> 8U);
2019 pCID->
ProdName1 = (((hsd->CID[0] & 0x000000FFU) << 24U) | ((hsd->CID[1] & 0xFFFFFF00U) >> 8U));
2021 pCID->
ProdName2 = (uint8_t)(hsd->CID[1] & 0x000000FFU);
2023 pCID->
ProdRev = (uint8_t)((hsd->CID[2] & 0xFF000000U) >> 24U);
2025 pCID->
ProdSN = (((hsd->CID[2] & 0x00FFFFFFU) << 8U) | ((hsd->CID[3] & 0xFF000000U) >> 24U));
2027 pCID->
Reserved1 = (uint8_t)((hsd->CID[3] & 0x00F00000U) >> 20U);
2029 pCID->
ManufactDate = (uint16_t)((hsd->CID[3] & 0x000FFF00U) >> 8U);
2031 pCID->
CID_CRC = (uint8_t)((hsd->CID[3] & 0x000000FEU) >> 1U);
2048 pCSD->
CSDStruct = (uint8_t)((hsd->CSD[0] & 0xC0000000U) >> 30U);
2050 pCSD->
SysSpecVersion = (uint8_t)((hsd->CSD[0] & 0x3C000000U) >> 26U);
2052 pCSD->
Reserved1 = (uint8_t)((hsd->CSD[0] & 0x03000000U) >> 24U);
2054 pCSD->
TAAC = (uint8_t)((hsd->CSD[0] & 0x00FF0000U) >> 16U);
2056 pCSD->
NSAC = (uint8_t)((hsd->CSD[0] & 0x0000FF00U) >> 8U);
2060 pCSD->
CardComdClasses = (uint16_t)((hsd->CSD[1] & 0xFFF00000U) >> 20U);
2062 pCSD->
RdBlockLen = (uint8_t)((hsd->CSD[1] & 0x000F0000U) >> 16U);
2064 pCSD->
PartBlockRead = (uint8_t)((hsd->CSD[1] & 0x00008000U) >> 15U);
2066 pCSD->
WrBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00004000U) >> 14U);
2068 pCSD->
RdBlockMisalign = (uint8_t)((hsd->CSD[1] & 0x00002000U) >> 13U);
2070 pCSD->
DSRImpl = (uint8_t)((hsd->CSD[1] & 0x00001000U) >> 12U);
2074 if(hsd->SdCard.CardType == CARD_SDSC)
2076 pCSD->
DeviceSize = (((hsd->CSD[1] & 0x000003FFU) << 2U) | ((hsd->CSD[2] & 0xC0000000U) >> 30U));
2086 pCSD->
DeviceSizeMul = (uint8_t)((hsd->CSD[2] & 0x00038000U) >> 15U);
2088 hsd->SdCard.BlockNbr = (pCSD->
DeviceSize + 1U) ;
2089 hsd->SdCard.BlockNbr *= (1UL << ((pCSD->
DeviceSizeMul & 0x07U) + 2U));
2090 hsd->SdCard.BlockSize = (1UL << (pCSD->
RdBlockLen & 0x0FU));
2092 hsd->SdCard.LogBlockNbr = (hsd->SdCard.BlockNbr) * ((hsd->SdCard.BlockSize) / 512U);
2093 hsd->SdCard.LogBlockSize = 512U;
2095 else if(hsd->SdCard.CardType == CARD_SDHC_SDXC)
2098 pCSD->
DeviceSize = (((hsd->CSD[1] & 0x0000003FU) << 16U) | ((hsd->CSD[2] & 0xFFFF0000U) >> 16U));
2100 hsd->SdCard.BlockNbr = ((pCSD->
DeviceSize + 1U) * 1024U);
2101 hsd->SdCard.LogBlockNbr = hsd->SdCard.BlockNbr;
2102 hsd->SdCard.BlockSize = 512U;
2103 hsd->SdCard.LogBlockSize = hsd->SdCard.BlockSize;
2108 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2109 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2110 hsd->State = HAL_SD_STATE_READY;
2114 pCSD->
EraseGrSize = (uint8_t)((hsd->CSD[2] & 0x00004000U) >> 14U);
2116 pCSD->
EraseGrMul = (uint8_t)((hsd->CSD[2] & 0x00003F80U) >> 7U);
2122 pCSD->
ManDeflECC = (uint8_t)((hsd->CSD[3] & 0x60000000U) >> 29U);
2124 pCSD->
WrSpeedFact = (uint8_t)((hsd->CSD[3] & 0x1C000000U) >> 26U);
2126 pCSD->
MaxWrBlockLen= (uint8_t)((hsd->CSD[3] & 0x03C00000U) >> 22U);
2134 pCSD->
FileFormatGroup = (uint8_t)((hsd->CSD[3] & 0x00008000U) >> 15U);
2136 pCSD->
CopyFlag = (uint8_t)((hsd->CSD[3] & 0x00004000U) >> 14U);
2138 pCSD->
PermWrProtect = (uint8_t)((hsd->CSD[3] & 0x00002000U) >> 13U);
2140 pCSD->
TempWrProtect = (uint8_t)((hsd->CSD[3] & 0x00001000U) >> 12U);
2142 pCSD->
FileFormat = (uint8_t)((hsd->CSD[3] & 0x00000C00U) >> 10U);
2144 pCSD->
ECC= (uint8_t)((hsd->CSD[3] & 0x00000300U) >> 8U);
2146 pCSD->
CSD_CRC = (uint8_t)((hsd->CSD[3] & 0x000000FEU) >> 1U);
2162 uint32_t sd_status[16];
2163 uint32_t errorstate;
2164 HAL_StatusTypeDef status = HAL_OK;
2166 errorstate = SD_SendSDStatus(hsd, sd_status);
2167 if(errorstate != HAL_SD_ERROR_NONE)
2170 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2171 hsd->ErrorCode |= errorstate;
2172 hsd->State = HAL_SD_STATE_READY;
2177 pStatus->
DataBusWidth = (uint8_t)((sd_status[0] & 0xC0U) >> 6U);
2179 pStatus->
SecuredMode = (uint8_t)((sd_status[0] & 0x20U) >> 5U);
2181 pStatus->
CardType = (uint16_t)(((sd_status[0] & 0x00FF0000U) >> 8U) | ((sd_status[0] & 0xFF000000U) >> 24U));
2183 pStatus->
ProtectedAreaSize = (((sd_status[1] & 0xFFU) << 24U) | ((sd_status[1] & 0xFF00U) << 8U) |
2184 ((sd_status[1] & 0xFF0000U) >> 8U) | ((sd_status[1] & 0xFF000000U) >> 24U));
2186 pStatus->
SpeedClass = (uint8_t)(sd_status[2] & 0xFFU);
2192 pStatus->
EraseSize = (uint16_t)(((sd_status[2] & 0xFF000000U) >> 16U) | (sd_status[3] & 0xFFU));
2194 pStatus->
EraseTimeout = (uint8_t)((sd_status[3] & 0xFC00U) >> 10U);
2196 pStatus->
EraseOffset = (uint8_t)((sd_status[3] & 0x0300U) >> 8U);
2201 if(errorstate != HAL_SD_ERROR_NONE)
2204 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2205 hsd->ErrorCode = errorstate;
2206 hsd->State = HAL_SD_STATE_READY;
2222 pCardInfo->
CardType = (uint32_t)(hsd->SdCard.CardType);
2223 pCardInfo->
CardVersion = (uint32_t)(hsd->SdCard.CardVersion);
2224 pCardInfo->
Class = (uint32_t)(hsd->SdCard.Class);
2225 pCardInfo->
RelCardAdd = (uint32_t)(hsd->SdCard.RelCardAdd);
2226 pCardInfo->
BlockNbr = (uint32_t)(hsd->SdCard.BlockNbr);
2227 pCardInfo->
BlockSize = (uint32_t)(hsd->SdCard.BlockSize);
2228 pCardInfo->
LogBlockNbr = (uint32_t)(hsd->SdCard.LogBlockNbr);
2229 pCardInfo->
LogBlockSize = (uint32_t)(hsd->SdCard.LogBlockSize);
2247 SDIO_InitTypeDef Init;
2248 uint32_t errorstate;
2249 HAL_StatusTypeDef status = HAL_OK;
2252 assert_param(IS_SDIO_BUS_WIDE(WideMode));
2255 hsd->State = HAL_SD_STATE_BUSY;
2257 if(hsd->SdCard.CardType != CARD_SECURED)
2259 if(WideMode == SDIO_BUS_WIDE_8B)
2261 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2263 else if(WideMode == SDIO_BUS_WIDE_4B)
2265 errorstate = SD_WideBus_Enable(hsd);
2267 hsd->ErrorCode |= errorstate;
2269 else if(WideMode == SDIO_BUS_WIDE_1B)
2271 errorstate = SD_WideBus_Disable(hsd);
2273 hsd->ErrorCode |= errorstate;
2278 hsd->ErrorCode |= HAL_SD_ERROR_PARAM;
2284 hsd->ErrorCode |= HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2287 if(hsd->ErrorCode != HAL_SD_ERROR_NONE)
2290 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2291 hsd->State = HAL_SD_STATE_READY;
2297 Init.ClockEdge = hsd->Init.ClockEdge;
2298 Init.ClockBypass = hsd->Init.ClockBypass;
2299 Init.ClockPowerSave = hsd->Init.ClockPowerSave;
2300 Init.BusWide = WideMode;
2301 Init.HardwareFlowControl = hsd->Init.HardwareFlowControl;
2302 Init.ClockDiv = hsd->Init.ClockDiv;
2308 if(errorstate != HAL_SD_ERROR_NONE)
2311 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2312 hsd->ErrorCode |= errorstate;
2317 hsd->State = HAL_SD_STATE_READY;
2330 uint32_t errorstate;
2333 errorstate = SD_SendStatus(hsd, &resp1);
2334 if(errorstate != HAL_SD_ERROR_NONE)
2336 hsd->ErrorCode |= errorstate;
2339 cardstate = ((resp1 >> 9U) & 0x0FU);
2341 return (HAL_SD_CardStateTypeDef)cardstate;
2352 HAL_SD_CardStateTypeDef CardState;
2353 uint32_t context = hsd->Context;
2356 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
2357 SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
2360 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2362 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN);
2364 if ((context & SD_CONTEXT_DMA) != 0U)
2367 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
2370 if (((context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
2374 hsd->ErrorCode |= HAL_SD_ERROR_DMA;
2378 else if (((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
2382 hsd->ErrorCode |= HAL_SD_ERROR_DMA;
2391 hsd->State = HAL_SD_STATE_READY;
2394 hsd->Context = SD_CONTEXT_NONE;
2397 if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING))
2401 if(hsd->ErrorCode != HAL_SD_ERROR_NONE)
2416 HAL_SD_CardStateTypeDef CardState;
2417 uint32_t context = hsd->Context;
2420 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
2421 SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
2423 CLEAR_BIT(hsd->Instance->DCTRL, SDIO_DCTRL_DTEN);
2425 if ((context & SD_CONTEXT_DMA) != 0U)
2428 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
2431 if (((context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
2433 hsd->hdmatx->XferAbortCallback = SD_DMATxAbort;
2440 else if (((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
2442 hsd->hdmarx->XferAbortCallback = SD_DMARxAbort;
2457 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2460 hsd->State = HAL_SD_STATE_READY;
2461 hsd->Context = SD_CONTEXT_NONE;
2462 if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING))
2466 if(hsd->ErrorCode != HAL_SD_ERROR_NONE)
2472 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
2473 hsd->AbortCpltCallback(hsd);
2506 __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DATAEND));
2517 uint32_t errorstate;
2520 if(hsd->Context == (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA))
2523 if(errorstate != HAL_SD_ERROR_NONE)
2525 hsd->ErrorCode |= errorstate;
2526 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2527 hsd->ErrorCallback(hsd);
2536 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
2539 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2541 hsd->State = HAL_SD_STATE_READY;
2542 hsd->Context = SD_CONTEXT_NONE;
2544 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2545 hsd->RxCpltCallback(hsd);
2559 HAL_SD_CardStateTypeDef CardState;
2560 uint32_t RxErrorCode, TxErrorCode;
2565 RxErrorCode = hsd->hdmarx->ErrorCode;
2566 TxErrorCode = hsd->hdmatx->ErrorCode;
2567 if((RxErrorCode == HAL_DMA_ERROR_TE) || (TxErrorCode == HAL_DMA_ERROR_TE))
2570 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
2573 __HAL_SD_DISABLE_IT(hsd, SDIO_IT_DATAEND | SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT|\
2574 SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
2576 hsd->ErrorCode |= HAL_SD_ERROR_DMA;
2578 if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING))
2583 hsd->State= HAL_SD_STATE_READY;
2584 hsd->Context = SD_CONTEXT_NONE;
2587 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2588 hsd->ErrorCallback(hsd);
2603 HAL_SD_CardStateTypeDef CardState;
2606 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2609 hsd->State = HAL_SD_STATE_READY;
2610 hsd->Context = SD_CONTEXT_NONE;
2611 if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING))
2616 if(hsd->ErrorCode == HAL_SD_ERROR_NONE)
2618 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2619 hsd->AbortCpltCallback(hsd);
2626 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2627 hsd->ErrorCallback(hsd);
2642 HAL_SD_CardStateTypeDef CardState;
2645 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2648 hsd->State = HAL_SD_STATE_READY;
2649 hsd->Context = SD_CONTEXT_NONE;
2650 if((CardState == HAL_SD_CARD_RECEIVING) || (CardState == HAL_SD_CARD_SENDING))
2655 if(hsd->ErrorCode == HAL_SD_ERROR_NONE)
2657 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2658 hsd->AbortCpltCallback(hsd);
2665 #if (USE_HAL_SD_REGISTER_CALLBACKS == 1)
2666 hsd->ErrorCallback(hsd);
2681 uint32_t errorstate;
2682 uint16_t sd_rca = 1U;
2688 return HAL_SD_ERROR_REQUEST_NOT_APPLICABLE;
2691 if(hsd->SdCard.CardType != CARD_SECURED)
2695 if(errorstate != HAL_SD_ERROR_NONE)
2709 if(hsd->SdCard.CardType != CARD_SECURED)
2714 if(errorstate != HAL_SD_ERROR_NONE)
2719 if(hsd->SdCard.CardType != CARD_SECURED)
2722 hsd->SdCard.RelCardAdd = sd_rca;
2725 errorstate =
SDMMC_CmdSendCSD(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U));
2726 if(errorstate != HAL_SD_ERROR_NONE)
2746 return HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2750 errorstate =
SDMMC_CmdSelDesel(hsd->Instance, (uint32_t)(((uint32_t)hsd->SdCard.RelCardAdd) << 16U));
2751 if(errorstate != HAL_SD_ERROR_NONE)
2757 (void)
SDIO_Init(hsd->Instance, hsd->Init);
2760 return HAL_SD_ERROR_NONE;
2772 __IO uint32_t count = 0U;
2773 uint32_t response = 0U, validvoltage = 0U;
2774 uint32_t errorstate;
2778 if(errorstate != HAL_SD_ERROR_NONE)
2785 if(errorstate != HAL_SD_ERROR_NONE)
2787 hsd->SdCard.CardVersion = CARD_V1_X;
2790 if(errorstate != HAL_SD_ERROR_NONE)
2798 hsd->SdCard.CardVersion = CARD_V2_X;
2801 if( hsd->SdCard.CardVersion == CARD_V2_X)
2805 if(errorstate != HAL_SD_ERROR_NONE)
2807 return HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2812 while((count < SDMMC_MAX_VOLT_TRIAL) && (validvoltage == 0U))
2816 if(errorstate != HAL_SD_ERROR_NONE)
2822 errorstate =
SDMMC_CmdAppOperCommand(hsd->Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | SD_SWITCH_1_8V_CAPACITY);
2823 if(errorstate != HAL_SD_ERROR_NONE)
2825 return HAL_SD_ERROR_UNSUPPORTED_FEATURE;
2832 validvoltage = (((response >> 31U) == 1U) ? 1U : 0U);
2837 if(count >= SDMMC_MAX_VOLT_TRIAL)
2839 return HAL_SD_ERROR_INVALID_VOLTRANGE;
2842 if((response & SDMMC_HIGH_CAPACITY) == SDMMC_HIGH_CAPACITY)
2844 hsd->SdCard.CardType = CARD_SDHC_SDXC;
2848 hsd->SdCard.CardType = CARD_SDSC;
2852 return HAL_SD_ERROR_NONE;
2873 static uint32_t SD_SendSDStatus(
SD_HandleTypeDef *hsd, uint32_t *pSDstatus)
2876 uint32_t errorstate;
2879 uint32_t *pData = pSDstatus;
2882 if((
SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
2884 return HAL_SD_ERROR_LOCK_UNLOCK_FAILED;
2889 if(errorstate != HAL_SD_ERROR_NONE)
2891 hsd->ErrorCode |= HAL_SD_ERROR_NONE;
2896 errorstate =
SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U));
2897 if(errorstate != HAL_SD_ERROR_NONE)
2899 hsd->ErrorCode |= HAL_SD_ERROR_NONE;
2909 config.
DPSM = SDIO_DPSM_ENABLE;
2914 if(errorstate != HAL_SD_ERROR_NONE)
2916 hsd->ErrorCode |= HAL_SD_ERROR_NONE;
2921 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND))
2923 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF))
2925 for(count = 0U; count < 8U; count++)
2932 if((
HAL_GetTick() - tickstart) >= SDMMC_SWDATATIMEOUT)
2934 return HAL_SD_ERROR_TIMEOUT;
2938 #if defined(SDIO_STA_STBITERR)
2939 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR)))
2941 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT))
2944 return HAL_SD_ERROR_DATA_TIMEOUT;
2946 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL))
2948 return HAL_SD_ERROR_DATA_CRC_FAIL;
2950 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR))
2952 return HAL_SD_ERROR_RX_OVERRUN;
2959 while ((__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)))
2964 if((
HAL_GetTick() - tickstart) >= SDMMC_SWDATATIMEOUT)
2966 return HAL_SD_ERROR_TIMEOUT;
2971 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
2973 return HAL_SD_ERROR_NONE;
2983 static uint32_t SD_SendStatus(
SD_HandleTypeDef *hsd, uint32_t *pCardStatus)
2985 uint32_t errorstate;
2987 if(pCardStatus == NULL)
2989 return HAL_SD_ERROR_PARAM;
2993 errorstate =
SDMMC_CmdSendStatus(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U));
2994 if(errorstate != HAL_SD_ERROR_NONE)
3002 return HAL_SD_ERROR_NONE;
3012 uint32_t scr[2U] = {0U, 0U};
3013 uint32_t errorstate;
3015 if((
SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
3017 return HAL_SD_ERROR_LOCK_UNLOCK_FAILED;
3021 errorstate = SD_FindSCR(hsd, scr);
3022 if(errorstate != HAL_SD_ERROR_NONE)
3028 if((scr[1U] & SDMMC_WIDE_BUS_SUPPORT) != SDMMC_ALLZERO)
3031 errorstate =
SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U));
3032 if(errorstate != HAL_SD_ERROR_NONE)
3039 if(errorstate != HAL_SD_ERROR_NONE)
3044 return HAL_SD_ERROR_NONE;
3048 return HAL_SD_ERROR_REQUEST_NOT_APPLICABLE;
3059 uint32_t scr[2U] = {0U, 0U};
3060 uint32_t errorstate;
3062 if((
SDIO_GetResponse(hsd->Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
3064 return HAL_SD_ERROR_LOCK_UNLOCK_FAILED;
3068 errorstate = SD_FindSCR(hsd, scr);
3069 if(errorstate != HAL_SD_ERROR_NONE)
3075 if((scr[1U] & SDMMC_SINGLE_BUS_SUPPORT) != SDMMC_ALLZERO)
3078 errorstate =
SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->SdCard.RelCardAdd << 16U));
3079 if(errorstate != HAL_SD_ERROR_NONE)
3086 if(errorstate != HAL_SD_ERROR_NONE)
3091 return HAL_SD_ERROR_NONE;
3095 return HAL_SD_ERROR_REQUEST_NOT_APPLICABLE;
3109 uint32_t errorstate;
3111 uint32_t index = 0U;
3112 uint32_t tempscr[2U] = {0U, 0U};
3113 uint32_t *scr = pSCR;
3117 if(errorstate != HAL_SD_ERROR_NONE)
3123 errorstate =
SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)((hsd->SdCard.RelCardAdd) << 16U));
3124 if(errorstate != HAL_SD_ERROR_NONE)
3134 config.
DPSM = SDIO_DPSM_ENABLE;
3139 if(errorstate != HAL_SD_ERROR_NONE)
3144 while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT))
3146 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL))
3151 else if(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXACT))
3156 if((
HAL_GetTick() - tickstart) >= SDMMC_SWDATATIMEOUT)
3158 return HAL_SD_ERROR_TIMEOUT;
3162 #if defined(SDIO_STA_STBITERR)
3163 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT) || (__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_STBITERR)))
3165 if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DTIMEOUT))
3168 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DTIMEOUT);
3170 return HAL_SD_ERROR_DATA_TIMEOUT;
3172 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_DCRCFAIL))
3174 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_DCRCFAIL);
3176 return HAL_SD_ERROR_DATA_CRC_FAIL;
3178 else if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR))
3180 __HAL_SD_CLEAR_FLAG(hsd, SDIO_FLAG_RXOVERR);
3182 return HAL_SD_ERROR_RX_OVERRUN;
3188 __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_DATA_FLAGS);
3190 *scr = (((tempscr[1] & SDMMC_0TO7BITS) << 24) | ((tempscr[1] & SDMMC_8TO15BITS) << 8) |\
3191 ((tempscr[1] & SDMMC_16TO23BITS) >> 8) | ((tempscr[1] & SDMMC_24TO31BITS) >> 24));
3193 *scr = (((tempscr[0] & SDMMC_0TO7BITS) << 24) | ((tempscr[0] & SDMMC_8TO15BITS) << 8) |\
3194 ((tempscr[0] & SDMMC_16TO23BITS) >> 8) | ((tempscr[0] & SDMMC_24TO31BITS) >> 24));
3198 return HAL_SD_ERROR_NONE;
3209 uint32_t count, data, dataremaining;
3212 tmp = hsd->pRxBuffPtr;
3213 dataremaining = hsd->RxXferSize;
3215 if (dataremaining > 0U)
3218 for(count = 0U; count < 8U; count++)
3221 *tmp = (uint8_t)(data & 0xFFU);
3224 *tmp = (uint8_t)((data >> 8U) & 0xFFU);
3227 *tmp = (uint8_t)((data >> 16U) & 0xFFU);
3230 *tmp = (uint8_t)((data >> 24U) & 0xFFU);
3235 hsd->pRxBuffPtr = tmp;
3236 hsd->RxXferSize = dataremaining;
3248 uint32_t count, data, dataremaining;
3251 tmp = hsd->pTxBuffPtr;
3252 dataremaining = hsd->TxXferSize;
3254 if (dataremaining > 0U)
3257 for(count = 0U; count < 8U; count++)
3259 data = (uint32_t)(*tmp);
3262 data |= ((uint32_t)(*tmp) << 8U);
3265 data |= ((uint32_t)(*tmp) << 16U);
3268 data |= ((uint32_t)(*tmp) << 24U);
3274 hsd->pTxBuffPtr = tmp;
3275 hsd->TxXferSize = dataremaining;
ADC handle Structure definition.
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
Return the DMA error code.
void HAL_Delay(uint32_t Delay)
This function provides minimum delay (in milliseconds) based on variable incremented.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
HAL_StatusTypeDef SDIO_Init(SDIO_TypeDef *SDIOx, SDIO_InitTypeDef Init)
Initializes the SDMMC according to the specified parameters in the SDMMC_InitTypeDef and create the a...
uint32_t SDIO_ReadFIFO(SDIO_TypeDef *SDIOx)
Read data (word) from Rx FIFO in blocking mode (polling)
HAL_StatusTypeDef SDIO_WriteFIFO(SDIO_TypeDef *SDIOx, uint32_t *pWriteData)
Write data (word) to Tx FIFO in blocking mode (polling)
HAL_StatusTypeDef SDIO_PowerState_OFF(SDIO_TypeDef *SDIOx)
Set SDMMC Power state to OFF.
uint32_t SDIO_GetPowerState(SDIO_TypeDef *SDIOx)
Get SDMMC Power state.
HAL_StatusTypeDef SDIO_PowerState_ON(SDIO_TypeDef *SDIOx)
Set SDMMC Power state to ON.
HAL_StatusTypeDef SDIO_ConfigData(SDIO_TypeDef *SDIOx, SDIO_DataInitTypeDef *Data)
Configure the SDMMC data path according to the specified parameters in the SDIO_DataInitTypeDef.
uint32_t SDIO_GetResponse(SDIO_TypeDef *SDIOx, uint32_t Response)
Return the response received from the card for the last command.
uint32_t SDMMC_CmdSelDesel(SDIO_TypeDef *SDIOx, uint64_t Addr)
Send the Select Deselect command and check the response.
uint32_t SDMMC_CmdBlockLength(SDIO_TypeDef *SDIOx, uint32_t BlockSize)
Send the Data Block Length command and check the response.
uint32_t SDMMC_CmdWriteSingleBlock(SDIO_TypeDef *SDIOx, uint32_t WriteAdd)
Send the Write Single Block command and check the response.
uint32_t SDMMC_CmdAppCommand(SDIO_TypeDef *SDIOx, uint32_t Argument)
Send the Application command to verify that that the next command is an application specific com-mand...
uint32_t SDMMC_CmdOperCond(SDIO_TypeDef *SDIOx)
Send the Operating Condition command and check the response.
uint32_t SDMMC_CmdGoIdleState(SDIO_TypeDef *SDIOx)
Send the Go Idle State command and check the response.
uint32_t SDMMC_CmdBusWidth(SDIO_TypeDef *SDIOx, uint32_t BusWidth)
Send the Bus Width command and check the response.
uint32_t SDMMC_CmdWriteMultiBlock(SDIO_TypeDef *SDIOx, uint32_t WriteAdd)
Send the Write Multi Block command and check the response.
uint32_t SDMMC_CmdErase(SDIO_TypeDef *SDIOx)
Send the Erase command and check the response.
uint32_t SDMMC_CmdStopTransfer(SDIO_TypeDef *SDIOx)
Send the Stop Transfer command and check the response.
uint32_t SDMMC_CmdSDEraseStartAdd(SDIO_TypeDef *SDIOx, uint32_t StartAdd)
Send the Start Address Erase command for SD and check the response.
uint32_t SDMMC_CmdSendSCR(SDIO_TypeDef *SDIOx)
Send the Send SCR command and check the response.
uint32_t SDMMC_CmdStatusRegister(SDIO_TypeDef *SDIOx)
Send the Status register command and check the response.
uint32_t SDMMC_CmdSendCSD(SDIO_TypeDef *SDIOx, uint32_t Argument)
Send the Send CSD command and check the response.
uint32_t SDMMC_CmdReadMultiBlock(SDIO_TypeDef *SDIOx, uint32_t ReadAdd)
Send the Read Multi Block command and check the response.
uint32_t SDMMC_CmdSendCID(SDIO_TypeDef *SDIOx)
Send the Send CID command and check the response.
uint32_t SDMMC_CmdSetRelAdd(SDIO_TypeDef *SDIOx, uint16_t *pRCA)
Send the Send CSD command and check the response.
uint32_t SDMMC_CmdReadSingleBlock(SDIO_TypeDef *SDIOx, uint32_t ReadAdd)
Send the Read Single Block command and check the response.
uint32_t SDMMC_CmdSDEraseEndAdd(SDIO_TypeDef *SDIOx, uint32_t EndAdd)
Send the End Address Erase command for SD and check the response.
uint32_t SDMMC_CmdAppOperCommand(SDIO_TypeDef *SDIOx, uint32_t Argument)
Send the command asking the accessed card to send its operating condition register (OCR)
uint32_t SDMMC_CmdSendStatus(SDIO_TypeDef *SDIOx, uint32_t Argument)
Send the Status command and check the response.
HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd)
Initializes the SD Card.
HAL_StatusTypeDef HAL_SD_DeInit(SD_HandleTypeDef *hsd)
De-Initializes the SD card.
void HAL_SD_MspInit(SD_HandleTypeDef *hsd)
Initializes the SD MSP.
void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd)
De-Initialize SD MSP.
HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd)
Initializes the SD according to the specified parameters in the SD_HandleTypeDef and create the assoc...
void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd)
SD error callbacks.
uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd)
Return the SD error code.
HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks)
Reads block(s) from a specified address in a card. The Data transfer is managed by DMA mode.
void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
SD Abort callbacks.
HAL_StatusTypeDef HAL_SD_RegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackId, pSD_CallbackTypeDef pCallback)
Register a User SD Callback To be used instead of the weak (surcharged) predefined callback.
HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout)
Reads block(s) from a specified address in a card. The Data transfer is managed by polling mode.
void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd)
This function handles SD card interrupt request.
HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd)
return the SD state
HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks)
Reads block(s) from a specified address in a card. The Data transfer is managed in interrupt mode.
HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout)
Allows to write block(s) to a specified address in a card. The Data transfer is managed by polling mo...
HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd)
Erases the specified memory area of the given SD card.
void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
Tx Transfer completed callbacks.
HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackId)
Unregister a User SD Callback SD Callback is redirected to the weak (surcharged) predefined callback.
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
Rx Transfer completed callbacks.
HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks)
Writes block(s) to a specified address in a card. The Data transfer is managed in interrupt mode.
HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks)
Writes block(s) to a specified address in a card. The Data transfer is managed by DMA mode.
HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd)
Gets the current sd card data state.
HAL_StatusTypeDef HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID)
Returns information the information of the card which are stored on the CID register.
HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd)
Abort the current transfer and disable the SD.
HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode)
Enables wide bus operation for the requested card if supported by card.
HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus)
Gets the SD status info.
HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd)
Abort the current transfer and disable the SD (IT mode).
HAL_StatusTypeDef HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo)
Gets the SD card info.
HAL_StatusTypeDef HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD)
Returns information the information of the card which are stored on the CSD register.
struct __SD_HandleTypeDef else typedef struct endif SD_HandleTypeDef
SD handle Structure definition.
SD Card Information Structure definition.
__IO uint8_t WriteBlockPaPartial
__IO uint8_t MaxRdCurrentVDDMax
__IO uint8_t PartBlockRead
__IO uint8_t WrBlockMisalign
__IO uint8_t WrProtectGrSize
__IO uint8_t MaxWrBlockLen
__IO uint8_t WrProtectGrEnable
__IO uint8_t ContentProtectAppli
__IO uint8_t MaxWrCurrentVDDMax
__IO uint8_t MaxWrCurrentVDDMin
__IO uint8_t TempWrProtect
__IO uint16_t CardComdClasses
__IO uint8_t RdBlockMisalign
__IO uint8_t MaxRdCurrentVDDMin
__IO uint8_t SysSpecVersion
__IO uint8_t MaxBusClkFrec
__IO uint8_t PermWrProtect
__IO uint8_t FileFormatGroup
__IO uint8_t DeviceSizeMul
__IO uint16_t OEM_AppliID
__IO uint8_t ManufacturerID
__IO uint16_t ManufactDate
__IO uint8_t PerformanceMove
__IO uint8_t EraseTimeout
__IO uint8_t DataBusWidth
__IO uint32_t ProtectedAreaSize
__IO uint8_t AllocationUnitSize
@ HAL_SD_MSP_DEINIT_CB_ID
This file contains all the functions prototypes for the HAL module driver.
SDMMC Data Control structure.
DMA handle Structure definition.