20#ifndef STM32H7xx_LL_SDMMC_H
21#define STM32H7xx_LL_SDMMC_H
33#if defined (SDMMC1) || defined (SDMMC2)
51 uint32_t ClockPowerSave;
58 uint32_t HardwareFlowControl;
64#if (USE_SD_TRANSCEIVER != 0U) || (USE_SDIO_TRANSCEIVER != 0U)
65 uint32_t TranceiverPresent;
87 uint32_t WaitForInterrupt;
94} SDMMC_CmdInitTypeDef;
102 uint32_t DataTimeOut;
106 uint32_t DataBlockSize;
109 uint32_t TransferDir;
113 uint32_t TransferMode;
119} SDMMC_DataInitTypeDef;
129#define SDMMC_ERROR_NONE ((uint32_t)0x00000000U)
130#define SDMMC_ERROR_CMD_CRC_FAIL ((uint32_t)0x00000001U)
131#define SDMMC_ERROR_DATA_CRC_FAIL ((uint32_t)0x00000002U)
132#define SDMMC_ERROR_CMD_RSP_TIMEOUT ((uint32_t)0x00000004U)
133#define SDMMC_ERROR_DATA_TIMEOUT ((uint32_t)0x00000008U)
134#define SDMMC_ERROR_TX_UNDERRUN ((uint32_t)0x00000010U)
135#define SDMMC_ERROR_RX_OVERRUN ((uint32_t)0x00000020U)
136#define SDMMC_ERROR_ADDR_MISALIGNED ((uint32_t)0x00000040U)
137#define SDMMC_ERROR_BLOCK_LEN_ERR ((uint32_t)0x00000080U)
138#define SDMMC_ERROR_ERASE_SEQ_ERR ((uint32_t)0x00000100U)
139#define SDMMC_ERROR_BAD_ERASE_PARAM ((uint32_t)0x00000200U)
140#define SDMMC_ERROR_WRITE_PROT_VIOLATION ((uint32_t)0x00000400U)
141#define SDMMC_ERROR_LOCK_UNLOCK_FAILED ((uint32_t)0x00000800U)
142#define SDMMC_ERROR_COM_CRC_FAILED ((uint32_t)0x00001000U)
143#define SDMMC_ERROR_ILLEGAL_CMD ((uint32_t)0x00002000U)
144#define SDMMC_ERROR_CARD_ECC_FAILED ((uint32_t)0x00004000U)
145#define SDMMC_ERROR_CC_ERR ((uint32_t)0x00008000U)
146#define SDMMC_ERROR_GENERAL_UNKNOWN_ERR ((uint32_t)0x00010000U)
147#define SDMMC_ERROR_STREAM_READ_UNDERRUN ((uint32_t)0x00020000U)
148#define SDMMC_ERROR_STREAM_WRITE_OVERRUN ((uint32_t)0x00040000U)
149#define SDMMC_ERROR_CID_CSD_OVERWRITE ((uint32_t)0x00080000U)
150#define SDMMC_ERROR_WP_ERASE_SKIP ((uint32_t)0x00100000U)
151#define SDMMC_ERROR_CARD_ECC_DISABLED ((uint32_t)0x00200000U)
152#define SDMMC_ERROR_ERASE_RESET ((uint32_t)0x00400000U)
153#define SDMMC_ERROR_AKE_SEQ_ERR ((uint32_t)0x00800000U)
154#define SDMMC_ERROR_INVALID_VOLTRANGE ((uint32_t)0x01000000U)
155#define SDMMC_ERROR_ADDR_OUT_OF_RANGE ((uint32_t)0x02000000U)
156#define SDMMC_ERROR_REQUEST_NOT_APPLICABLE ((uint32_t)0x04000000U)
157#define SDMMC_ERROR_INVALID_PARAMETER ((uint32_t)0x08000000U)
158#define SDMMC_ERROR_UNSUPPORTED_FEATURE ((uint32_t)0x10000000U)
159#define SDMMC_ERROR_BUSY ((uint32_t)0x20000000U)
160#define SDMMC_ERROR_DMA ((uint32_t)0x40000000U)
161#define SDMMC_ERROR_TIMEOUT ((uint32_t)0x80000000U)
167#define SDMMC_SDIO_R5_ERROR ((uint32_t)0x00000400U)
169#define SDMMC_SDIO_R5_OUT_OF_RANGE ((uint32_t)0x00000100U)
171#define SDMMC_SDIO_R5_INVALID_FUNCTION_NUMBER ((uint32_t)0x00000200U)
173#define SDMMC_SDIO_R5_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00000800U)
178#define SDMMC_SDIO_R5_IO_CURRENT_STATE ((uint32_t)0x00003000U)
180#define SDMMC_SDIO_R5_ILLEGAL_CMD ((uint32_t)0x00004000U)
182#define SDMMC_SDIO_R5_COM_CRC_FAILED ((uint32_t)0x00008000U)
184#define SDMMC_SDIO_R5_ERRORBITS (SDMMC_SDIO_R5_COM_CRC_FAILED | \
185 SDMMC_SDIO_R5_ILLEGAL_CMD | \
186 SDMMC_SDIO_R5_GENERAL_UNKNOWN_ERROR | \
187 SDMMC_SDIO_R5_INVALID_FUNCTION_NUMBER | \
188 SDMMC_SDIO_R5_OUT_OF_RANGE)
192#define SDMMC_SDIO_MODE_BYTE 0x00U
193#define SDMMC_SDIO_MODE_BLOCK 0x01U
198#define SDMMC_SDIO_NO_INC 0x00U
199#define SDMMC_SDIO_AUTO_INC 0x01U
204#define SDMMC_SDIO_WO 0x00U
205#define SDMMC_SDIO_RAW 0x01U
210#define SDMMC_CMD_GO_IDLE_STATE 0U
211#define SDMMC_CMD_SEND_OP_COND 1U
212#define SDMMC_CMD_ALL_SEND_CID 2U
213#define SDMMC_CMD_SET_REL_ADDR 3U
214#define SDMMC_CMD_SET_DSR 4U
215#define SDMMC_CMD_SDMMC_SEN_OP_COND 5U
216#define SDMMC_CMD_HS_SWITCH 6U
217#define SDMMC_CMD_SEL_DESEL_CARD 7U
218#define SDMMC_CMD_HS_SEND_EXT_CSD 8U
219#define SDMMC_CMD_SEND_CSD 9U
220#define SDMMC_CMD_SEND_CID 10U
221#define SDMMC_CMD_VOLTAGE_SWITCH 11U
222#define SDMMC_CMD_STOP_TRANSMISSION 12U
223#define SDMMC_CMD_SEND_STATUS 13U
224#define SDMMC_CMD_HS_BUSTEST_READ 14U
225#define SDMMC_CMD_GO_INACTIVE_STATE 15U
226#define SDMMC_CMD_SET_BLOCKLEN 16U
228#define SDMMC_CMD_READ_SINGLE_BLOCK 17U
229#define SDMMC_CMD_READ_MULT_BLOCK 18U
230#define SDMMC_CMD_HS_BUSTEST_WRITE 19U
231#define SDMMC_CMD_WRITE_DAT_UNTIL_STOP 20U
232#define SDMMC_CMD_SET_BLOCK_COUNT 23U
233#define SDMMC_CMD_WRITE_SINGLE_BLOCK 24U
234#define SDMMC_CMD_WRITE_MULT_BLOCK 25U
235#define SDMMC_CMD_PROG_CID 26U
236#define SDMMC_CMD_PROG_CSD 27U
237#define SDMMC_CMD_SET_WRITE_PROT 28U
238#define SDMMC_CMD_CLR_WRITE_PROT 29U
239#define SDMMC_CMD_SEND_WRITE_PROT 30U
240#define SDMMC_CMD_SD_ERASE_GRP_START 32U
241#define SDMMC_CMD_SD_ERASE_GRP_END 33U
242#define SDMMC_CMD_ERASE_GRP_START 35U
243#define SDMMC_CMD_ERASE_GRP_END 36U
244#define SDMMC_CMD_ERASE 38U
245#define SDMMC_CMD_FAST_IO 39U
246#define SDMMC_CMD_GO_IRQ_STATE 40U
247#define SDMMC_CMD_LOCK_UNLOCK 42U
248#define SDMMC_CMD_APP_CMD 55U
249#define SDMMC_CMD_GEN_CMD 56U
250#define SDMMC_CMD_NO_CMD 64U
256#define SDMMC_CMD_APP_SD_SET_BUSWIDTH 6U
257#define SDMMC_CMD_SD_APP_STATUS 13U
258#define SDMMC_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS 22U
259#define SDMMC_CMD_SD_APP_OP_COND 41U
260#define SDMMC_CMD_SD_APP_SET_CLR_CARD_DETECT 42U
261#define SDMMC_CMD_SD_APP_SEND_SCR 51U
262#define SDMMC_CMD_SDMMC_RW_DIRECT 52U
263#define SDMMC_CMD_SDMMC_RW_EXTENDED 53U
268#define SDMMC_CMD_MMC_SLEEP_AWAKE 5U
274#define SDMMC_CMD_SD_APP_GET_MKB 43U
275#define SDMMC_CMD_SD_APP_GET_MID 44U
276#define SDMMC_CMD_SD_APP_SET_CER_RN1 45U
277#define SDMMC_CMD_SD_APP_GET_CER_RN2 46U
278#define SDMMC_CMD_SD_APP_SET_CER_RES2 47U
279#define SDMMC_CMD_SD_APP_GET_CER_RES1 48U
280#define SDMMC_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK 18U
281#define SDMMC_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK 25U
282#define SDMMC_CMD_SD_APP_SECURE_ERASE 38U
283#define SDMMC_CMD_SD_APP_CHANGE_SECURE_AREA 49U
284#define SDMMC_CMD_SD_APP_SECURE_WRITE_MKB 48U
289#define SDMMC_OCR_ADDR_OUT_OF_RANGE ((uint32_t)0x80000000U)
290#define SDMMC_OCR_ADDR_MISALIGNED ((uint32_t)0x40000000U)
291#define SDMMC_OCR_BLOCK_LEN_ERR ((uint32_t)0x20000000U)
292#define SDMMC_OCR_ERASE_SEQ_ERR ((uint32_t)0x10000000U)
293#define SDMMC_OCR_BAD_ERASE_PARAM ((uint32_t)0x08000000U)
294#define SDMMC_OCR_WRITE_PROT_VIOLATION ((uint32_t)0x04000000U)
295#define SDMMC_OCR_LOCK_UNLOCK_FAILED ((uint32_t)0x01000000U)
296#define SDMMC_OCR_COM_CRC_FAILED ((uint32_t)0x00800000U)
297#define SDMMC_OCR_ILLEGAL_CMD ((uint32_t)0x00400000U)
298#define SDMMC_OCR_CARD_ECC_FAILED ((uint32_t)0x00200000U)
299#define SDMMC_OCR_CC_ERROR ((uint32_t)0x00100000U)
300#define SDMMC_OCR_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00080000U)
301#define SDMMC_OCR_STREAM_READ_UNDERRUN ((uint32_t)0x00040000U)
302#define SDMMC_OCR_STREAM_WRITE_OVERRUN ((uint32_t)0x00020000U)
303#define SDMMC_OCR_CID_CSD_OVERWRITE ((uint32_t)0x00010000U)
304#define SDMMC_OCR_WP_ERASE_SKIP ((uint32_t)0x00008000U)
305#define SDMMC_OCR_CARD_ECC_DISABLED ((uint32_t)0x00004000U)
306#define SDMMC_OCR_ERASE_RESET ((uint32_t)0x00002000U)
307#define SDMMC_OCR_AKE_SEQ_ERROR ((uint32_t)0x00000008U)
308#define SDMMC_OCR_ERRORBITS ((uint32_t)0xFDFFE008U)
313#define SDMMC_R6_GENERAL_UNKNOWN_ERROR ((uint32_t)0x00002000U)
314#define SDMMC_R6_ILLEGAL_CMD ((uint32_t)0x00004000U)
315#define SDMMC_R6_COM_CRC_FAILED ((uint32_t)0x00008000U)
317#define SDMMC_VOLTAGE_WINDOW_SD ((uint32_t)0x80100000U)
318#define SDMMC_HIGH_CAPACITY ((uint32_t)0x40000000U)
319#define SDMMC_STD_CAPACITY ((uint32_t)0x00000000U)
320#define SDMMC_CHECK_PATTERN ((uint32_t)0x000001AAU)
321#define SD_SWITCH_1_8V_CAPACITY ((uint32_t)0x01000000U)
322#define SDMMC_DDR50_SWITCH_PATTERN ((uint32_t)0x80FFFF04U)
323#define SDMMC_SDR104_SWITCH_PATTERN ((uint32_t)0x80FF1F03U)
324#define SDMMC_SDR50_SWITCH_PATTERN ((uint32_t)0x80FF1F02U)
325#define SDMMC_SDR25_SWITCH_PATTERN ((uint32_t)0x80FFFF01U)
326#define SDMMC_SDR12_SWITCH_PATTERN ((uint32_t)0x80FFFF00U)
328#define SDMMC_MAX_VOLT_TRIAL ((uint32_t)0x0000FFFFU)
330#define SDMMC_MAX_TRIAL ((uint32_t)0x0000FFFFU)
332#define SDMMC_ALLZERO ((uint32_t)0x00000000U)
334#define SDMMC_WIDE_BUS_SUPPORT ((uint32_t)0x00040000U)
335#define SDMMC_SINGLE_BUS_SUPPORT ((uint32_t)0x00010000U)
336#define SDMMC_CARD_LOCKED ((uint32_t)0x02000000U)
338#ifndef SDMMC_DATATIMEOUT
339#define SDMMC_DATATIMEOUT ((uint32_t)0xFFFFFFFFU)
342#ifndef SDMMC_SWDATATIMEOUT
343#define SDMMC_SWDATATIMEOUT ((uint32_t)0xFFFFFFFFU)
346#define SDMMC_0TO7BITS ((uint32_t)0x000000FFU)
347#define SDMMC_8TO15BITS ((uint32_t)0x0000FF00U)
348#define SDMMC_16TO23BITS ((uint32_t)0x00FF0000U)
349#define SDMMC_24TO31BITS ((uint32_t)0xFF000000U)
350#define SDMMC_MAX_DATA_LENGTH ((uint32_t)0x01FFFFFFU)
352#define SDMMC_HALFFIFO ((uint32_t)0x00000008U)
353#define SDMMC_HALFFIFOBYTES ((uint32_t)0x00000020U)
356#define SDMMC_FIFO_SIZE 32U
360#define SDMMC_CCCC_ERASE ((uint32_t)0x00000020U)
362#define SDMMC_CMDTIMEOUT ((uint32_t)5000U)
363#define SDMMC_MAXERASETIMEOUT ((uint32_t)63000U)
364#define SDMMC_STOPTRANSFERTIMEOUT ((uint32_t)100000000U)
369#define SDMMC_CLOCK_EDGE_RISING ((uint32_t)0x00000000U)
370#define SDMMC_CLOCK_EDGE_FALLING SDMMC_CLKCR_NEGEDGE
372#define IS_SDMMC_CLOCK_EDGE(EDGE) (((EDGE) == SDMMC_CLOCK_EDGE_RISING) || \
373 ((EDGE) == SDMMC_CLOCK_EDGE_FALLING))
381#define SDMMC_CLOCK_POWER_SAVE_DISABLE ((uint32_t)0x00000000U)
382#define SDMMC_CLOCK_POWER_SAVE_ENABLE SDMMC_CLKCR_PWRSAV
384#define IS_SDMMC_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDMMC_CLOCK_POWER_SAVE_DISABLE) || \
385 ((SAVE) == SDMMC_CLOCK_POWER_SAVE_ENABLE))
393#define SDMMC_BUS_WIDE_1B ((uint32_t)0x00000000U)
394#define SDMMC_BUS_WIDE_4B SDMMC_CLKCR_WIDBUS_0
395#define SDMMC_BUS_WIDE_8B SDMMC_CLKCR_WIDBUS_1
397#define IS_SDMMC_BUS_WIDE(WIDE) (((WIDE) == SDMMC_BUS_WIDE_1B) || \
398 ((WIDE) == SDMMC_BUS_WIDE_4B) || \
399 ((WIDE) == SDMMC_BUS_WIDE_8B))
407#define SDMMC_SPEED_MODE_AUTO ((uint32_t)0x00000000U)
408#define SDMMC_SPEED_MODE_DEFAULT ((uint32_t)0x00000001U)
409#define SDMMC_SPEED_MODE_HIGH ((uint32_t)0x00000002U)
410#define SDMMC_SPEED_MODE_ULTRA ((uint32_t)0x00000003U)
411#define SDMMC_SPEED_MODE_ULTRA_SDR104 SDMMC_SPEED_MODE_ULTRA
412#define SDMMC_SPEED_MODE_DDR ((uint32_t)0x00000004U)
413#define SDMMC_SPEED_MODE_ULTRA_SDR50 ((uint32_t)0x00000005U)
415#define IS_SDMMC_SPEED_MODE(MODE) (((MODE) == SDMMC_SPEED_MODE_AUTO) || \
416 ((MODE) == SDMMC_SPEED_MODE_DEFAULT) || \
417 ((MODE) == SDMMC_SPEED_MODE_HIGH) || \
418 ((MODE) == SDMMC_SPEED_MODE_ULTRA) || \
419 ((MODE) == SDMMC_SPEED_MODE_ULTRA_SDR50) || \
420 ((MODE) == SDMMC_SPEED_MODE_DDR))
429#define SDMMC_HARDWARE_FLOW_CONTROL_DISABLE ((uint32_t)0x00000000U)
430#define SDMMC_HARDWARE_FLOW_CONTROL_ENABLE SDMMC_CLKCR_HWFC_EN
432#define IS_SDMMC_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDMMC_HARDWARE_FLOW_CONTROL_DISABLE) || \
433 ((CONTROL) == SDMMC_HARDWARE_FLOW_CONTROL_ENABLE))
442#define IS_SDMMC_CLKDIV(DIV) ((DIV) < 0x400U)
450#define SDMMC_TRANSCEIVER_UNKNOWN ((uint32_t)0x00000000U)
451#define SDMMC_TRANSCEIVER_NOT_PRESENT ((uint32_t)0x00000001U)
452#define SDMMC_TRANSCEIVER_PRESENT ((uint32_t)0x00000002U)
461#define IS_SDMMC_CMD_INDEX(INDEX) ((INDEX) < 0x40U)
469#define SDMMC_RESPONSE_NO ((uint32_t)0x00000000U)
470#define SDMMC_RESPONSE_SHORT SDMMC_CMD_WAITRESP_0
471#define SDMMC_RESPONSE_LONG SDMMC_CMD_WAITRESP
473#define IS_SDMMC_RESPONSE(RESPONSE) (((RESPONSE) == SDMMC_RESPONSE_NO) || \
474 ((RESPONSE) == SDMMC_RESPONSE_SHORT) || \
475 ((RESPONSE) == SDMMC_RESPONSE_LONG))
483#define SDMMC_WAIT_NO ((uint32_t)0x00000000U)
484#define SDMMC_WAIT_IT SDMMC_CMD_WAITINT
485#define SDMMC_WAIT_PEND SDMMC_CMD_WAITPEND
487#define IS_SDMMC_WAIT(WAIT) (((WAIT) == SDMMC_WAIT_NO) || \
488 ((WAIT) == SDMMC_WAIT_IT) || \
489 ((WAIT) == SDMMC_WAIT_PEND))
497#define SDMMC_CPSM_DISABLE ((uint32_t)0x00000000U)
498#define SDMMC_CPSM_ENABLE SDMMC_CMD_CPSMEN
500#define IS_SDMMC_CPSM(CPSM) (((CPSM) == SDMMC_CPSM_DISABLE) || \
501 ((CPSM) == SDMMC_CPSM_ENABLE))
509#define SDMMC_RESP1 ((uint32_t)0x00000000U)
510#define SDMMC_RESP2 ((uint32_t)0x00000004U)
511#define SDMMC_RESP3 ((uint32_t)0x00000008U)
512#define SDMMC_RESP4 ((uint32_t)0x0000000CU)
514#define IS_SDMMC_RESP(RESP) (((RESP) == SDMMC_RESP1) || \
515 ((RESP) == SDMMC_RESP2) || \
516 ((RESP) == SDMMC_RESP3) || \
517 ((RESP) == SDMMC_RESP4))
522#define SDMMC_DISABLE_IDMA ((uint32_t)0x00000000)
523#define SDMMC_ENABLE_IDMA_SINGLE_BUFF (SDMMC_IDMA_IDMAEN)
524#define SDMMC_ENABLE_IDMA_DOUBLE_BUFF0 (SDMMC_IDMA_IDMAEN | SDMMC_IDMA_IDMABMODE)
525#define SDMMC_ENABLE_IDMA_DOUBLE_BUFF1 (SDMMC_IDMA_IDMAEN | SDMMC_IDMA_IDMABMODE | SDMMC_IDMA_IDMABACT)
534#define IS_SDMMC_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFFU)
542#define SDMMC_DATABLOCK_SIZE_1B ((uint32_t)0x00000000U)
543#define SDMMC_DATABLOCK_SIZE_2B SDMMC_DCTRL_DBLOCKSIZE_0
544#define SDMMC_DATABLOCK_SIZE_4B SDMMC_DCTRL_DBLOCKSIZE_1
545#define SDMMC_DATABLOCK_SIZE_8B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_1)
546#define SDMMC_DATABLOCK_SIZE_16B SDMMC_DCTRL_DBLOCKSIZE_2
547#define SDMMC_DATABLOCK_SIZE_32B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_2)
548#define SDMMC_DATABLOCK_SIZE_64B (SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_2)
549#define SDMMC_DATABLOCK_SIZE_128B (SDMMC_DCTRL_DBLOCKSIZE_0| \
550 SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_2)
551#define SDMMC_DATABLOCK_SIZE_256B SDMMC_DCTRL_DBLOCKSIZE_3
552#define SDMMC_DATABLOCK_SIZE_512B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_3)
553#define SDMMC_DATABLOCK_SIZE_1024B (SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_3)
554#define SDMMC_DATABLOCK_SIZE_2048B (SDMMC_DCTRL_DBLOCKSIZE_0| \
555 SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_3)
556#define SDMMC_DATABLOCK_SIZE_4096B (SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
557#define SDMMC_DATABLOCK_SIZE_8192B (SDMMC_DCTRL_DBLOCKSIZE_0| \
558 SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
559#define SDMMC_DATABLOCK_SIZE_16384B (SDMMC_DCTRL_DBLOCKSIZE_1| \
560 SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
562#define IS_SDMMC_BLOCK_SIZE(SIZE) (((SIZE) == SDMMC_DATABLOCK_SIZE_1B) || \
563 ((SIZE) == SDMMC_DATABLOCK_SIZE_2B) || \
564 ((SIZE) == SDMMC_DATABLOCK_SIZE_4B) || \
565 ((SIZE) == SDMMC_DATABLOCK_SIZE_8B) || \
566 ((SIZE) == SDMMC_DATABLOCK_SIZE_16B) || \
567 ((SIZE) == SDMMC_DATABLOCK_SIZE_32B) || \
568 ((SIZE) == SDMMC_DATABLOCK_SIZE_64B) || \
569 ((SIZE) == SDMMC_DATABLOCK_SIZE_128B) || \
570 ((SIZE) == SDMMC_DATABLOCK_SIZE_256B) || \
571 ((SIZE) == SDMMC_DATABLOCK_SIZE_512B) || \
572 ((SIZE) == SDMMC_DATABLOCK_SIZE_1024B) || \
573 ((SIZE) == SDMMC_DATABLOCK_SIZE_2048B) || \
574 ((SIZE) == SDMMC_DATABLOCK_SIZE_4096B) || \
575 ((SIZE) == SDMMC_DATABLOCK_SIZE_8192B) || \
576 ((SIZE) == SDMMC_DATABLOCK_SIZE_16384B))
584#define SDMMC_TRANSFER_DIR_TO_CARD ((uint32_t)0x00000000U)
585#define SDMMC_TRANSFER_DIR_TO_SDMMC SDMMC_DCTRL_DTDIR
587#define IS_SDMMC_TRANSFER_DIR(DIR) (((DIR) == SDMMC_TRANSFER_DIR_TO_CARD) || \
588 ((DIR) == SDMMC_TRANSFER_DIR_TO_SDMMC))
596#define SDMMC_TRANSFER_MODE_BLOCK ((uint32_t)0x00000000U)
597#define SDMMC_TRANSFER_MODE_SDIO SDMMC_DCTRL_DTMODE_0
598#define SDMMC_TRANSFER_MODE_STREAM SDMMC_DCTRL_DTMODE_1
600#define IS_SDMMC_TRANSFER_MODE(MODE) (((MODE) == SDMMC_TRANSFER_MODE_BLOCK) || \
601 ((MODE) == SDMMC_TRANSFER_MODE_SDIO) || \
602 ((MODE) == SDMMC_TRANSFER_MODE_STREAM))
610#define SDMMC_DPSM_DISABLE ((uint32_t)0x00000000U)
611#define SDMMC_DPSM_ENABLE SDMMC_DCTRL_DTEN
613#define IS_SDMMC_DPSM(DPSM) (((DPSM) == SDMMC_DPSM_DISABLE) ||\
614 ((DPSM) == SDMMC_DPSM_ENABLE))
622#define SDMMC_READ_WAIT_MODE_DATA2 ((uint32_t)0x00000000U)
623#define SDMMC_READ_WAIT_MODE_CLK (SDMMC_DCTRL_RWMOD)
625#define IS_SDMMC_READWAIT_MODE(MODE) (((MODE) == SDMMC_READ_WAIT_MODE_CLK) || \
626 ((MODE) == SDMMC_READ_WAIT_MODE_DATA2))
634#define SDMMC_IT_CCRCFAIL SDMMC_MASK_CCRCFAILIE
635#define SDMMC_IT_DCRCFAIL SDMMC_MASK_DCRCFAILIE
636#define SDMMC_IT_CTIMEOUT SDMMC_MASK_CTIMEOUTIE
637#define SDMMC_IT_DTIMEOUT SDMMC_MASK_DTIMEOUTIE
638#define SDMMC_IT_TXUNDERR SDMMC_MASK_TXUNDERRIE
639#define SDMMC_IT_RXOVERR SDMMC_MASK_RXOVERRIE
640#define SDMMC_IT_CMDREND SDMMC_MASK_CMDRENDIE
641#define SDMMC_IT_CMDSENT SDMMC_MASK_CMDSENTIE
642#define SDMMC_IT_DATAEND SDMMC_MASK_DATAENDIE
643#define SDMMC_IT_DHOLD SDMMC_MASK_DHOLDIE
644#define SDMMC_IT_DBCKEND SDMMC_MASK_DBCKENDIE
645#define SDMMC_IT_DABORT SDMMC_MASK_DABORTIE
646#define SDMMC_IT_TXFIFOHE SDMMC_MASK_TXFIFOHEIE
647#define SDMMC_IT_RXFIFOHF SDMMC_MASK_RXFIFOHFIE
648#define SDMMC_IT_RXFIFOF SDMMC_MASK_RXFIFOFIE
649#define SDMMC_IT_TXFIFOE SDMMC_MASK_TXFIFOEIE
650#define SDMMC_IT_BUSYD0END SDMMC_MASK_BUSYD0ENDIE
651#define SDMMC_IT_SDIOIT SDMMC_MASK_SDIOITIE
652#define SDMMC_IT_ACKFAIL SDMMC_MASK_ACKFAILIE
653#define SDMMC_IT_ACKTIMEOUT SDMMC_MASK_ACKTIMEOUTIE
654#define SDMMC_IT_VSWEND SDMMC_MASK_VSWENDIE
655#define SDMMC_IT_CKSTOP SDMMC_MASK_CKSTOPIE
656#define SDMMC_IT_IDMABTC SDMMC_MASK_IDMABTCIE
664#define SDMMC_FLAG_CCRCFAIL SDMMC_STA_CCRCFAIL
665#define SDMMC_FLAG_DCRCFAIL SDMMC_STA_DCRCFAIL
666#define SDMMC_FLAG_CTIMEOUT SDMMC_STA_CTIMEOUT
667#define SDMMC_FLAG_DTIMEOUT SDMMC_STA_DTIMEOUT
668#define SDMMC_FLAG_TXUNDERR SDMMC_STA_TXUNDERR
669#define SDMMC_FLAG_RXOVERR SDMMC_STA_RXOVERR
670#define SDMMC_FLAG_CMDREND SDMMC_STA_CMDREND
671#define SDMMC_FLAG_CMDSENT SDMMC_STA_CMDSENT
672#define SDMMC_FLAG_DATAEND SDMMC_STA_DATAEND
673#define SDMMC_FLAG_DHOLD SDMMC_STA_DHOLD
674#define SDMMC_FLAG_DBCKEND SDMMC_STA_DBCKEND
675#define SDMMC_FLAG_DABORT SDMMC_STA_DABORT
676#define SDMMC_FLAG_DPSMACT SDMMC_STA_DPSMACT
677#define SDMMC_FLAG_CMDACT SDMMC_STA_CPSMACT
678#define SDMMC_FLAG_TXFIFOHE SDMMC_STA_TXFIFOHE
679#define SDMMC_FLAG_RXFIFOHF SDMMC_STA_RXFIFOHF
680#define SDMMC_FLAG_TXFIFOF SDMMC_STA_TXFIFOF
681#define SDMMC_FLAG_RXFIFOF SDMMC_STA_RXFIFOF
682#define SDMMC_FLAG_TXFIFOE SDMMC_STA_TXFIFOE
683#define SDMMC_FLAG_RXFIFOE SDMMC_STA_RXFIFOE
684#define SDMMC_FLAG_BUSYD0 SDMMC_STA_BUSYD0
685#define SDMMC_FLAG_BUSYD0END SDMMC_STA_BUSYD0END
686#define SDMMC_FLAG_SDIOIT SDMMC_STA_SDIOIT
687#define SDMMC_FLAG_ACKFAIL SDMMC_STA_ACKFAIL
688#define SDMMC_FLAG_ACKTIMEOUT SDMMC_STA_ACKTIMEOUT
689#define SDMMC_FLAG_VSWEND SDMMC_STA_VSWEND
690#define SDMMC_FLAG_CKSTOP SDMMC_STA_CKSTOP
691#define SDMMC_FLAG_IDMATE SDMMC_STA_IDMATE
692#define SDMMC_FLAG_IDMABTC SDMMC_STA_IDMABTC
694#define SDMMC_STATIC_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_CTIMEOUT |\
695 SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_RXOVERR |\
696 SDMMC_FLAG_CMDREND | SDMMC_FLAG_CMDSENT | SDMMC_FLAG_DATAEND |\
697 SDMMC_FLAG_DHOLD | SDMMC_FLAG_DBCKEND | SDMMC_FLAG_DABORT |\
698 SDMMC_FLAG_BUSYD0END | SDMMC_FLAG_SDIOIT | SDMMC_FLAG_ACKFAIL |\
699 SDMMC_FLAG_ACKTIMEOUT | SDMMC_FLAG_VSWEND | SDMMC_FLAG_CKSTOP |\
700 SDMMC_FLAG_IDMATE | SDMMC_FLAG_IDMABTC))
702#define SDMMC_STATIC_CMD_FLAGS ((uint32_t)(SDMMC_FLAG_CCRCFAIL | SDMMC_FLAG_CTIMEOUT | SDMMC_FLAG_CMDREND |\
703 SDMMC_FLAG_CMDSENT | SDMMC_FLAG_BUSYD0END))
705#define SDMMC_STATIC_DATA_FLAGS ((uint32_t)(SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_TXUNDERR |\
706 SDMMC_FLAG_RXOVERR | SDMMC_FLAG_DATAEND | SDMMC_FLAG_DHOLD |\
707 SDMMC_FLAG_DBCKEND | SDMMC_FLAG_DABORT | SDMMC_FLAG_IDMATE |\
717#define SDMMC_SDIO_CCCR0 0x000U
718#define SDMMC_SDIO_CCCR0_SD_BYTE0 0x000U
719#define SDMMC_SDIO_CCCR0_SD_BYTE1 0x001U
720#define SDMMC_SDIO_CCCR0_SD_BYTE2 0x002U
721#define SDMMC_SDIO_CCCR0_SD_BYTE3 0x003U
724#define SDMMC_SDIO_CCCR4 0x004U
725#define SDMMC_SDIO_CCCR4_SD_BYTE0 0x004U
726#define SDMMC_SDIO_CCCR4_SD_BYTE1 0x005U
727#define SDMMC_SDIO_CCCR4_SD_BYTE2 0x006U
728#define SDMMC_SDIO_CCCR4_SD_BYTE3 0x007U
731#define SDMMC_SDIO_CCCR8 0x008U
732#define SDMMC_SDIO_CCCR8_SD_BYTE0 0x008U
733#define SDMMC_SDIO_CCCR8_SD_BYTE1 0x009U
734#define SDMMC_SDIO_CCCR8_SD_BYTE2 0x00AU
735#define SDMMC_SDIO_CCCR8_SD_BYTE3 0x00BU
738#define SDMMC_SDIO_CCCR12 0x00CU
739#define SDMMC_SDIO_CCCR12_SD_BYTE0 0x00CU
740#define SDMMC_SDIO_CCCR12_SD_BYTE1 0x00DU
741#define SDMMC_SDIO_CCCR12_SD_BYTE2 0x00EU
742#define SDMMC_SDIO_CCCR12_SD_BYTE3 0x00FU
745#define SDMMC_SDIO_CCCR16 0x010U
746#define SDMMC_SDIO_CCCR16_SD_BYTE0 0x010U
747#define SDMMC_SDIO_CCCR16_SD_BYTE1 0x011U
748#define SDMMC_SDIO_CCCR16_SD_BYTE2 0x012U
749#define SDMMC_SDIO_CCCR16_SD_BYTE3 0x013U
752#define SDMMC_SDIO_CCCR20 0x014U
753#define SDMMC_SDIO_CCCR20_SD_BYTE0 0x014U
754#define SDMMC_SDIO_CCCR20_SD_BYTE1 0x015U
755#define SDMMC_SDIO_CCCR20_SD_BYTE2 0x016U
756#define SDMMC_SDIO_CCCR20_SD_BYTE3 0x017U
759#define SDMMC_SDIO_F1BR0 0x100U
760#define SDMMC_SDIO_F1BR0_SD_BYTE0 0x100U
761#define SDMMC_SDIO_F1BR0_SD_BYTE1 0x101U
762#define SDMMC_SDIO_F1BR0_SD_BYTE2 0x102U
763#define SDMMC_SDIO_F1BR0_SD_BYTE3 0x103U
766#define SDMMC_SDIO_F1BR8 0x108U
767#define SDMMC_SDIO_F1BR8_SD_BYTE0 0x108U
768#define SDMMC_SDIO_F1BR8_SD_BYTE1 0x109U
769#define SDMMC_SDIO_F1BR8_SD_BYTE2 0x10AU
770#define SDMMC_SDIO_F1BR8_SD_BYTE3 0x10BU
773#define SDMMC_SDIO_F1BR12 0x10CU
774#define SDMMC_SDIO_F1BR12_SD_BYTE0 0x10CU
775#define SDMMC_SDIO_F1BR12_SD_BYTE1 0x10DU
776#define SDMMC_SDIO_F1BR12_SD_BYTE2 0x10EU
777#define SDMMC_SDIO_F1BR12_SD_BYTE3 0x10FU
780#define SDMMC_SDIO_F1BR16 0x110U
781#define SDMMC_SDIO_F1BR16_SD_BYTE0 0x110U
782#define SDMMC_SDIO_F1BR16_SD_BYTE1 0x111U
783#define SDMMC_SDIO_F1BR16_SD_BYTE2 0x112U
784#define SDMMC_SDIO_F1BR16_SD_BYTE3 0x113U
805#define CLKCR_CLEAR_MASK ((uint32_t)(SDMMC_CLKCR_CLKDIV | SDMMC_CLKCR_PWRSAV |\
806 SDMMC_CLKCR_WIDBUS |\
807 SDMMC_CLKCR_NEGEDGE | SDMMC_CLKCR_HWFC_EN |\
808 SDMMC_CLKCR_DDR | SDMMC_CLKCR_BUSSPEED |\
809 SDMMC_CLKCR_SELCLKRX))
813#define DCTRL_CLEAR_MASK ((uint32_t)(SDMMC_DCTRL_DTEN | SDMMC_DCTRL_DTDIR |\
814 SDMMC_DCTRL_DTMODE | SDMMC_DCTRL_DBLOCKSIZE))
818#define CMD_CLEAR_MASK ((uint32_t)(SDMMC_CMD_CMDINDEX | SDMMC_CMD_WAITRESP |\
819 SDMMC_CMD_WAITINT | SDMMC_CMD_WAITPEND |\
820 SDMMC_CMD_CPSMEN | SDMMC_CMD_CMDSUSPEND))
823#define SDMMC_INIT_CLK_DIV ((uint8_t)0xFA)
826#define SDMMC_NSPEED_CLK_DIV ((uint8_t)0x4)
829#define SDMMC_HSPEED_CLK_DIV ((uint8_t)0x2)
869#define __SDMMC_ENABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK |= (__INTERRUPT__))
901#define __SDMMC_DISABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK &= ~(__INTERRUPT__))
939#define __SDMMC_GET_FLAG(__INSTANCE__, __FLAG__) (((__INSTANCE__)->STA &(__FLAG__)) != 0U)
969#define __SDMMC_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->ICR = (__FLAG__))
1001#define __SDMMC_GET_IT(__INSTANCE__, __INTERRUPT__) (((__INSTANCE__)->STA &(__INTERRUPT__)) == (__INTERRUPT__))
1033#define __SDMMC_GET_IT_SOURCE(__INSTANCE__, __INTERRUPT__) (((__HANDLE__)->Instance->STA & (__INTERRUPT__)))
1061#define __SDMMC_CLEAR_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->ICR = (__INTERRUPT__))
1068#define __SDMMC_START_READWAIT_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_RWSTART)
1075#define __SDMMC_START_READWAIT_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_RWSTART)
1082#define __SDMMC_STOP_READWAIT_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_RWSTOP)
1089#define __SDMMC_STOP_READWAIT_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_RWSTOP)
1096#define __SDMMC_OPERATION_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_SDIOEN)
1103#define __SDMMC_OPERATION_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_SDIOEN)
1110#define __SDMMC_SUSPEND_CMD_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_CMDSUSPEND)
1117#define __SDMMC_SUSPEND_CMD_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_CMDSUSPEND)
1124#define __SDMMC_CMDTRANS_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_CMDTRANS)
1131#define __SDMMC_CMDTRANS_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_CMDTRANS)
1138#define __SDMMC_CMDSTOP_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_CMDSTOP)
1145#define __SDMMC_CMDSTOP_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_CMDSTOP)
1190uint8_t SDMMC_GetCommandResponse(
const SDMMC_TypeDef *SDMMCx);
1191uint32_t SDMMC_GetResponse(
const SDMMC_TypeDef *SDMMCx, uint32_t Response);
1208uint32_t SDMMC_CmdBlockLength(
SDMMC_TypeDef *SDMMCx, uint32_t BlockSize);
1209uint32_t SDMMC_CmdReadSingleBlock(
SDMMC_TypeDef *SDMMCx, uint32_t ReadAdd);
1210uint32_t SDMMC_CmdReadMultiBlock(
SDMMC_TypeDef *SDMMCx, uint32_t ReadAdd);
1211uint32_t SDMMC_CmdWriteSingleBlock(
SDMMC_TypeDef *SDMMCx, uint32_t WriteAdd);
1212uint32_t SDMMC_CmdWriteMultiBlock(
SDMMC_TypeDef *SDMMCx, uint32_t WriteAdd);
1213uint32_t SDMMC_CmdEraseStartAdd(
SDMMC_TypeDef *SDMMCx, uint32_t StartAdd);
1214uint32_t SDMMC_CmdSDEraseStartAdd(
SDMMC_TypeDef *SDMMCx, uint32_t StartAdd);
1215uint32_t SDMMC_CmdEraseEndAdd(
SDMMC_TypeDef *SDMMCx, uint32_t EndAdd);
1216uint32_t SDMMC_CmdSDEraseEndAdd(
SDMMC_TypeDef *SDMMCx, uint32_t EndAdd);
1217uint32_t SDMMC_CmdErase(
SDMMC_TypeDef *SDMMCx, uint32_t EraseType);
1219uint32_t SDMMC_CmdSelDesel(
SDMMC_TypeDef *SDMMCx, uint32_t Addr);
1222uint32_t SDMMC_CmdAppCommand(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1223uint32_t SDMMC_CmdAppOperCommand(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1224uint32_t SDMMC_CmdBusWidth(
SDMMC_TypeDef *SDMMCx, uint32_t BusWidth);
1227uint32_t SDMMC_CmdSendCSD(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1228uint32_t SDMMC_CmdSetRelAdd(
SDMMC_TypeDef *SDMMCx, uint16_t *pRCA);
1229uint32_t SDMMC_CmdSetRelAddMmc(
SDMMC_TypeDef *SDMMCx, uint16_t RCA);
1230uint32_t SDMMC_CmdSleepMmc(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1231uint32_t SDMMC_CmdSendStatus(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1234uint32_t SDMMC_CmdOpCondition(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1235uint32_t SDMMC_CmdSwitch(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1236uint32_t SDMMC_CmdSendEXTCSD(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1237uint32_t SDMMC_CmdBlockCount(
SDMMC_TypeDef *SDMMCx, uint32_t BlockCount);
1238uint32_t SDMMC_SDIO_CmdReadWriteDirect(
SDMMC_TypeDef *SDMMCx, uint32_t Argument, uint8_t *pResponse);
1239uint32_t SDMMC_SDIO_CmdReadWriteExtended(
SDMMC_TypeDef *SDMMCx, uint32_t Argument);
1240uint32_t SDMMC_CmdSendOperationcondition(
SDMMC_TypeDef *SDMMCx, uint32_t Argument, uint32_t *pResp);
1249uint32_t SDMMC_GetCmdResp1(
SDMMC_TypeDef *SDMMCx, uint8_t SD_CMD, uint32_t Timeout);
1252uint32_t SDMMC_GetCmdResp4(
SDMMC_TypeDef *SDMMCx, uint32_t *pResp);
1253uint32_t SDMMC_GetCmdResp5(
SDMMC_TypeDef *SDMMCx, uint8_t SDIO_CMD, uint8_t *pData);
1254uint32_t SDMMC_GetCmdResp6(
SDMMC_TypeDef *SDMMCx, uint8_t SD_CMD, uint16_t *pRCA);
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition.
Secure digital input/output Interface.