271#ifdef HAL_SD_MODULE_ENABLED 
  356#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
  363    if(hsd->MspInitCallback == NULL)
 
  369    hsd->MspInitCallback(hsd);
 
 
  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;
 
  418  status = SDIO_Init(hsd->
Instance, Init);
 
  428  (void)SDIO_PowerState_ON(hsd->
Instance);
 
 
  489#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
  490  if(hsd->MspDeInitCallback == NULL)
 
  496  hsd->MspDeInitCallback(hsd);
 
 
  572  SDIO_DataInitTypeDef config;
 
  575  uint32_t count, data, dataremaining;
 
  576  uint32_t add = BlockAdd;
 
  577  uint8_t *tempbuff = pData;
 
  606    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
  607    config.DataLength    = NumberOfBlocks * 
BLOCKSIZE;
 
  608    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
  609    config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
  610    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
  611    config.DPSM          = SDIO_DPSM_ENABLE;
 
  612    (void)SDIO_ConfigData(hsd->
Instance, &config);
 
  615    if(NumberOfBlocks > 1U)
 
  620      errorstate = SDMMC_CmdReadMultiBlock(hsd->
Instance, add);
 
  627      errorstate = SDMMC_CmdReadSingleBlock(hsd->
Instance, add);
 
  640    dataremaining = config.DataLength;
 
  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))
 
  650        for(count = 0U; count < 8U; count++)
 
  652          data = SDIO_ReadFIFO(hsd->
Instance);
 
  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))
 
  685        errorstate = SDMMC_CmdStopTransfer(hsd->
Instance);
 
  699#if defined(SDIO_STA_STBITERR) 
  738      data = SDIO_ReadFIFO(hsd->
Instance);
 
  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))
 
 
  791  SDIO_DataInitTypeDef config;
 
  794  uint32_t count, data, dataremaining;
 
  795  uint32_t add = BlockAdd;
 
  796  uint8_t *tempbuff = pData;
 
  825    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
  826    config.DataLength    = NumberOfBlocks * 
BLOCKSIZE;
 
  827    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
  828    config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
  829    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
  830    config.DPSM          = SDIO_DPSM_ENABLE;
 
  831    (void)SDIO_ConfigData(hsd->
Instance, &config);
 
  834    if(NumberOfBlocks > 1U)
 
  839      errorstate = SDMMC_CmdWriteMultiBlock(hsd->
Instance, add);
 
  846      errorstate = SDMMC_CmdWriteSingleBlock(hsd->
Instance, add);
 
  859    dataremaining = config.DataLength;
 
  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))
 
  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);
 
  883          (void)SDIO_WriteFIFO(hsd->
Instance, &data);
 
  887      if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
  904        errorstate = SDMMC_CmdStopTransfer(hsd->
Instance);
 
  918#if defined(SDIO_STA_STBITERR) 
 
  983  SDIO_DataInitTypeDef config;
 
  985  uint32_t add = BlockAdd;
 
 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));
 
 1023    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1024    config.DataLength    = 
BLOCKSIZE * NumberOfBlocks;
 
 1025    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1026    config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 1027    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1028    config.DPSM          = SDIO_DPSM_ENABLE;
 
 1029    (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 1032    if(NumberOfBlocks > 1U)
 
 1037      errorstate = SDMMC_CmdReadMultiBlock(hsd->
Instance, add);
 
 1044      errorstate = SDMMC_CmdReadSingleBlock(hsd->
Instance, add);
 
 
 1079  SDIO_DataInitTypeDef config;
 
 1080  uint32_t errorstate;
 
 1081  uint32_t add = BlockAdd;
 
 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));
 
 1120    if(NumberOfBlocks > 1U)
 
 1125      errorstate = SDMMC_CmdWriteMultiBlock(hsd->
Instance, add);
 
 1132      errorstate = SDMMC_CmdWriteSingleBlock(hsd->
Instance, add);
 
 1145    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1146    config.DataLength    = 
BLOCKSIZE * NumberOfBlocks;
 
 1147    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1148    config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
 1149    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1150    config.DPSM          = SDIO_DPSM_ENABLE;
 
 1151    (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 
 1176  SDIO_DataInitTypeDef config;
 
 1177  uint32_t errorstate;
 
 1178  uint32_t add = BlockAdd;
 
 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));
 
 1223      __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
 
 1240      config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1241      config.DataLength    = 
BLOCKSIZE * NumberOfBlocks;
 
 1242      config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1243      config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 1244      config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1245      config.DPSM          = SDIO_DPSM_ENABLE;
 
 1246      (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 1249      if(NumberOfBlocks > 1U)
 
 1254        errorstate = SDMMC_CmdReadMultiBlock(hsd->
Instance, add);
 
 1261        errorstate = SDMMC_CmdReadSingleBlock(hsd->
Instance, add);
 
 
 1297  SDIO_DataInitTypeDef config;
 
 1298  uint32_t errorstate;
 
 1299  uint32_t add = BlockAdd;
 
 1323#if defined(SDIO_STA_STBITERR) 
 1324    __HAL_SD_ENABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR));
 
 1344    if(NumberOfBlocks > 1U)
 
 1349      errorstate = SDMMC_CmdWriteMultiBlock(hsd->
Instance, add);
 
 1356      errorstate = SDMMC_CmdWriteSingleBlock(hsd->
Instance, add);
 
 1378#if defined(SDIO_STA_STBITERR) 
 1379      __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR));
 
 1392      config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1393      config.DataLength    = 
BLOCKSIZE * NumberOfBlocks;
 
 1394      config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1395      config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
 1396      config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1397      config.DPSM          = SDIO_DPSM_ENABLE;
 
 1398      (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 
 1420  uint32_t errorstate;
 
 1421  uint32_t start_add = BlockStartAdd;
 
 1422  uint32_t end_add = BlockEndAdd;
 
 1428    if(end_add < start_add)
 
 1452    if((SDIO_GetResponse(hsd->
Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
 
 1472      errorstate = SDMMC_CmdSDEraseStartAdd(hsd->
Instance, start_add);
 
 1483      errorstate = SDMMC_CmdSDEraseEndAdd(hsd->
Instance, end_add);
 
 1495    errorstate = SDMMC_CmdErase(hsd->
Instance);
 
 
 1522  uint32_t errorstate;
 
 1523  uint32_t context = hsd->
Context;
 
 1535#if defined(SDIO_STA_STBITERR) 
 1537                             SDIO_IT_TXUNDERR | SDIO_IT_RXOVERR  | SDIO_IT_TXFIFOHE |\
 
 1538                             SDIO_IT_RXFIFOHF | SDIO_IT_STBITERR);
 
 1541                             SDIO_IT_TXUNDERR | SDIO_IT_RXOVERR  | SDIO_IT_TXFIFOHE |\
 
 1545    hsd->
Instance->DCTRL &= ~(SDIO_DCTRL_DTEN);
 
 1551        errorstate = SDMMC_CmdStopTransfer(hsd->
Instance);
 
 1555#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1556          hsd->ErrorCallback(hsd);
 
 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);
 
 1589        errorstate = SDMMC_CmdStopTransfer(hsd->
Instance);
 
 1593#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1594          hsd->ErrorCallback(hsd);
 
 1604        hsd->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 1608#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1609        hsd->TxCpltCallback(hsd);
 
 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)
 
 1649#if defined(SDIO_STA_STBITERR) 
 1656#if defined(SDIO_STA_STBITERR) 
 1662                             SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR | SDIO_IT_STBITERR);
 
 1669                             SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 1679#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1680      hsd->ErrorCallback(hsd);
 
 1713#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1714        hsd->AbortCpltCallback(hsd);
 
 
 1812#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 1832  if(pCallback == NULL)
 
 1835    hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1846    case HAL_SD_TX_CPLT_CB_ID :
 
 1847      hsd->TxCpltCallback = pCallback;
 
 1849    case HAL_SD_RX_CPLT_CB_ID :
 
 1850      hsd->RxCpltCallback = pCallback;
 
 1852    case HAL_SD_ERROR_CB_ID :
 
 1853      hsd->ErrorCallback = pCallback;
 
 1855    case HAL_SD_ABORT_CB_ID :
 
 1856      hsd->AbortCpltCallback = pCallback;
 
 1858    case HAL_SD_MSP_INIT_CB_ID :
 
 1859      hsd->MspInitCallback = pCallback;
 
 1861    case HAL_SD_MSP_DEINIT_CB_ID :
 
 1862      hsd->MspDeInitCallback = pCallback;
 
 1866      hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1876    case HAL_SD_MSP_INIT_CB_ID :
 
 1877      hsd->MspInitCallback = pCallback;
 
 1879    case HAL_SD_MSP_DEINIT_CB_ID :
 
 1880      hsd->MspDeInitCallback = pCallback;
 
 1884      hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1893    hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1928    case HAL_SD_TX_CPLT_CB_ID :
 
 1931    case HAL_SD_RX_CPLT_CB_ID :
 
 1934    case HAL_SD_ERROR_CB_ID :
 
 1937    case HAL_SD_ABORT_CB_ID :
 
 1940    case HAL_SD_MSP_INIT_CB_ID :
 
 1943    case HAL_SD_MSP_DEINIT_CB_ID :
 
 1948      hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1958    case HAL_SD_MSP_INIT_CB_ID :
 
 1961    case HAL_SD_MSP_DEINIT_CB_ID :
 
 1966      hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 1975    hsd->
ErrorCode |= HAL_SD_ERROR_INVALID_CALLBACK;
 
 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);
 
 2031  pCID->
CID_CRC = (uint8_t)((hsd->
CID[3] & 0x000000FEU) >> 1U);
 
 
 2048  pCSD->
CSDStruct = (uint8_t)((hsd->
CSD[0] & 0xC0000000U) >> 30U);
 
 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);
 
 2062  pCSD->
RdBlockLen = (uint8_t)((hsd->
CSD[1] & 0x000F0000U) >> 16U);
 
 2070  pCSD->
DSRImpl = (uint8_t)((hsd->
CSD[1] & 0x00001000U) >> 12U);
 
 2076    pCSD->
DeviceSize = (((hsd->
CSD[1] & 0x000003FFU) << 2U) | ((hsd->
CSD[2] & 0xC0000000U) >> 30U));
 
 2098    pCSD->
DeviceSize = (((hsd->
CSD[1] & 0x0000003FU) << 16U) | ((hsd->
CSD[2] & 0xFFFF0000U) >> 16U));
 
 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);
 
 2136  pCSD->
CopyFlag = (uint8_t)((hsd->
CSD[3] & 0x00004000U) >> 14U);
 
 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;
 
 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);
 
 
 2247  SDIO_InitTypeDef Init;
 
 2248  uint32_t errorstate;
 
 2259    if(WideMode == SDIO_BUS_WIDE_8B)
 
 2263    else if(WideMode == SDIO_BUS_WIDE_4B)
 
 2269    else if(WideMode == SDIO_BUS_WIDE_1B)
 
 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;
 
 2303    (void)SDIO_Init(hsd->
Instance, Init);
 
 
 2330  uint32_t errorstate;
 
 2339  cardstate = ((resp1 >> 9U) & 0x0FU);
 
 
 2353  uint32_t context = hsd->
Context;
 
 2357                           SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2362  CLEAR_BIT(hsd->
Instance->DCTRL, SDIO_DCTRL_DTEN);
 
 2367    hsd->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 
 2417  uint32_t context = hsd->
Context;
 
 2421                           SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2423  CLEAR_BIT(hsd->
Instance->DCTRL, SDIO_DCTRL_DTEN);
 
 2428    hsd->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 2472#if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 
 2473      hsd->AbortCpltCallback(hsd);
 
 
 2517  uint32_t errorstate;
 
 2522    errorstate = SDMMC_CmdStopTransfer(hsd->
Instance);
 
 2526#if (USE_HAL_SD_REGISTER_CALLBACKS == 1) 
 2527      hsd->ErrorCallback(hsd);
 
 2536  hsd->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 2544#if (USE_HAL_SD_REGISTER_CALLBACKS == 1) 
 2545  hsd->RxCpltCallback(hsd);
 
 
 2560  uint32_t RxErrorCode, TxErrorCode;
 
 2574        SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2587#if (USE_HAL_SD_REGISTER_CALLBACKS == 1) 
 2588    hsd->ErrorCallback(hsd);
 
 
 2618#if (USE_HAL_SD_REGISTER_CALLBACKS == 1) 
 2619    hsd->AbortCpltCallback(hsd);
 
 2626#if (USE_HAL_SD_REGISTER_CALLBACKS == 1) 
 2627    hsd->ErrorCallback(hsd);
 
 
 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;
 
 2685  if(SDIO_GetPowerState(hsd->
Instance) == 0U)
 
 2694    errorstate = SDMMC_CmdSendCID(hsd->
Instance);
 
 2702      hsd->
CID[0U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP1);
 
 2703      hsd->
CID[1U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP2);
 
 2704      hsd->
CID[2U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP3);
 
 2705      hsd->
CID[3U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP4);
 
 2713    errorstate = SDMMC_CmdSetRelAdd(hsd->
Instance, &sd_rca);
 
 2733      hsd->
CSD[0U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP1);
 
 2734      hsd->
CSD[1U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP2);
 
 2735      hsd->
CSD[2U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP3);
 
 2736      hsd->
CSD[3U] = SDIO_GetResponse(hsd->
Instance, SDIO_RESP4);
 
 
 2772  __IO uint32_t count = 0U;
 
 2773  uint32_t response = 0U, validvoltage = 0U;
 
 2774  uint32_t errorstate;
 
 2777  errorstate = SDMMC_CmdGoIdleState(hsd->
Instance);
 
 2784  errorstate = SDMMC_CmdOperCond(hsd->
Instance);
 
 2789    errorstate = SDMMC_CmdGoIdleState(hsd->
Instance);
 
 2804    errorstate = SDMMC_CmdAppCommand(hsd->
Instance, 0);
 
 2812  while((count < SDMMC_MAX_VOLT_TRIAL) && (validvoltage == 0U))
 
 2815    errorstate = SDMMC_CmdAppCommand(hsd->
Instance, 0);
 
 2822    errorstate = SDMMC_CmdAppOperCommand(hsd->
Instance, SDMMC_VOLTAGE_WINDOW_SD | SDMMC_HIGH_CAPACITY | SD_SWITCH_1_8V_CAPACITY);
 
 2829    response = SDIO_GetResponse(hsd->
Instance, SDIO_RESP1);
 
 2832    validvoltage = (((response >> 31U) == 1U) ? 1U : 0U);
 
 2837  if(count >= SDMMC_MAX_VOLT_TRIAL)
 
 2842  if((response & SDMMC_HIGH_CAPACITY) == SDMMC_HIGH_CAPACITY) 
 
 
 2863  (void)SDIO_PowerState_OFF(hsd->
Instance);
 
 
 2875  SDIO_DataInitTypeDef config;
 
 2876  uint32_t errorstate;
 
 2879  uint32_t *pData = pSDstatus;
 
 2882  if((SDIO_GetResponse(hsd->
Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
 
 2888  errorstate = SDMMC_CmdBlockLength(hsd->
Instance, 64U);
 
 2904  config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 2905  config.DataLength    = 64U;
 
 2906  config.DataBlockSize = SDIO_DATABLOCK_SIZE_64B;
 
 2907  config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 2908  config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 2909  config.DPSM          = SDIO_DPSM_ENABLE;
 
 2910  (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 2913  errorstate = SDMMC_CmdStatusRegister(hsd->
Instance);
 
 2921  while(!
__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND))
 
 2925      for(count = 0U; count < 8U; count++)
 
 2927        *pData = SDIO_ReadFIFO(hsd->
Instance);
 
 2932    if((
HAL_GetTick() - tickstart) >=  SDMMC_SWDATATIMEOUT)
 
 2938#if defined(SDIO_STA_STBITERR) 
 2961    *pData = SDIO_ReadFIFO(hsd->
Instance);
 
 2964    if((
HAL_GetTick() - tickstart) >=  SDMMC_SWDATATIMEOUT)
 
 
 2985  uint32_t errorstate;
 
 2987  if(pCardStatus == NULL)
 
 3000  *pCardStatus = SDIO_GetResponse(hsd->
Instance, SDIO_RESP1);
 
 
 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)
 
 3028  if((scr[1U] & SDMMC_WIDE_BUS_SUPPORT) != SDMMC_ALLZERO)
 
 3038    errorstate = SDMMC_CmdBusWidth(hsd->
Instance, 2U);
 
 
 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)
 
 3075  if((scr[1U] & SDMMC_SINGLE_BUS_SUPPORT) != SDMMC_ALLZERO)
 
 3085    errorstate = SDMMC_CmdBusWidth(hsd->
Instance, 0U);
 
 
 3108  SDIO_DataInitTypeDef config;
 
 3109  uint32_t errorstate;
 
 3111  uint32_t index = 0U;
 
 3112  uint32_t tempscr[2U] = {0U, 0U};
 
 3113  uint32_t *scr = pSCR;
 
 3116  errorstate = SDMMC_CmdBlockLength(hsd->
Instance, 8U);
 
 3129  config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 3130  config.DataLength    = 8U;
 
 3131  config.DataBlockSize = SDIO_DATABLOCK_SIZE_8B;
 
 3132  config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 3133  config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 3134  config.DPSM          = SDIO_DPSM_ENABLE;
 
 3135  (void)SDIO_ConfigData(hsd->
Instance, &config);
 
 3138  errorstate = SDMMC_CmdSendSCR(hsd->
Instance);
 
 3144  while(!
__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT))
 
 3148      *(tempscr + index) = SDIO_ReadFIFO(hsd->
Instance);
 
 3156    if((
HAL_GetTick() - tickstart) >=  SDMMC_SWDATATIMEOUT)
 
 3162#if defined(SDIO_STA_STBITERR) 
 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));
 
 
 3209  uint32_t count, data, dataremaining;
 
 3215  if (dataremaining > 0U)
 
 3218    for(count = 0U; count < 8U; count++)
 
 3220      data = SDIO_ReadFIFO(hsd->
Instance);
 
 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);
 
 
 3248  uint32_t count, data, dataremaining;
 
 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);
 
 3271      (void)SDIO_WriteFIFO(hsd->
Instance, &data);
 
 
#define DMA_MEMORY_TO_PERIPH
 
#define DMA_PERIPH_TO_MEMORY
 
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.
 
#define HAL_SD_ERROR_NONE
 
#define HAL_SD_ERROR_DATA_CRC_FAIL
 
#define HAL_SD_ERROR_INVALID_VOLTRANGE
 
#define HAL_SD_ERROR_BUSY
 
#define HAL_SD_ERROR_UNSUPPORTED_FEATURE
 
#define HAL_SD_ERROR_TX_UNDERRUN
 
#define HAL_SD_ERROR_PARAM
 
#define HAL_SD_ERROR_LOCK_UNLOCK_FAILED
 
#define HAL_SD_ERROR_DATA_TIMEOUT
 
#define HAL_SD_ERROR_ADDR_OUT_OF_RANGE
 
#define HAL_SD_ERROR_RX_OVERRUN
 
#define HAL_SD_ERROR_REQUEST_NOT_APPLICABLE
 
#define HAL_SD_ERROR_TIMEOUT
 
#define SD_CONTEXT_WRITE_MULTIPLE_BLOCK
 
#define SD_CONTEXT_READ_SINGLE_BLOCK
 
#define SD_CONTEXT_READ_MULTIPLE_BLOCK
 
#define SD_CONTEXT_WRITE_SINGLE_BLOCK
 
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_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.
 
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.
 
uint32_t HAL_SD_CardStateTypeDef
 
#define HAL_SD_CARD_SENDING
 
#define HAL_SD_CARD_RECEIVING
 
#define __HAL_SD_ENABLE(__HANDLE__)
Enable the SD device.
 
#define __HAL_SD_DISABLE(__HANDLE__)
Disable the SD device.
 
#define __HAL_SD_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the SD's pending flags.
 
#define __HAL_SD_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the SD device interrupt.
 
#define __HAL_SD_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified SD flag is set or not.
 
#define __HAL_SD_DMA_ENABLE(__HANDLE__)
Enable the SDMMC DMA transfer.
 
#define __HAL_SD_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the SD device interrupt.
 
static void SD_DMAError(DMA_HandleTypeDef *hdma)
DMA SD communication error callback.
 
static void SD_PowerOFF(SD_HandleTypeDef *hsd)
Turns the SDIO output signals off.
 
static uint32_t SD_WideBus_Enable(SD_HandleTypeDef *hsd)
Enables the SDIO wide bus mode.
 
static uint32_t SD_PowerON(SD_HandleTypeDef *hsd)
Enquires cards about their operating voltage and configures clock controls and stores SD information ...
 
static void SD_DMATxAbort(DMA_HandleTypeDef *hdma)
DMA SD Tx Abort callback.
 
static uint32_t SD_SendStatus(SD_HandleTypeDef *hsd, uint32_t *pCardStatus)
Returns the current card's status.
 
static void SD_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
DMA SD receive process complete callback.
 
static uint32_t SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus)
Send Status info command.
 
static uint32_t SD_WideBus_Disable(SD_HandleTypeDef *hsd)
Disables the SDIO wide bus mode.
 
static void SD_Write_IT(SD_HandleTypeDef *hsd)
Wrap up writing in non-blocking mode.
 
static void SD_DMATransmitCplt(DMA_HandleTypeDef *hdma)
DMA SD transmit process complete callback.
 
static uint32_t SD_FindSCR(SD_HandleTypeDef *hsd, uint32_t *pSCR)
Finds the SD card SCR register value.
 
static void SD_Read_IT(SD_HandleTypeDef *hsd)
Wrap up reading in non-blocking mode.
 
static void SD_DMARxAbort(DMA_HandleTypeDef *hdma)
DMA SD Rx Abort callback.
 
static uint32_t SD_InitCard(SD_HandleTypeDef *hsd)
Initializes the sd card.
 
#define assert_param(expr)
 
This file contains all the functions prototypes for the HAL module driver.
 
HAL_StatusTypeDef
HAL Status structures definition
 
#define __HAL_UNLOCK(__HANDLE__)
 
#define __HAL_LOCK(__HANDLE__)
 
__IO uint16_t OEM_AppliID
 
__IO uint8_t ManufacturerID
 
__IO uint16_t ManufactDate
 
__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
 
SD Card Information Structure definition.
 
__IO uint8_t PerformanceMove
 
__IO uint8_t EraseTimeout
 
__IO uint8_t DataBusWidth
 
__IO uint32_t ProtectedAreaSize
 
__IO uint8_t AllocationUnitSize
 
SD handle Structure definition.
 
DMA_HandleTypeDef * hdmatx
 
HAL_SD_CardInfoTypeDef SdCard
 
__IO HAL_SD_StateTypeDef State
 
DMA_HandleTypeDef * hdmarx
 
DMA handle Structure definition.
 
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
 
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
 
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
 
DMA_Stream_TypeDef * Instance