266#ifdef HAL_MMC_MODULE_ENABLED 
  275#if defined (VDD_VALUE) && (VDD_VALUE <= 1950U) 
  276#define MMC_VOLTAGE_RANGE               EMMC_LOW_VOLTAGE_RANGE 
  278#define MMC_EXT_CSD_PWR_CL_26_INDEX     201 
  279#define MMC_EXT_CSD_PWR_CL_52_INDEX     200 
  280#define MMC_EXT_CSD_PWR_CL_DDR_52_INDEX 238 
  282#define MMC_EXT_CSD_PWR_CL_26_POS       8 
  283#define MMC_EXT_CSD_PWR_CL_52_POS       0 
  284#define MMC_EXT_CSD_PWR_CL_DDR_52_POS   16 
  286#define MMC_VOLTAGE_RANGE               EMMC_HIGH_VOLTAGE_RANGE 
  288#define MMC_EXT_CSD_PWR_CL_26_INDEX     203 
  289#define MMC_EXT_CSD_PWR_CL_52_INDEX     202 
  290#define MMC_EXT_CSD_PWR_CL_DDR_52_INDEX 239 
  292#define MMC_EXT_CSD_PWR_CL_26_POS       24 
  293#define MMC_EXT_CSD_PWR_CL_52_POS       16 
  294#define MMC_EXT_CSD_PWR_CL_DDR_52_POS   24 
  298#define MMC_INIT_FREQ                   400000U    
  366  assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(hmmc->
Init.HardwareFlowControl));
 
  373#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
  380    if(hmmc->MspInitCallback == NULL)
 
  386    hmmc->MspInitCallback(hmmc);
 
  411  if (hmmc->
Init.BusWide != SDIO_BUS_WIDE_1B)
 
 
  436  Init.ClockEdge           = SDIO_CLOCK_EDGE_RISING;
 
  437  Init.ClockBypass         = SDIO_CLOCK_BYPASS_DISABLE;
 
  438  Init.ClockPowerSave      = SDIO_CLOCK_POWER_SAVE_DISABLE;
 
  439  Init.BusWide             = SDIO_BUS_WIDE_1B;
 
  440  Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
 
  441  Init.ClockDiv            = SDIO_INIT_CLK_DIV;
 
  444  status = SDIO_Init(hmmc->
Instance, Init);
 
  454  status = SDIO_PowerState_ON(hmmc->
Instance);
 
 
  519#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
  520  if(hmmc->MspDeInitCallback == NULL)
 
  526  hmmc->MspDeInitCallback(hmmc);
 
 
  602  SDIO_DataInitTypeDef config;
 
  605  uint32_t count, data, dataremaining;
 
  606  uint32_t add = BlockAdd;
 
  607  uint8_t *tempbuff = pData;
 
  636    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
  638    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
  639    config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
  640    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
  641    config.DPSM          = SDIO_DPSM_ENABLE;
 
  642    (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
  645    if(NumberOfBlocks > 1U)
 
  650      errorstate = SDMMC_CmdReadMultiBlock(hmmc->
Instance, add);
 
  657      errorstate = SDMMC_CmdReadSingleBlock(hmmc->
Instance, add);
 
  669    dataremaining = config.DataLength;
 
  670#if defined(SDIO_STA_STBITERR) 
  671    while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))
 
  673    while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
 
  679        for(count = 0U; count < 8U; count++)
 
  681          data = SDIO_ReadFIFO(hmmc->
Instance);
 
  682          *tempbuff = (uint8_t)(data & 0xFFU);
 
  685          *tempbuff = (uint8_t)((data >> 8U) & 0xFFU);
 
  688          *tempbuff = (uint8_t)((data >> 16U) & 0xFFU);
 
  691          *tempbuff = (uint8_t)((data >> 24U) & 0xFFU);
 
  697      if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
  711      errorstate = SDMMC_CmdStopTransfer(hmmc->
Instance);
 
  755      data = SDIO_ReadFIFO(hmmc->
Instance);
 
  756      *tempbuff = (uint8_t)(data & 0xFFU);
 
  759      *tempbuff = (uint8_t)((data >> 8U) & 0xFFU);
 
  762      *tempbuff = (uint8_t)((data >> 16U) & 0xFFU);
 
  765      *tempbuff = (uint8_t)((data >> 24U) & 0xFFU);
 
  769      if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
 
  807  SDIO_DataInitTypeDef config;
 
  810  uint32_t count, data, dataremaining;
 
  811  uint32_t add = BlockAdd;
 
  812  uint8_t *tempbuff = pData;
 
  841    if(NumberOfBlocks > 1U)
 
  846      errorstate = SDMMC_CmdWriteMultiBlock(hmmc->
Instance, add);
 
  853      errorstate = SDMMC_CmdWriteSingleBlock(hmmc->
Instance, add);
 
  865    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
  867    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
  868    config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
  869    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
  870    config.DPSM          = SDIO_DPSM_ENABLE;
 
  871    (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
  874    dataremaining = config.DataLength;
 
  875#if defined(SDIO_STA_STBITERR) 
  876    while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))
 
  878    while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_TXUNDERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
 
  884        for(count = 0U; count < 8U; count++)
 
  886          data = (uint32_t)(*tempbuff);
 
  889          data |= ((uint32_t)(*tempbuff) << 8U);
 
  892          data |= ((uint32_t)(*tempbuff) << 16U);
 
  895          data |= ((uint32_t)(*tempbuff) << 24U);
 
  898          (void)SDIO_WriteFIFO(hmmc->
Instance, &data);
 
  902      if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
  916      errorstate = SDMMC_CmdStopTransfer(hmmc->
Instance);
 
 
  986  SDIO_DataInitTypeDef config;
 
  988  uint32_t add = BlockAdd;
 
 1014#if defined(SDIO_STA_STBITERR) 
 1015    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_FLAG_RXFIFOHF | SDIO_IT_STBITERR));
 
 1017    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_FLAG_RXFIFOHF));
 
 1026    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1028    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1029    config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 1030    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1031    config.DPSM          = SDIO_DPSM_ENABLE;
 
 1032    (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 1035    if(NumberOfBlocks > 1U)
 
 1040      errorstate = SDMMC_CmdReadMultiBlock(hmmc->
Instance, add);
 
 1047      errorstate = SDMMC_CmdReadSingleBlock(hmmc->
Instance, add);
 
 
 1082  SDIO_DataInitTypeDef config;
 
 1083  uint32_t errorstate;
 
 1084  uint32_t add = BlockAdd;
 
 1111#if defined(SDIO_STA_STBITERR) 
 1112    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND | SDIO_FLAG_TXFIFOHE | SDIO_IT_STBITERR));
 
 1114    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND | SDIO_FLAG_TXFIFOHE));
 
 1123    if(NumberOfBlocks > 1U)
 
 1128      errorstate = SDMMC_CmdWriteMultiBlock(hmmc->
Instance, add);
 
 1135      errorstate = SDMMC_CmdWriteSingleBlock(hmmc->
Instance, add);
 
 1147    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1149    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1150    config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
 1151    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1152    config.DPSM          = SDIO_DPSM_ENABLE;
 
 1153    (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 
 1178  SDIO_DataInitTypeDef config;
 
 1179  uint32_t errorstate;
 
 1180  uint32_t add = BlockAdd;
 
 1203#if defined(SDIO_STA_STBITERR) 
 1204    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND | SDIO_IT_STBITERR));
 
 1206    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
 
 1230      __HAL_MMC_DISABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
 
 1242      config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1244      config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1245      config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 1246      config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1247      config.DPSM          = SDIO_DPSM_ENABLE;
 
 1248      (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 1251      if(NumberOfBlocks > 1U)
 
 1256        errorstate = SDMMC_CmdReadMultiBlock(hmmc->
Instance, add);
 
 1263        errorstate = SDMMC_CmdReadSingleBlock(hmmc->
Instance, add);
 
 1269        __HAL_MMC_DISABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND));
 
 
 1299  SDIO_DataInitTypeDef config;
 
 1300  uint32_t errorstate;
 
 1301  uint32_t add = BlockAdd;
 
 1325#if defined(SDIO_STA_STBITERR) 
 1326    __HAL_MMC_ENABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR));
 
 1347    if(NumberOfBlocks > 1U)
 
 1352      errorstate = SDMMC_CmdWriteMultiBlock(hmmc->
Instance, add);
 
 1359      errorstate = SDMMC_CmdWriteSingleBlock(hmmc->
Instance, add);
 
 1365      __HAL_MMC_DISABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND));
 
 1381      __HAL_MMC_DISABLE_IT(hmmc, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_DATAEND));
 
 1390      config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 1392      config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 1393      config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 
 1394      config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 1395      config.DPSM          = SDIO_DPSM_ENABLE;
 
 1396      (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 
 1418  uint32_t errorstate;
 
 1419  uint32_t start_add = BlockStartAdd;
 
 1420  uint32_t end_add = BlockEndAdd;
 
 1426    if(end_add < start_add)
 
 1450    if((SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1) & SDMMC_CARD_LOCKED) == SDMMC_CARD_LOCKED)
 
 1466    errorstate = SDMMC_CmdEraseStartAdd(hmmc->
Instance, start_add);
 
 1477    errorstate = SDMMC_CmdEraseEndAdd(hmmc->
Instance, end_add);
 
 1488    errorstate = SDMMC_CmdErase(hmmc->
Instance);
 
 
 1515  uint32_t errorstate;
 
 1516  uint32_t context = hmmc->
Context;
 
 1528#if defined(SDIO_STA_STBITERR) 
 1530                             SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR | SDIO_IT_STBITERR);
 
 1533                               SDIO_IT_TXUNDERR | SDIO_IT_RXOVERR  | SDIO_IT_TXFIFOHE |\
 
 1537    hmmc->
Instance->DCTRL &= ~(SDIO_DCTRL_DTEN);
 
 1543        errorstate = SDMMC_CmdStopTransfer(hmmc->
Instance);
 
 1547#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1548          hmmc->ErrorCallback(hmmc);
 
 1558        hmmc->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 1562#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1563        hmmc->TxCpltCallback(hmmc);
 
 1574        errorstate = SDMMC_CmdStopTransfer(hmmc->
Instance);
 
 1578#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1579          hmmc->ErrorCallback(hmmc);
 
 1592#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1593        hmmc->RxCpltCallback(hmmc);
 
 1600#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1601        hmmc->TxCpltCallback(hmmc);
 
 1618#if defined(SDIO_STA_STBITERR) 
 1619  else if(
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_FLAG_TXUNDERR | SDIO_FLAG_STBITERR) != RESET)
 
 1621  else if(
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_RXOVERR | SDIO_FLAG_TXUNDERR) != RESET)
 
 1641#if defined(SDIO_STA_STBITERR) 
 1648#if defined(SDIO_STA_STBITERR) 
 1654                               SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR | SDIO_IT_STBITERR);
 
 1661                             SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 1670#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1671      hmmc->ErrorCallback(hmmc);
 
 1689      else if(hmmc->
hdmarx != NULL)
 
 1703#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1704        hmmc->AbortCpltCallback(hmmc);
 
 
 1803#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 1823  if(pCallback == NULL)
 
 1826    hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1837    case HAL_MMC_TX_CPLT_CB_ID :
 
 1838      hmmc->TxCpltCallback = pCallback;
 
 1840    case HAL_MMC_RX_CPLT_CB_ID :
 
 1841      hmmc->RxCpltCallback = pCallback;
 
 1843    case HAL_MMC_ERROR_CB_ID :
 
 1844      hmmc->ErrorCallback = pCallback;
 
 1846    case HAL_MMC_ABORT_CB_ID :
 
 1847      hmmc->AbortCpltCallback = pCallback;
 
 1849    case HAL_MMC_MSP_INIT_CB_ID :
 
 1850      hmmc->MspInitCallback = pCallback;
 
 1852    case HAL_MMC_MSP_DEINIT_CB_ID :
 
 1853      hmmc->MspDeInitCallback = pCallback;
 
 1857      hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1867    case HAL_MMC_MSP_INIT_CB_ID :
 
 1868      hmmc->MspInitCallback = pCallback;
 
 1870    case HAL_MMC_MSP_DEINIT_CB_ID :
 
 1871      hmmc->MspDeInitCallback = pCallback;
 
 1875      hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1884    hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1919    case HAL_MMC_TX_CPLT_CB_ID :
 
 1922    case HAL_MMC_RX_CPLT_CB_ID :
 
 1925    case HAL_MMC_ERROR_CB_ID :
 
 1928    case HAL_MMC_ABORT_CB_ID :
 
 1931    case HAL_MMC_MSP_INIT_CB_ID :
 
 1934    case HAL_MMC_MSP_DEINIT_CB_ID :
 
 1939      hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1949    case HAL_MMC_MSP_INIT_CB_ID :
 
 1952    case HAL_MMC_MSP_DEINIT_CB_ID :
 
 1957      hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 1966    hmmc->
ErrorCode |= HAL_MMC_ERROR_INVALID_CALLBACK;
 
 2008  pCID->
OEM_AppliID = (uint16_t)((hmmc->
CID[0] & 0x00FFFF00U) >> 8U);
 
 2010  pCID->
ProdName1 = (((hmmc->
CID[0] & 0x000000FFU) << 24U) | ((hmmc->
CID[1] & 0xFFFFFF00U) >> 8U));
 
 2012  pCID->
ProdName2 = (uint8_t)(hmmc->
CID[1] & 0x000000FFU);
 
 2014  pCID->
ProdRev = (uint8_t)((hmmc->
CID[2] & 0xFF000000U) >> 24U);
 
 2016  pCID->
ProdSN = (((hmmc->
CID[2] & 0x00FFFFFFU) << 8U) | ((hmmc->
CID[3] & 0xFF000000U) >> 24U));
 
 2018  pCID->
Reserved1 = (uint8_t)((hmmc->
CID[3] & 0x00F00000U) >> 20U);
 
 2022  pCID->
CID_CRC = (uint8_t)((hmmc->
CID[3] & 0x000000FEU) >> 1U);
 
 
 2039  uint32_t block_nbr = 0;
 
 2041  pCSD->
CSDStruct = (uint8_t)((hmmc->
CSD[0] & 0xC0000000U) >> 30U);
 
 2045  pCSD->
Reserved1 = (uint8_t)((hmmc->
CSD[0] & 0x03000000U) >> 24U);
 
 2047  pCSD->
TAAC = (uint8_t)((hmmc->
CSD[0] & 0x00FF0000U) >> 16U);
 
 2049  pCSD->
NSAC = (uint8_t)((hmmc->
CSD[0] & 0x0000FF00U) >> 8U);
 
 2055  pCSD->
RdBlockLen = (uint8_t)((hmmc->
CSD[1] & 0x000F0000U) >> 16U);
 
 2063  pCSD->
DSRImpl = (uint8_t)((hmmc->
CSD[1] & 0x00001000U) >> 12U);
 
 2067  pCSD->
DeviceSize = (((hmmc->
CSD[1] & 0x000003FFU) << 2U) | ((hmmc->
CSD[2] & 0xC0000000U) >> 30U));
 
 2108  pCSD->
EraseGrSize = (uint8_t)((hmmc->
CSD[2] & 0x00004000U) >> 14U);
 
 2110  pCSD->
EraseGrMul = (uint8_t)((hmmc->
CSD[2] & 0x00003F80U) >> 7U);
 
 2116  pCSD->
ManDeflECC = (uint8_t)((hmmc->
CSD[3] & 0x60000000U) >> 29U);
 
 2118  pCSD->
WrSpeedFact = (uint8_t)((hmmc->
CSD[3] & 0x1C000000U) >> 26U);
 
 2130  pCSD->
CopyFlag = (uint8_t)((hmmc->
CSD[3] & 0x00004000U) >> 14U);
 
 2136  pCSD->
FileFormat = (uint8_t)((hmmc->
CSD[3] & 0x00000C00U) >> 10U);
 
 2138  pCSD->
ECC= (uint8_t)((hmmc->
CSD[3] & 0x00000300U) >> 8U);
 
 2140  pCSD->
CSD_CRC = (uint8_t)((hmmc->
CSD[3] & 0x000000FEU) >> 1U);
 
 
 2178  SDIO_DataInitTypeDef config;
 
 2179  uint32_t errorstate;
 
 2203    config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 2204    config.DataLength    = 512;
 
 2205    config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 2206    config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 2207    config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 2208    config.DPSM          = SDIO_DPSM_ENABLE;
 
 2209    (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 2212    errorstate = SDMMC_CmdSendEXTCSD(hmmc->
Instance, 0);
 
 2223    while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
 
 2228        for(count = 0U; count < 8U; count++)
 
 2230          *tmp_buf = SDIO_ReadFIFO(hmmc->
Instance);
 
 2235      if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
 
 2297  SDIO_InitTypeDef Init;
 
 2298  uint32_t errorstate;
 
 2299  uint32_t response = 0U;
 
 2311    if(WideMode == SDIO_BUS_WIDE_8B)
 
 2313      errorstate = SDMMC_CmdSwitch(hmmc->
Instance, 0x03B70200U);
 
 2315    else if(WideMode == SDIO_BUS_WIDE_4B)
 
 2317      errorstate = SDMMC_CmdSwitch(hmmc->
Instance, 0x03B70100U);
 
 2319    else if(WideMode == SDIO_BUS_WIDE_1B)
 
 2321      errorstate = SDMMC_CmdSwitch(hmmc->
Instance, 0x03B70000U);
 
 2333      count = SDMMC_MAX_TRIAL;
 
 2343        response = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 2345      }
while(((response & 0x100U) == 0U) && (count != 0U));
 
 2351        if ((response & 0x80U) != 0U)
 
 2353          errorstate = SDMMC_ERROR_GENERAL_UNKNOWN_ERR;
 
 2359          Init.BusWide = WideMode;
 
 2360          (void)SDIO_Init(hmmc->
Instance, Init);
 
 2363      else if (count == 0U)
 
 2365        errorstate = SDMMC_ERROR_TIMEOUT;
 
 
 2396  uint32_t errorstate;
 
 2397  uint32_t resp1 = 0U;
 
 2405  cardstate = ((resp1 >> 9U) & 0x0FU);
 
 
 2422                             SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2430    hmmc->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 
 2479                           SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2487    hmmc->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 2525#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2526      hmmc->AbortCpltCallback(hmmc);
 
 
 2570  uint32_t errorstate;
 
 2575    errorstate = SDMMC_CmdStopTransfer(hmmc->
Instance);
 
 2579#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2580      hmmc->ErrorCallback(hmmc);
 
 2589  hmmc->
Instance->DCTRL &= (uint32_t)~((uint32_t)SDIO_DCTRL_DMAEN);
 
 2596#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2597  hmmc->RxCpltCallback(hmmc);
 
 
 2612  uint32_t RxErrorCode, TxErrorCode;
 
 2626        SDIO_IT_TXUNDERR| SDIO_IT_RXOVERR);
 
 2638#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2639    hmmc->ErrorCallback(hmmc);
 
 
 2673#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2674        hmmc->AbortCpltCallback(hmmc);
 
 2681#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2682        hmmc->ErrorCallback(hmmc);
 
 
 2718#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2719        hmmc->AbortCpltCallback(hmmc);
 
 2726#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 
 2727        hmmc->ErrorCallback(hmmc);
 
 
 2744  uint32_t errorstate;
 
 2745  uint16_t mmc_rca = 2U;
 
 2749  if(SDIO_GetPowerState(hmmc->
Instance) == 0U)
 
 2756  errorstate = SDMMC_CmdSendCID(hmmc->
Instance);
 
 2764    hmmc->
CID[0U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 2765    hmmc->
CID[1U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP2);
 
 2766    hmmc->
CID[2U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP3);
 
 2767    hmmc->
CID[3U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP4);
 
 2772  errorstate = SDMMC_CmdSetRelAddMmc(hmmc->
Instance, mmc_rca);
 
 2790    hmmc->
CSD[0U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 2791    hmmc->
CSD[1U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP2);
 
 2792    hmmc->
CSD[2U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP3);
 
 2793    hmmc->
CSD[3U] = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP4);
 
 2834  Init.BusWide = SDIO_BUS_WIDE_1B;
 
 2835  (void)SDIO_Init(hmmc->
Instance, Init);
 
 
 2850  __IO uint32_t count = 0U;
 
 2851  uint32_t response = 0U, validvoltage = 0U;
 
 2852  uint32_t errorstate;
 
 2855  errorstate = SDMMC_CmdGoIdleState(hmmc->
Instance);
 
 2861  while(validvoltage == 0U)
 
 2863    if(count++ == SDMMC_MAX_VOLT_TRIAL)
 
 2876    response = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 2879    validvoltage = (((response >> 31U) == 1U) ? 1U : 0U);
 
 2883  if (((response & (0xFF000000U)) >> 24U) == 0xC0U)
 
 
 2903  (void)SDIO_PowerState_OFF(hmmc->
Instance);
 
 
 2915  uint32_t errorstate;
 
 2917  if(pCardStatus == NULL)
 
 2930  *pCardStatus = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 
 2945  SDIO_DataInitTypeDef config;
 
 2946  uint32_t errorstate;
 
 2958  config.DataTimeOut   = SDMMC_DATATIMEOUT;
 
 2959  config.DataLength    = 512;
 
 2960  config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B;
 
 2961  config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 
 2962  config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 
 2963  config.DPSM          = SDIO_DPSM_ENABLE;
 
 2964  (void)SDIO_ConfigData(hmmc->
Instance, &config);
 
 2967  errorstate = SDMMC_CmdSendEXTCSD(hmmc->
Instance, 0);
 
 2978  while(!
__HAL_MMC_GET_FLAG(hmmc, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND))
 
 2983      for(count = 0U; count < 8U; count++)
 
 2985        tmp_data = SDIO_ReadFIFO(hmmc->
Instance);
 
 2988        if ((i + count) == ((uint32_t)FieldIndex/4U))
 
 2990          *pFieldData = tmp_data;
 
 2996    if(((
HAL_GetTick()-tickstart) >=  Timeout) || (Timeout == 0U))
 
 
 3030  uint32_t count, data, dataremaining;
 
 3036  if (dataremaining > 0U)
 
 3039    for(count = 0U; count < 8U; count++)
 
 3041      data = SDIO_ReadFIFO(hmmc->
Instance);
 
 3042      *tmp = (uint8_t)(data & 0xFFU);
 
 3045      *tmp = (uint8_t)((data >> 8U) & 0xFFU);
 
 3048      *tmp = (uint8_t)((data >> 16U) & 0xFFU);
 
 3051      *tmp = (uint8_t)((data >> 24U) & 0xFFU);
 
 
 3069  uint32_t count, data, dataremaining;
 
 3075  if (dataremaining > 0U)
 
 3078    for(count = 0U; count < 8U; count++)
 
 3080      data = (uint32_t)(*tmp);
 
 3083      data |= ((uint32_t)(*tmp) << 8U);
 
 3086      data |= ((uint32_t)(*tmp) << 16U);
 
 3089      data |= ((uint32_t)(*tmp) << 24U);
 
 3092      (void)SDIO_WriteFIFO(hmmc->
Instance, &data);
 
 
 3110  uint32_t response = 0U;
 
 3112  uint32_t power_class, supported_pwr_class;
 
 3114  if((Wide == SDIO_BUS_WIDE_8B) || (Wide == SDIO_BUS_WIDE_4B))
 
 3121      errorstate = SDMMC_ERROR_GENERAL_UNKNOWN_ERR;
 
 3125      power_class = ((power_class >> 24U) & 0x000000FFU);
 
 3134      if(Wide == SDIO_BUS_WIDE_8B)
 
 3137        supported_pwr_class = (supported_pwr_class >> 4U);
 
 3140      if ((power_class & 0x0FU) != (supported_pwr_class & 0x0FU))
 
 3143        errorstate = SDMMC_CmdSwitch(hmmc->
Instance, (0x03BB0000U | ((supported_pwr_class & 0x0FU) << 8U)));
 
 3148          count = SDMMC_MAX_TRIAL;
 
 3158            response = SDIO_GetResponse(hmmc->
Instance, SDIO_RESP1);
 
 3160          }
while(((response & 0x100U) == 0U) && (count != 0U));
 
 3166            if ((response & 0x80U) != 0U)
 
 3168              errorstate = SDMMC_ERROR_UNSUPPORTED_FEATURE;
 
 3171          else if (count == 0U)
 
 3173            errorstate = SDMMC_ERROR_TIMEOUT;
 
 
#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_MMC_ERROR_BUSY
 
#define HAL_MMC_ERROR_LOCK_UNLOCK_FAILED
 
#define HAL_MMC_ERROR_ADDR_OUT_OF_RANGE
 
#define HAL_MMC_ERROR_DATA_TIMEOUT
 
#define HAL_MMC_ERROR_TX_UNDERRUN
 
#define HAL_MMC_ERROR_RX_OVERRUN
 
#define HAL_MMC_ERROR_TIMEOUT
 
#define HAL_MMC_ERROR_INVALID_VOLTRANGE
 
#define HAL_MMC_ERROR_DATA_CRC_FAIL
 
#define HAL_MMC_ERROR_PARAM
 
#define HAL_MMC_ERROR_REQUEST_NOT_APPLICABLE
 
#define HAL_MMC_ERROR_DMA
 
#define HAL_MMC_ERROR_NONE
 
#define HAL_MMC_ERROR_UNSUPPORTED_FEATURE
 
#define MMC_CONTEXT_WRITE_MULTIPLE_BLOCK
 
#define MMC_CONTEXT_WRITE_SINGLE_BLOCK
 
#define MMC_CONTEXT_READ_SINGLE_BLOCK
 
#define MMC_CONTEXT_READ_MULTIPLE_BLOCK
 
#define MMC_HIGH_CAPACITY_CARD
 
#define MMC_LOW_CAPACITY_CARD
 
HAL_StatusTypeDef HAL_MMC_DeInit(MMC_HandleTypeDef *hmmc)
De-Initializes the MMC card.
 
void HAL_MMC_MspDeInit(MMC_HandleTypeDef *hmmc)
De-Initialize MMC MSP.
 
HAL_StatusTypeDef HAL_MMC_InitCard(MMC_HandleTypeDef *hmmc)
Initializes the MMC Card.
 
HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc)
Initializes the MMC according to the specified parameters in the MMC_HandleTypeDef and create the ass...
 
void HAL_MMC_MspInit(MMC_HandleTypeDef *hmmc)
Initializes the MMC MSP.
 
HAL_StatusTypeDef HAL_MMC_ReadBlocks_DMA(MMC_HandleTypeDef *hmmc, 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.
 
HAL_StatusTypeDef HAL_MMC_ReadBlocks_IT(MMC_HandleTypeDef *hmmc, 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_MMC_WriteBlocks_IT(MMC_HandleTypeDef *hmmc, 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.
 
uint32_t HAL_MMC_GetError(MMC_HandleTypeDef *hmmc)
Return the MMC error code.
 
HAL_StatusTypeDef HAL_MMC_WriteBlocks(MMC_HandleTypeDef *hmmc, 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...
 
void HAL_MMC_TxCpltCallback(MMC_HandleTypeDef *hmmc)
Tx Transfer completed callbacks.
 
void HAL_MMC_ErrorCallback(MMC_HandleTypeDef *hmmc)
MMC error callbacks.
 
void HAL_MMC_AbortCallback(MMC_HandleTypeDef *hmmc)
MMC Abort callbacks.
 
void HAL_MMC_RxCpltCallback(MMC_HandleTypeDef *hmmc)
Rx Transfer completed callbacks.
 
HAL_StatusTypeDef HAL_MMC_ReadBlocks(MMC_HandleTypeDef *hmmc, 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.
 
HAL_StatusTypeDef HAL_MMC_Erase(MMC_HandleTypeDef *hmmc, uint32_t BlockStartAdd, uint32_t BlockEndAdd)
Erases the specified memory area of the given MMC card.
 
HAL_MMC_StateTypeDef HAL_MMC_GetState(MMC_HandleTypeDef *hmmc)
return the MMC state
 
HAL_StatusTypeDef HAL_MMC_WriteBlocks_DMA(MMC_HandleTypeDef *hmmc, 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.
 
void HAL_MMC_IRQHandler(MMC_HandleTypeDef *hmmc)
This function handles MMC card interrupt request.
 
HAL_StatusTypeDef HAL_MMC_GetCardCSD(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCSDTypeDef *pCSD)
Returns information the information of the card which are stored on the CSD register.
 
HAL_StatusTypeDef HAL_MMC_Abort(MMC_HandleTypeDef *hmmc)
Abort the current transfer and disable the MMC.
 
HAL_StatusTypeDef HAL_MMC_Abort_IT(MMC_HandleTypeDef *hmmc)
Abort the current transfer and disable the MMC (IT mode).
 
HAL_StatusTypeDef HAL_MMC_ConfigWideBusOperation(MMC_HandleTypeDef *hmmc, uint32_t WideMode)
Enables wide bus operation for the requested card if supported by card.
 
HAL_StatusTypeDef HAL_MMC_GetCardInfo(MMC_HandleTypeDef *hmmc, HAL_MMC_CardInfoTypeDef *pCardInfo)
Gets the MMC card info.
 
HAL_StatusTypeDef HAL_MMC_GetCardCID(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCIDTypeDef *pCID)
Returns information the information of the card which are stored on the CID register.
 
HAL_MMC_CardStateTypeDef HAL_MMC_GetCardState(MMC_HandleTypeDef *hmmc)
Gets the current mmc card data state.
 
HAL_StatusTypeDef HAL_MMC_GetCardExtCSD(MMC_HandleTypeDef *hmmc, uint32_t *pExtCSD, uint32_t Timeout)
Returns information the information of the card which are stored on the Extended CSD register.
 
#define HAL_MMC_CARD_SENDING
 
uint32_t HAL_MMC_CardStateTypeDef
 
#define HAL_MMC_CARD_RECEIVING
 
#define __HAL_MMC_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the MMC device interrupt.
 
#define __HAL_MMC_ENABLE(__HANDLE__)
Enable the MMC device.
 
#define __HAL_MMC_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified MMC flag is set or not.
 
#define __HAL_MMC_DMA_ENABLE(__HANDLE__)
Enable the SDMMC DMA transfer.
 
#define __HAL_MMC_DISABLE(__HANDLE__)
Disable the MMC device.
 
#define __HAL_MMC_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the MMC device interrupt.
 
#define __HAL_MMC_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the MMC's pending flags.
 
#define MMC_EXT_CSD_PWR_CL_26_INDEX
 
#define MMC_EXT_CSD_PWR_CL_26_POS
 
#define MMC_VOLTAGE_RANGE
 
static void MMC_DMAError(DMA_HandleTypeDef *hdma)
DMA MMC communication error callback.
 
static uint32_t MMC_PowerON(MMC_HandleTypeDef *hmmc)
Enquires cards about their operating voltage and configures clock controls and stores MMC information...
 
static uint32_t MMC_PwrClassUpdate(MMC_HandleTypeDef *hmmc, uint32_t Wide)
Update the power class of the device.
 
static uint32_t MMC_SendStatus(MMC_HandleTypeDef *hmmc, uint32_t *pCardStatus)
Returns the current card's status.
 
static uint32_t MMC_ReadExtCSD(MMC_HandleTypeDef *hmmc, uint32_t *pFieldData, uint16_t FieldIndex, uint32_t Timeout)
Reads extended CSD register to get the sectors number of the device.
 
static void MMC_DMATxAbort(DMA_HandleTypeDef *hdma)
DMA MMC Tx Abort callback.
 
static void MMC_PowerOFF(MMC_HandleTypeDef *hmmc)
Turns the SDIO output signals off.
 
static void MMC_Write_IT(MMC_HandleTypeDef *hmmc)
Wrap up writing in non-blocking mode.
 
static void MMC_DMATransmitCplt(DMA_HandleTypeDef *hdma)
DMA MMC transmit process complete callback.
 
static void MMC_DMARxAbort(DMA_HandleTypeDef *hdma)
DMA MMC Rx Abort callback.
 
static void MMC_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
DMA MMC receive process complete callback.
 
static uint32_t MMC_InitCard(MMC_HandleTypeDef *hmmc)
Initializes the mmc card.
 
static void MMC_Read_IT(MMC_HandleTypeDef *hmmc)
Wrap up reading in non-blocking mode.
 
#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 PermWrProtect
 
__IO uint8_t WriteBlockPaPartial
 
__IO uint8_t MaxBusClkFrec
 
__IO uint8_t WrBlockMisalign
 
__IO uint8_t WrProtectGrSize
 
__IO uint8_t PartBlockRead
 
__IO uint8_t FileFormatGroup
 
__IO uint8_t SysSpecVersion
 
__IO uint8_t MaxWrCurrentVDDMax
 
__IO uint8_t ContentProtectAppli
 
__IO uint8_t DeviceSizeMul
 
__IO uint8_t TempWrProtect
 
__IO uint8_t RdBlockMisalign
 
__IO uint8_t MaxWrCurrentVDDMin
 
__IO uint8_t MaxRdCurrentVDDMin
 
__IO uint8_t MaxRdCurrentVDDMax
 
__IO uint8_t MaxWrBlockLen
 
__IO uint16_t CardComdClasses
 
__IO uint8_t WrProtectGrEnable
 
MMC Card Information Structure definition.
 
MMC handle Structure definition.
 
HAL_MMC_CardInfoTypeDef MmcCard
 
__IO HAL_MMC_StateTypeDef State
 
DMA_HandleTypeDef * hdmatx
 
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