|  | @@ -430,10 +430,6 @@ HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd)
 | 
	
		
			
				|  |  |    /* Enable SDIO Clock */
 | 
	
		
			
				|  |  |    __HAL_SD_ENABLE(hsd);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  /* 1ms: required power up waiting time before starting the SD initialization 
 | 
	
		
			
				|  |  | -     sequence */
 | 
	
		
			
				|  |  | -  HAL_Delay(1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |    /* Identify card operating voltage */
 | 
	
		
			
				|  |  |    errorstate = SD_PowerON(hsd);
 | 
	
		
			
				|  |  |    if(errorstate != HAL_SD_ERROR_NONE)
 | 
	
	
		
			
				|  | @@ -1231,22 +1227,22 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u
 | 
	
		
			
				|  |  |      else
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        /* Enable SD DMA transfer */
 | 
	
		
			
				|  |  | -      // MM disabled, as this fails on fast cards. __HAL_SD_DMA_ENABLE(hsd);
 | 
	
		
			
				|  |  | +      __HAL_SD_DMA_ENABLE(hsd);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  |          add *= 512U;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /* Set Block Size for Card */
 | 
	
		
			
				|  |  | -        errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE);
 | 
	
		
			
				|  |  | -        if(errorstate != HAL_SD_ERROR_NONE)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -          /* Clear all the static flags */
 | 
	
		
			
				|  |  | -          __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
 | 
	
		
			
				|  |  | -          hsd->ErrorCode |= errorstate;
 | 
	
		
			
				|  |  | -          hsd->State = HAL_SD_STATE_READY;
 | 
	
		
			
				|  |  | -          return HAL_ERROR;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +      /* Set Block Size for Card */
 | 
	
		
			
				|  |  | +      errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE);
 | 
	
		
			
				|  |  | +      if(errorstate != HAL_SD_ERROR_NONE)
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +        /* Clear all the static flags */
 | 
	
		
			
				|  |  | +        __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
 | 
	
		
			
				|  |  | +        hsd->ErrorCode |= errorstate;
 | 
	
		
			
				|  |  | +        hsd->State = HAL_SD_STATE_READY;
 | 
	
		
			
				|  |  | +        return HAL_ERROR;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        /* Configure the SD DPSM (Data Path State Machine) */
 | 
	
	
		
			
				|  | @@ -1256,11 +1252,6 @@ HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, u
 | 
	
		
			
				|  |  |        config.TransferDir   = SDIO_TRANSFER_DIR_TO_SDIO;
 | 
	
		
			
				|  |  |        config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 | 
	
		
			
				|  |  |        config.DPSM          = SDIO_DPSM_ENABLE;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // We cannot enable DMA too early on UHS-I class 3 SD cards, or else the
 | 
	
		
			
				|  |  | -      // data is just discarded before the dpsm is started.
 | 
	
		
			
				|  |  | -      __HAL_SD_DMA_ENABLE(hsd);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        (void)SDIO_ConfigData(hsd->Instance, &config);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        /* Read Blocks in DMA mode */
 | 
	
	
		
			
				|  | @@ -1352,17 +1343,17 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData,
 | 
	
		
			
				|  |  |      if(hsd->SdCard.CardType != CARD_SDHC_SDXC)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        add *= 512U;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      /* Set Block Size for Card */
 | 
	
		
			
				|  |  | -      errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE);
 | 
	
		
			
				|  |  | -      if(errorstate != HAL_SD_ERROR_NONE)
 | 
	
		
			
				|  |  | -      {
 | 
	
		
			
				|  |  | -        /* Clear all the static flags */
 | 
	
		
			
				|  |  | -        __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
 | 
	
		
			
				|  |  | -        hsd->ErrorCode |= errorstate;
 | 
	
		
			
				|  |  | -        hsd->State = HAL_SD_STATE_READY;
 | 
	
		
			
				|  |  | -        return HAL_ERROR;
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +    /* Set Block Size for Card */
 | 
	
		
			
				|  |  | +    errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE);
 | 
	
		
			
				|  |  | +    if(errorstate != HAL_SD_ERROR_NONE)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +      /* Clear all the static flags */
 | 
	
		
			
				|  |  | +      __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS);
 | 
	
		
			
				|  |  | +      hsd->ErrorCode |= errorstate;
 | 
	
		
			
				|  |  | +      hsd->State = HAL_SD_STATE_READY;
 | 
	
		
			
				|  |  | +      return HAL_ERROR;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /* Write Blocks in Polling mode */
 | 
	
	
		
			
				|  | @@ -1370,18 +1361,6 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData,
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      /* MM: Prepare for write */
 | 
	
		
			
				|  |  | -/* TODO
 | 
	
		
			
				|  |  | -      SDMMC_CmdAppCommand(hsd->Instance, (uint32_t)(hsd->RCA << 16));
 | 
	
		
			
				|  |  | -      SDIO_CmdInitTypeDef  mm_cmdinit;
 | 
	
		
			
				|  |  | -      mm_cmdinit.Argument         = (uint32_t)NumberOfBlocks;
 | 
	
		
			
				|  |  | -      mm_cmdinit.CmdIndex         = SDMMC_CMD_SET_BLOCK_COUNT;
 | 
	
		
			
				|  |  | -      mm_cmdinit.Response         = SDIO_RESPONSE_SHORT;
 | 
	
		
			
				|  |  | -      mm_cmdinit.WaitForInterrupt = SDIO_WAIT_NO;
 | 
	
		
			
				|  |  | -      mm_cmdinit.CPSM             = SDIO_CPSM_ENABLE;
 | 
	
		
			
				|  |  | -      (void)SDIO_SendCommand(hsd->Instance, &mm_cmdinit);
 | 
	
		
			
				|  |  | -      SDMMC_GetCmdResp1(hsd->Instance, SDMMC_CMD_SET_BLOCK_COUNT, SDIO_CMDTIMEOUT);*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        /* Write Multi Block command */
 | 
	
		
			
				|  |  |        errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -1403,7 +1382,7 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData,
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /* Enable SDIO DMA transfer */
 | 
	
		
			
				|  |  | -    // MM disabled, as this fails on fast cards. __HAL_SD_DMA_ENABLE(hsd);
 | 
	
		
			
				|  |  | +    __HAL_SD_DMA_ENABLE(hsd);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /* Enable the DMA Channel */
 | 
	
		
			
				|  |  |      if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK)
 | 
	
	
		
			
				|  | @@ -1424,11 +1403,6 @@ HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData,
 | 
	
		
			
				|  |  |        config.TransferDir   = SDIO_TRANSFER_DIR_TO_CARD;
 | 
	
		
			
				|  |  |        config.TransferMode  = SDIO_TRANSFER_MODE_BLOCK;
 | 
	
		
			
				|  |  |        config.DPSM          = SDIO_DPSM_ENABLE;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      // We cannot enable DMA too early on UHS-I class 3 SD cards, or else the
 | 
	
		
			
				|  |  | -      // data is just discarded before the dpsm is started.
 | 
	
		
			
				|  |  | -      __HAL_SD_DMA_ENABLE();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        (void)SDIO_ConfigData(hsd->Instance, &config);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        return HAL_OK;
 |