47#if defined (SDMMC1) || defined (SDMMC2)
48#ifdef HAL_SD_MODULE_ENABLED
84HAL_StatusTypeDef HAL_SDEx_ConfigDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t *pDataBuffer0, uint32_t *pDataBuffer1,
87 if (hsd->State == HAL_SD_STATE_READY)
89 hsd->Instance->IDMABASE0 = (uint32_t) pDataBuffer0;
90 hsd->Instance->IDMABASE1 = (uint32_t) pDataBuffer1;
91 hsd->Instance->IDMABSIZE = (uint32_t)(BLOCKSIZE * BufferSize);
110HAL_StatusTypeDef HAL_SDEx_ReadBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks)
112 SDMMC_DataInitTypeDef
config;
114 uint32_t DmaBase0_reg;
115 uint32_t DmaBase1_reg;
116 uint32_t add = BlockAdd;
118 if (hsd->State == HAL_SD_STATE_READY)
120 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
122 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
126 DmaBase0_reg = hsd->Instance->IDMABASE0;
127 DmaBase1_reg = hsd->Instance->IDMABASE1;
129 if ((hsd->Instance->IDMABSIZE == 0U) || (DmaBase0_reg == 0U) || (DmaBase1_reg == 0U))
131 hsd->ErrorCode = HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
136 hsd->Instance->DCTRL = 0;
138 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS);
140 hsd->ErrorCode = HAL_SD_ERROR_NONE;
141 hsd->State = HAL_SD_STATE_BUSY;
143 if (hsd->SdCard.CardType != CARD_SDHC_SDXC)
149 config.DataTimeOut = SDMMC_DATATIMEOUT;
150 config.DataLength = BLOCKSIZE * NumberOfBlocks;
151 config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B;
152 config.TransferDir = SDMMC_TRANSFER_DIR_TO_SDMMC;
153 config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK;
154 config.DPSM = SDMMC_DPSM_DISABLE;
155 (void)SDMMC_ConfigData(hsd->Instance, &
config);
159 __SDMMC_CMDTRANS_ENABLE(hsd->Instance);
161 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_DOUBLE_BUFF0;
164 hsd->Context = (SD_CONTEXT_READ_MULTIPLE_BLOCK | SD_CONTEXT_DMA);
167 errorstate = SDMMC_CmdReadMultiBlock(hsd->Instance, add);
168 if (errorstate != HAL_SD_ERROR_NONE)
170 hsd->State = HAL_SD_STATE_READY;
171 hsd->ErrorCode |= errorstate;
175 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_RXOVERR | SDMMC_IT_DATAEND |
196HAL_StatusTypeDef HAL_SDEx_WriteBlocksDMAMultiBuffer(SD_HandleTypeDef *hsd, uint32_t BlockAdd, uint32_t NumberOfBlocks)
198 SDMMC_DataInitTypeDef
config;
200 uint32_t DmaBase0_reg;
201 uint32_t DmaBase1_reg;
202 uint32_t add = BlockAdd;
204 if (hsd->State == HAL_SD_STATE_READY)
206 if ((add + NumberOfBlocks) > (hsd->SdCard.LogBlockNbr))
208 hsd->ErrorCode |= HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
212 DmaBase0_reg = hsd->Instance->IDMABASE0;
213 DmaBase1_reg = hsd->Instance->IDMABASE1;
214 if ((hsd->Instance->IDMABSIZE == 0U) || (DmaBase0_reg == 0U) || (DmaBase1_reg == 0U))
216 hsd->ErrorCode = HAL_SD_ERROR_ADDR_OUT_OF_RANGE;
221 hsd->Instance->DCTRL = 0;
223 hsd->ErrorCode = HAL_SD_ERROR_NONE;
225 hsd->State = HAL_SD_STATE_BUSY;
227 if (hsd->SdCard.CardType != CARD_SDHC_SDXC)
233 config.DataTimeOut = SDMMC_DATATIMEOUT;
234 config.DataLength = BLOCKSIZE * NumberOfBlocks;
235 config.DataBlockSize = SDMMC_DATABLOCK_SIZE_512B;
236 config.TransferDir = SDMMC_TRANSFER_DIR_TO_CARD;
237 config.TransferMode = SDMMC_TRANSFER_MODE_BLOCK;
238 config.DPSM = SDMMC_DPSM_DISABLE;
239 (void)SDMMC_ConfigData(hsd->Instance, &
config);
241 __SDMMC_CMDTRANS_ENABLE(hsd->Instance);
243 hsd->Instance->IDMACTRL = SDMMC_ENABLE_IDMA_DOUBLE_BUFF0;
246 hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA);
249 errorstate = SDMMC_CmdWriteMultiBlock(hsd->Instance, add);
250 if (errorstate != HAL_SD_ERROR_NONE)
252 hsd->State = HAL_SD_STATE_READY;
253 hsd->ErrorCode |= errorstate;
257 __HAL_SD_ENABLE_IT(hsd, (SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT | SDMMC_IT_TXUNDERR | SDMMC_IT_DATAEND |
280HAL_StatusTypeDef HAL_SDEx_ChangeDMABuffer(SD_HandleTypeDef *hsd, HAL_SDEx_DMABuffer_MemoryTypeDef Buffer,
281 uint32_t *pDataBuffer)
283 if (Buffer == SD_DMA_BUFFER0)
286 hsd->Instance->IDMABASE0 = (uint32_t)pDataBuffer;
291 hsd->Instance->IDMABASE1 = (uint32_t)pDataBuffer;
#define SDMMC_DCTRL_FIFORST
FIFO reset.
static const idle_config_t config
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef
HAL Status structures definition.