20#ifndef STM32F4xx_LL_SDMMC_H
21#define STM32F4xx_LL_SDMMC_H
57 uint32_t ClockPowerSave;
64 uint32_t HardwareFlowControl;
89 uint32_t WaitForInterrupt;
104 uint32_t DataTimeOut;
108 uint32_t DataBlockSize;
111 uint32_t TransferDir;
115 uint32_t TransferMode;
121}SDIO_DataInitTypeDef;
131#define SDMMC_ERROR_NONE 0x00000000U
132#define SDMMC_ERROR_CMD_CRC_FAIL 0x00000001U
133#define SDMMC_ERROR_DATA_CRC_FAIL 0x00000002U
134#define SDMMC_ERROR_CMD_RSP_TIMEOUT 0x00000004U
135#define SDMMC_ERROR_DATA_TIMEOUT 0x00000008U
136#define SDMMC_ERROR_TX_UNDERRUN 0x00000010U
137#define SDMMC_ERROR_RX_OVERRUN 0x00000020U
138#define SDMMC_ERROR_ADDR_MISALIGNED 0x00000040U
139#define SDMMC_ERROR_BLOCK_LEN_ERR 0x00000080U
141#define SDMMC_ERROR_ERASE_SEQ_ERR 0x00000100U
142#define SDMMC_ERROR_BAD_ERASE_PARAM 0x00000200U
143#define SDMMC_ERROR_WRITE_PROT_VIOLATION 0x00000400U
144#define SDMMC_ERROR_LOCK_UNLOCK_FAILED 0x00000800U
146#define SDMMC_ERROR_COM_CRC_FAILED 0x00001000U
147#define SDMMC_ERROR_ILLEGAL_CMD 0x00002000U
148#define SDMMC_ERROR_CARD_ECC_FAILED 0x00004000U
149#define SDMMC_ERROR_CC_ERR 0x00008000U
150#define SDMMC_ERROR_GENERAL_UNKNOWN_ERR 0x00010000U
151#define SDMMC_ERROR_STREAM_READ_UNDERRUN 0x00020000U
152#define SDMMC_ERROR_STREAM_WRITE_OVERRUN 0x00040000U
153#define SDMMC_ERROR_CID_CSD_OVERWRITE 0x00080000U
154#define SDMMC_ERROR_WP_ERASE_SKIP 0x00100000U
155#define SDMMC_ERROR_CARD_ECC_DISABLED 0x00200000U
156#define SDMMC_ERROR_ERASE_RESET 0x00400000U
158#define SDMMC_ERROR_AKE_SEQ_ERR 0x00800000U
159#define SDMMC_ERROR_INVALID_VOLTRANGE 0x01000000U
160#define SDMMC_ERROR_ADDR_OUT_OF_RANGE 0x02000000U
161#define SDMMC_ERROR_REQUEST_NOT_APPLICABLE 0x04000000U
162#define SDMMC_ERROR_INVALID_PARAMETER 0x08000000U
163#define SDMMC_ERROR_UNSUPPORTED_FEATURE 0x10000000U
164#define SDMMC_ERROR_BUSY 0x20000000U
165#define SDMMC_ERROR_DMA 0x40000000U
166#define SDMMC_ERROR_TIMEOUT 0x80000000U
171#define SDMMC_CMD_GO_IDLE_STATE 0U
172#define SDMMC_CMD_SEND_OP_COND 1U
173#define SDMMC_CMD_ALL_SEND_CID 2U
174#define SDMMC_CMD_SET_REL_ADDR 3U
175#define SDMMC_CMD_SET_DSR 4U
176#define SDMMC_CMD_SDMMC_SEN_OP_COND 5U
178#define SDMMC_CMD_HS_SWITCH 6U
179#define SDMMC_CMD_SEL_DESEL_CARD 7U
180#define SDMMC_CMD_HS_SEND_EXT_CSD 8U
182#define SDMMC_CMD_SEND_CSD 9U
183#define SDMMC_CMD_SEND_CID 10U
184#define SDMMC_CMD_READ_DAT_UNTIL_STOP 11U
185#define SDMMC_CMD_STOP_TRANSMISSION 12U
186#define SDMMC_CMD_SEND_STATUS 13U
187#define SDMMC_CMD_HS_BUSTEST_READ 14U
188#define SDMMC_CMD_GO_INACTIVE_STATE 15U
189#define SDMMC_CMD_SET_BLOCKLEN 16U
192#define SDMMC_CMD_READ_SINGLE_BLOCK 17U
194#define SDMMC_CMD_READ_MULT_BLOCK 18U
196#define SDMMC_CMD_HS_BUSTEST_WRITE 19U
197#define SDMMC_CMD_WRITE_DAT_UNTIL_STOP 20U
198#define SDMMC_CMD_SET_BLOCK_COUNT 23U
199#define SDMMC_CMD_WRITE_SINGLE_BLOCK 24U
201#define SDMMC_CMD_WRITE_MULT_BLOCK 25U
202#define SDMMC_CMD_PROG_CID 26U
203#define SDMMC_CMD_PROG_CSD 27U
204#define SDMMC_CMD_SET_WRITE_PROT 28U
205#define SDMMC_CMD_CLR_WRITE_PROT 29U
206#define SDMMC_CMD_SEND_WRITE_PROT 30U
207#define SDMMC_CMD_SD_ERASE_GRP_START 32U
208#define SDMMC_CMD_SD_ERASE_GRP_END 33U
209#define SDMMC_CMD_ERASE_GRP_START 35U
211#define SDMMC_CMD_ERASE_GRP_END 36U
213#define SDMMC_CMD_ERASE 38U
214#define SDMMC_CMD_FAST_IO 39U
215#define SDMMC_CMD_GO_IRQ_STATE 40U
216#define SDMMC_CMD_LOCK_UNLOCK 42U
218#define SDMMC_CMD_APP_CMD 55U
220#define SDMMC_CMD_GEN_CMD 56U
222#define SDMMC_CMD_NO_CMD 64U
228#define SDMMC_CMD_APP_SD_SET_BUSWIDTH 6U
230#define SDMMC_CMD_SD_APP_STATUS 13U
231#define SDMMC_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS 22U
233#define SDMMC_CMD_SD_APP_OP_COND 41U
235#define SDMMC_CMD_SD_APP_SET_CLR_CARD_DETECT 42U
236#define SDMMC_CMD_SD_APP_SEND_SCR 51U
237#define SDMMC_CMD_SDMMC_RW_DIRECT 52U
238#define SDMMC_CMD_SDMMC_RW_EXTENDED 53U
244#define SDMMC_CMD_SD_APP_GET_MKB 43U
245#define SDMMC_CMD_SD_APP_GET_MID 44U
246#define SDMMC_CMD_SD_APP_SET_CER_RN1 45U
247#define SDMMC_CMD_SD_APP_GET_CER_RN2 46U
248#define SDMMC_CMD_SD_APP_SET_CER_RES2 47U
249#define SDMMC_CMD_SD_APP_GET_CER_RES1 48U
250#define SDMMC_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK 18U
251#define SDMMC_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK 25U
252#define SDMMC_CMD_SD_APP_SECURE_ERASE 38U
253#define SDMMC_CMD_SD_APP_CHANGE_SECURE_AREA 49U
254#define SDMMC_CMD_SD_APP_SECURE_WRITE_MKB 48U
259#define SDMMC_OCR_ADDR_OUT_OF_RANGE 0x80000000U
260#define SDMMC_OCR_ADDR_MISALIGNED 0x40000000U
261#define SDMMC_OCR_BLOCK_LEN_ERR 0x20000000U
262#define SDMMC_OCR_ERASE_SEQ_ERR 0x10000000U
263#define SDMMC_OCR_BAD_ERASE_PARAM 0x08000000U
264#define SDMMC_OCR_WRITE_PROT_VIOLATION 0x04000000U
265#define SDMMC_OCR_LOCK_UNLOCK_FAILED 0x01000000U
266#define SDMMC_OCR_COM_CRC_FAILED 0x00800000U
267#define SDMMC_OCR_ILLEGAL_CMD 0x00400000U
268#define SDMMC_OCR_CARD_ECC_FAILED 0x00200000U
269#define SDMMC_OCR_CC_ERROR 0x00100000U
270#define SDMMC_OCR_GENERAL_UNKNOWN_ERROR 0x00080000U
271#define SDMMC_OCR_STREAM_READ_UNDERRUN 0x00040000U
272#define SDMMC_OCR_STREAM_WRITE_OVERRUN 0x00020000U
273#define SDMMC_OCR_CID_CSD_OVERWRITE 0x00010000U
274#define SDMMC_OCR_WP_ERASE_SKIP 0x00008000U
275#define SDMMC_OCR_CARD_ECC_DISABLED 0x00004000U
276#define SDMMC_OCR_ERASE_RESET 0x00002000U
277#define SDMMC_OCR_AKE_SEQ_ERROR 0x00000008U
278#define SDMMC_OCR_ERRORBITS 0xFDFFE008U
283#define SDMMC_R6_GENERAL_UNKNOWN_ERROR 0x00002000U
284#define SDMMC_R6_ILLEGAL_CMD 0x00004000U
285#define SDMMC_R6_COM_CRC_FAILED 0x00008000U
287#define SDMMC_VOLTAGE_WINDOW_SD 0x80100000U
288#define SDMMC_HIGH_CAPACITY 0x40000000U
289#define SDMMC_STD_CAPACITY 0x00000000U
290#define SDMMC_CHECK_PATTERN 0x000001AAU
291#define SD_SWITCH_1_8V_CAPACITY 0x01000000U
293#define SDMMC_MAX_VOLT_TRIAL 0x0000FFFFU
295#define SDMMC_MAX_TRIAL 0x0000FFFFU
297#define SDMMC_ALLZERO 0x00000000U
299#define SDMMC_WIDE_BUS_SUPPORT 0x00040000U
300#define SDMMC_SINGLE_BUS_SUPPORT 0x00010000U
301#define SDMMC_CARD_LOCKED 0x02000000U
303#ifndef SDMMC_DATATIMEOUT
304#define SDMMC_DATATIMEOUT ((uint32_t)0xFFFFFFFFU)
307#ifndef SDMMC_SWDATATIMEOUT
308#define SDMMC_SWDATATIMEOUT SDMMC_DATATIMEOUT
311#define SDMMC_0TO7BITS 0x000000FFU
312#define SDMMC_8TO15BITS 0x0000FF00U
313#define SDMMC_16TO23BITS 0x00FF0000U
314#define SDMMC_24TO31BITS 0xFF000000U
315#define SDMMC_MAX_DATA_LENGTH 0x01FFFFFFU
317#define SDMMC_HALFFIFO 0x00000008U
318#define SDMMC_HALFFIFOBYTES 0x00000020U
323#define SDIO_CCCC_ERASE 0x00000020U
325#define SDIO_CMDTIMEOUT 5000U
326#define SDIO_MAXERASETIMEOUT 63000U
327#define SDIO_STOPTRANSFERTIMEOUT 100000000U
332#define SDIO_CLOCK_EDGE_RISING 0x00000000U
333#define SDIO_CLOCK_EDGE_FALLING SDIO_CLKCR_NEGEDGE
335#define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_CLOCK_EDGE_RISING) || \
336 ((EDGE) == SDIO_CLOCK_EDGE_FALLING))
344#define SDIO_CLOCK_BYPASS_DISABLE 0x00000000U
345#define SDIO_CLOCK_BYPASS_ENABLE SDIO_CLKCR_BYPASS
347#define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_CLOCK_BYPASS_DISABLE) || \
348 ((BYPASS) == SDIO_CLOCK_BYPASS_ENABLE))
356#define SDIO_CLOCK_POWER_SAVE_DISABLE 0x00000000U
357#define SDIO_CLOCK_POWER_SAVE_ENABLE SDIO_CLKCR_PWRSAV
359#define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_CLOCK_POWER_SAVE_DISABLE) || \
360 ((SAVE) == SDIO_CLOCK_POWER_SAVE_ENABLE))
368#define SDIO_BUS_WIDE_1B 0x00000000U
369#define SDIO_BUS_WIDE_4B SDIO_CLKCR_WIDBUS_0
370#define SDIO_BUS_WIDE_8B SDIO_CLKCR_WIDBUS_1
372#define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BUS_WIDE_1B) || \
373 ((WIDE) == SDIO_BUS_WIDE_4B) || \
374 ((WIDE) == SDIO_BUS_WIDE_8B))
382#define SDIO_HARDWARE_FLOW_CONTROL_DISABLE 0x00000000U
383#define SDIO_HARDWARE_FLOW_CONTROL_ENABLE SDIO_CLKCR_HWFC_EN
385#define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HARDWARE_FLOW_CONTROL_DISABLE) || \
386 ((CONTROL) == SDIO_HARDWARE_FLOW_CONTROL_ENABLE))
394#define IS_SDIO_CLKDIV(DIV) ((DIV) <= 0xFFU)
402#define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40U)
410#define SDIO_RESPONSE_NO 0x00000000U
411#define SDIO_RESPONSE_SHORT SDIO_CMD_WAITRESP_0
412#define SDIO_RESPONSE_LONG SDIO_CMD_WAITRESP
414#define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_RESPONSE_NO) || \
415 ((RESPONSE) == SDIO_RESPONSE_SHORT) || \
416 ((RESPONSE) == SDIO_RESPONSE_LONG))
424#define SDIO_WAIT_NO 0x00000000U
425#define SDIO_WAIT_IT SDIO_CMD_WAITINT
426#define SDIO_WAIT_PEND SDIO_CMD_WAITPEND
428#define IS_SDIO_WAIT(WAIT) (((WAIT) == SDIO_WAIT_NO) || \
429 ((WAIT) == SDIO_WAIT_IT) || \
430 ((WAIT) == SDIO_WAIT_PEND))
438#define SDIO_CPSM_DISABLE 0x00000000U
439#define SDIO_CPSM_ENABLE SDIO_CMD_CPSMEN
441#define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_DISABLE) || \
442 ((CPSM) == SDIO_CPSM_ENABLE))
450#define SDIO_RESP1 0x00000000U
451#define SDIO_RESP2 0x00000004U
452#define SDIO_RESP3 0x00000008U
453#define SDIO_RESP4 0x0000000CU
455#define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || \
456 ((RESP) == SDIO_RESP2) || \
457 ((RESP) == SDIO_RESP3) || \
458 ((RESP) == SDIO_RESP4))
466#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFFU)
474#define SDIO_DATABLOCK_SIZE_1B 0x00000000U
475#define SDIO_DATABLOCK_SIZE_2B SDIO_DCTRL_DBLOCKSIZE_0
476#define SDIO_DATABLOCK_SIZE_4B SDIO_DCTRL_DBLOCKSIZE_1
477#define SDIO_DATABLOCK_SIZE_8B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_1)
478#define SDIO_DATABLOCK_SIZE_16B SDIO_DCTRL_DBLOCKSIZE_2
479#define SDIO_DATABLOCK_SIZE_32B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_2)
480#define SDIO_DATABLOCK_SIZE_64B (SDIO_DCTRL_DBLOCKSIZE_1|SDIO_DCTRL_DBLOCKSIZE_2)
481#define SDIO_DATABLOCK_SIZE_128B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_1|SDIO_DCTRL_DBLOCKSIZE_2)
482#define SDIO_DATABLOCK_SIZE_256B SDIO_DCTRL_DBLOCKSIZE_3
483#define SDIO_DATABLOCK_SIZE_512B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_3)
484#define SDIO_DATABLOCK_SIZE_1024B (SDIO_DCTRL_DBLOCKSIZE_1|SDIO_DCTRL_DBLOCKSIZE_3)
485#define SDIO_DATABLOCK_SIZE_2048B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_1|SDIO_DCTRL_DBLOCKSIZE_3)
486#define SDIO_DATABLOCK_SIZE_4096B (SDIO_DCTRL_DBLOCKSIZE_2|SDIO_DCTRL_DBLOCKSIZE_3)
487#define SDIO_DATABLOCK_SIZE_8192B (SDIO_DCTRL_DBLOCKSIZE_0|SDIO_DCTRL_DBLOCKSIZE_2|SDIO_DCTRL_DBLOCKSIZE_3)
488#define SDIO_DATABLOCK_SIZE_16384B (SDIO_DCTRL_DBLOCKSIZE_1|SDIO_DCTRL_DBLOCKSIZE_2|SDIO_DCTRL_DBLOCKSIZE_3)
490#define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DATABLOCK_SIZE_1B) || \
491 ((SIZE) == SDIO_DATABLOCK_SIZE_2B) || \
492 ((SIZE) == SDIO_DATABLOCK_SIZE_4B) || \
493 ((SIZE) == SDIO_DATABLOCK_SIZE_8B) || \
494 ((SIZE) == SDIO_DATABLOCK_SIZE_16B) || \
495 ((SIZE) == SDIO_DATABLOCK_SIZE_32B) || \
496 ((SIZE) == SDIO_DATABLOCK_SIZE_64B) || \
497 ((SIZE) == SDIO_DATABLOCK_SIZE_128B) || \
498 ((SIZE) == SDIO_DATABLOCK_SIZE_256B) || \
499 ((SIZE) == SDIO_DATABLOCK_SIZE_512B) || \
500 ((SIZE) == SDIO_DATABLOCK_SIZE_1024B) || \
501 ((SIZE) == SDIO_DATABLOCK_SIZE_2048B) || \
502 ((SIZE) == SDIO_DATABLOCK_SIZE_4096B) || \
503 ((SIZE) == SDIO_DATABLOCK_SIZE_8192B) || \
504 ((SIZE) == SDIO_DATABLOCK_SIZE_16384B))
512#define SDIO_TRANSFER_DIR_TO_CARD 0x00000000U
513#define SDIO_TRANSFER_DIR_TO_SDIO SDIO_DCTRL_DTDIR
515#define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TRANSFER_DIR_TO_CARD) || \
516 ((DIR) == SDIO_TRANSFER_DIR_TO_SDIO))
524#define SDIO_TRANSFER_MODE_BLOCK 0x00000000U
525#define SDIO_TRANSFER_MODE_STREAM SDIO_DCTRL_DTMODE
527#define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TRANSFER_MODE_BLOCK) || \
528 ((MODE) == SDIO_TRANSFER_MODE_STREAM))
536#define SDIO_DPSM_DISABLE 0x00000000U
537#define SDIO_DPSM_ENABLE SDIO_DCTRL_DTEN
539#define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_DISABLE) ||\
540 ((DPSM) == SDIO_DPSM_ENABLE))
548#define SDIO_READ_WAIT_MODE_DATA2 0x00000000U
549#define SDIO_READ_WAIT_MODE_CLK (SDIO_DCTRL_RWMOD)
551#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_READ_WAIT_MODE_CLK) || \
552 ((MODE) == SDIO_READ_WAIT_MODE_DATA2))
560#define SDIO_IT_CCRCFAIL SDIO_MASK_CCRCFAILIE
561#define SDIO_IT_DCRCFAIL SDIO_MASK_DCRCFAILIE
562#define SDIO_IT_CTIMEOUT SDIO_MASK_CTIMEOUTIE
563#define SDIO_IT_DTIMEOUT SDIO_MASK_DTIMEOUTIE
564#define SDIO_IT_TXUNDERR SDIO_MASK_TXUNDERRIE
565#define SDIO_IT_RXOVERR SDIO_MASK_RXOVERRIE
566#define SDIO_IT_CMDREND SDIO_MASK_CMDRENDIE
567#define SDIO_IT_CMDSENT SDIO_MASK_CMDSENTIE
568#define SDIO_IT_DATAEND SDIO_MASK_DATAENDIE
569#if defined(SDIO_STA_STBITERR)
570#define SDIO_IT_STBITERR SDIO_MASK_STBITERRIE
572#define SDIO_IT_DBCKEND SDIO_MASK_DBCKENDIE
573#define SDIO_IT_CMDACT SDIO_MASK_CMDACTIE
574#define SDIO_IT_TXACT SDIO_MASK_TXACTIE
575#define SDIO_IT_RXACT SDIO_MASK_RXACTIE
576#define SDIO_IT_TXFIFOHE SDIO_MASK_TXFIFOHEIE
577#define SDIO_IT_RXFIFOHF SDIO_MASK_RXFIFOHFIE
578#define SDIO_IT_TXFIFOF SDIO_MASK_TXFIFOFIE
579#define SDIO_IT_RXFIFOF SDIO_MASK_RXFIFOFIE
580#define SDIO_IT_TXFIFOE SDIO_MASK_TXFIFOEIE
581#define SDIO_IT_RXFIFOE SDIO_MASK_RXFIFOEIE
582#define SDIO_IT_TXDAVL SDIO_MASK_TXDAVLIE
583#define SDIO_IT_RXDAVL SDIO_MASK_RXDAVLIE
584#define SDIO_IT_SDIOIT SDIO_MASK_SDIOITIE
585#if defined(SDIO_CMD_CEATACMD)
586#define SDIO_IT_CEATAEND SDIO_MASK_CEATAENDIE
595#define SDIO_FLAG_CCRCFAIL SDIO_STA_CCRCFAIL
596#define SDIO_FLAG_DCRCFAIL SDIO_STA_DCRCFAIL
597#define SDIO_FLAG_CTIMEOUT SDIO_STA_CTIMEOUT
598#define SDIO_FLAG_DTIMEOUT SDIO_STA_DTIMEOUT
599#define SDIO_FLAG_TXUNDERR SDIO_STA_TXUNDERR
600#define SDIO_FLAG_RXOVERR SDIO_STA_RXOVERR
601#define SDIO_FLAG_CMDREND SDIO_STA_CMDREND
602#define SDIO_FLAG_CMDSENT SDIO_STA_CMDSENT
603#define SDIO_FLAG_DATAEND SDIO_STA_DATAEND
604#if defined(SDIO_STA_STBITERR)
605#define SDIO_FLAG_STBITERR SDIO_STA_STBITERR
607#define SDIO_FLAG_DBCKEND SDIO_STA_DBCKEND
608#define SDIO_FLAG_CMDACT SDIO_STA_CMDACT
609#define SDIO_FLAG_TXACT SDIO_STA_TXACT
610#define SDIO_FLAG_RXACT SDIO_STA_RXACT
611#define SDIO_FLAG_TXFIFOHE SDIO_STA_TXFIFOHE
612#define SDIO_FLAG_RXFIFOHF SDIO_STA_RXFIFOHF
613#define SDIO_FLAG_TXFIFOF SDIO_STA_TXFIFOF
614#define SDIO_FLAG_RXFIFOF SDIO_STA_RXFIFOF
615#define SDIO_FLAG_TXFIFOE SDIO_STA_TXFIFOE
616#define SDIO_FLAG_RXFIFOE SDIO_STA_RXFIFOE
617#define SDIO_FLAG_TXDAVL SDIO_STA_TXDAVL
618#define SDIO_FLAG_RXDAVL SDIO_STA_RXDAVL
619#define SDIO_FLAG_SDIOIT SDIO_STA_SDIOIT
620#if defined(SDIO_CMD_CEATACMD)
621#define SDIO_FLAG_CEATAEND SDIO_STA_CEATAEND
623#define SDIO_STATIC_FLAGS ((uint32_t)(SDIO_FLAG_CCRCFAIL | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_CTIMEOUT |\
624 SDIO_FLAG_DTIMEOUT | SDIO_FLAG_TXUNDERR | SDIO_FLAG_RXOVERR |\
625 SDIO_FLAG_CMDREND | SDIO_FLAG_CMDSENT | SDIO_FLAG_DATAEND |\
626 SDIO_FLAG_DBCKEND | SDIO_FLAG_SDIOIT))
628#define SDIO_STATIC_CMD_FLAGS ((uint32_t)(SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CTIMEOUT | SDIO_FLAG_CMDREND |\
631#define SDIO_STATIC_DATA_FLAGS ((uint32_t)(SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_TXUNDERR |\
632 SDIO_FLAG_RXOVERR | SDIO_FLAG_DATAEND | SDIO_FLAG_DBCKEND))
650#define SDIO_OFFSET (SDIO_BASE - PERIPH_BASE)
654#define CLKCR_OFFSET (SDIO_OFFSET + 0x04U)
655#define CLKEN_BITNUMBER 0x08U
656#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32U) + (CLKEN_BITNUMBER * 4U))
660#define CMD_OFFSET (SDIO_OFFSET + 0x0CU)
661#define SDIOSUSPEND_BITNUMBER 0x0BU
662#define CMD_SDIOSUSPEND_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (SDIOSUSPEND_BITNUMBER * 4U))
665#define ENCMDCOMPL_BITNUMBER 0x0CU
666#define CMD_ENCMDCOMPL_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (ENCMDCOMPL_BITNUMBER * 4U))
669#define NIEN_BITNUMBER 0x0DU
670#define CMD_NIEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (NIEN_BITNUMBER * 4U))
673#define ATACMD_BITNUMBER 0x0EU
674#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (ATACMD_BITNUMBER * 4U))
678#define DCTRL_OFFSET (SDIO_OFFSET + 0x2CU)
679#define DMAEN_BITNUMBER 0x03U
680#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (DMAEN_BITNUMBER * 4U))
683#define RWSTART_BITNUMBER 0x08U
684#define DCTRL_RWSTART_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWSTART_BITNUMBER * 4U))
687#define RWSTOP_BITNUMBER 0x09U
688#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWSTOP_BITNUMBER * 4U))
691#define RWMOD_BITNUMBER 0x0AU
692#define DCTRL_RWMOD_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWMOD_BITNUMBER * 4U))
695#define SDIOEN_BITNUMBER 0x0BU
696#define DCTRL_SDIOEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (SDIOEN_BITNUMBER * 4U))
708#define CLKCR_CLEAR_MASK ((uint32_t)(SDIO_CLKCR_CLKDIV | SDIO_CLKCR_PWRSAV |\
709 SDIO_CLKCR_BYPASS | SDIO_CLKCR_WIDBUS |\
710 SDIO_CLKCR_NEGEDGE | SDIO_CLKCR_HWFC_EN))
714#define DCTRL_CLEAR_MASK ((uint32_t)(SDIO_DCTRL_DTEN | SDIO_DCTRL_DTDIR |\
715 SDIO_DCTRL_DTMODE | SDIO_DCTRL_DBLOCKSIZE))
719#define CMD_CLEAR_MASK ((uint32_t)(SDIO_CMD_CMDINDEX | SDIO_CMD_WAITRESP |\
720 SDIO_CMD_WAITINT | SDIO_CMD_WAITPEND |\
721 SDIO_CMD_CPSMEN | SDIO_CMD_SDIOSUSPEND))
724#define SDIO_INIT_CLK_DIV ((uint8_t)0x76)
727#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x0)
742#define __SDIO_ENABLE(__INSTANCE__) (*(__IO uint32_t *)CLKCR_CLKEN_BB = ENABLE)
749#define __SDIO_DISABLE(__INSTANCE__) (*(__IO uint32_t *)CLKCR_CLKEN_BB = DISABLE)
756#define __SDIO_DMA_ENABLE(__INSTANCE__) (*(__IO uint32_t *)DCTRL_DMAEN_BB = ENABLE)
763#define __SDIO_DMA_DISABLE(__INSTANCE__) (*(__IO uint32_t *)DCTRL_DMAEN_BB = DISABLE)
794#define __SDIO_ENABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK |= (__INTERRUPT__))
825#define __SDIO_DISABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK &= ~(__INTERRUPT__))
856#define __SDIO_GET_FLAG(__INSTANCE__, __FLAG__) (((__INSTANCE__)->STA &(__FLAG__)) != 0U)
877#define __SDIO_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->ICR = (__FLAG__))
908#define __SDIO_GET_IT (__INSTANCE__, __INTERRUPT__) (((__INSTANCE__)->STA &(__INTERRUPT__)) == (__INTERRUPT__))
927#define __SDIO_CLEAR_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->ICR = (__INTERRUPT__))
934#define __SDIO_START_READWAIT_ENABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_RWSTART_BB = ENABLE)
941#define __SDIO_START_READWAIT_DISABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_RWSTART_BB = DISABLE)
948#define __SDIO_STOP_READWAIT_ENABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_RWSTOP_BB = ENABLE)
955#define __SDIO_STOP_READWAIT_DISABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_RWSTOP_BB = DISABLE)
962#define __SDIO_OPERATION_ENABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_SDIOEN_BB = ENABLE)
969#define __SDIO_OPERATION_DISABLE(__INSTANCE__) (*(__IO uint32_t *) DCTRL_SDIOEN_BB = DISABLE)
976#define __SDIO_SUSPEND_CMD_ENABLE(__INSTANCE__) (*(__IO uint32_t *) CMD_SDIOSUSPEND_BB = ENABLE)
983#define __SDIO_SUSPEND_CMD_DISABLE(__INSTANCE__) (*(__IO uint32_t *) CMD_SDIOSUSPEND_BB = DISABLE)
985#if defined(SDIO_CMD_CEATACMD)
990#define __SDIO_CEATA_CMD_COMPLETION_ENABLE() (*(__IO uint32_t *) CMD_ENCMDCOMPL_BB = ENABLE)
996#define __SDIO_CEATA_CMD_COMPLETION_DISABLE() (*(__IO uint32_t *) CMD_ENCMDCOMPL_BB = DISABLE)
1002#define __SDIO_CEATA_ENABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)0U)
1008#define __SDIO_CEATA_DISABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)1U)
1014#define __SDIO_CEATA_SENDCMD_ENABLE() (*(__IO uint32_t *) CMD_ATACMD_BB = ENABLE)
1020#define __SDIO_CEATA_SENDCMD_DISABLE() (*(__IO uint32_t *) CMD_ATACMD_BB = DISABLE)
1049uint32_t SDIO_ReadFIFO(SDIO_TypeDef *SDIOx);
1061uint32_t SDIO_GetPowerState(SDIO_TypeDef *SDIOx);
1064HAL_StatusTypeDef SDIO_SendCommand(SDIO_TypeDef *SDIOx, SDIO_CmdInitTypeDef *Command);
1065uint8_t SDIO_GetCommandResponse(SDIO_TypeDef *SDIOx);
1066uint32_t SDIO_GetResponse(SDIO_TypeDef *SDIOx, uint32_t Response);
1069HAL_StatusTypeDef SDIO_ConfigData(SDIO_TypeDef *SDIOx, SDIO_DataInitTypeDef* Data);
1070uint32_t SDIO_GetDataCounter(SDIO_TypeDef *SDIOx);
1071uint32_t SDIO_GetFIFOCount(SDIO_TypeDef *SDIOx);
1074HAL_StatusTypeDef SDIO_SetSDMMCReadWaitMode(SDIO_TypeDef *SDIOx, uint32_t SDIO_ReadWaitMode);
1083uint32_t SDMMC_CmdBlockLength(SDIO_TypeDef *SDIOx, uint32_t BlockSize);
1084uint32_t SDMMC_CmdReadSingleBlock(SDIO_TypeDef *SDIOx, uint32_t ReadAdd);
1085uint32_t SDMMC_CmdReadMultiBlock(SDIO_TypeDef *SDIOx, uint32_t ReadAdd);
1086uint32_t SDMMC_CmdWriteSingleBlock(SDIO_TypeDef *SDIOx, uint32_t WriteAdd);
1087uint32_t SDMMC_CmdWriteMultiBlock(SDIO_TypeDef *SDIOx, uint32_t WriteAdd);
1088uint32_t SDMMC_CmdEraseStartAdd(SDIO_TypeDef *SDIOx, uint32_t StartAdd);
1089uint32_t SDMMC_CmdSDEraseStartAdd(SDIO_TypeDef *SDIOx, uint32_t StartAdd);
1090uint32_t SDMMC_CmdEraseEndAdd(SDIO_TypeDef *SDIOx, uint32_t EndAdd);
1091uint32_t SDMMC_CmdSDEraseEndAdd(SDIO_TypeDef *SDIOx, uint32_t EndAdd);
1092uint32_t SDMMC_CmdErase(SDIO_TypeDef *SDIOx);
1093uint32_t SDMMC_CmdStopTransfer(SDIO_TypeDef *SDIOx);
1094uint32_t SDMMC_CmdSelDesel(SDIO_TypeDef *SDIOx, uint64_t Addr);
1095uint32_t SDMMC_CmdGoIdleState(SDIO_TypeDef *SDIOx);
1096uint32_t SDMMC_CmdOperCond(SDIO_TypeDef *SDIOx);
1097uint32_t SDMMC_CmdAppCommand(SDIO_TypeDef *SDIOx, uint32_t Argument);
1098uint32_t SDMMC_CmdAppOperCommand(SDIO_TypeDef *SDIOx, uint32_t Argument);
1099uint32_t SDMMC_CmdBusWidth(SDIO_TypeDef *SDIOx, uint32_t BusWidth);
1100uint32_t SDMMC_CmdSendSCR(SDIO_TypeDef *SDIOx);
1101uint32_t SDMMC_CmdSendCID(SDIO_TypeDef *SDIOx);
1102uint32_t SDMMC_CmdSendCSD(SDIO_TypeDef *SDIOx, uint32_t Argument);
1103uint32_t SDMMC_CmdSetRelAdd(SDIO_TypeDef *SDIOx, uint16_t *pRCA);
1104uint32_t SDMMC_CmdSetRelAddMmc(SDIO_TypeDef *SDIOx, uint16_t RCA);
1105uint32_t SDMMC_CmdSendStatus(SDIO_TypeDef *SDIOx, uint32_t Argument);
1106uint32_t SDMMC_CmdStatusRegister(SDIO_TypeDef *SDIOx);
1107uint32_t SDMMC_CmdOpCondition(SDIO_TypeDef *SDIOx, uint32_t Argument);
1108uint32_t SDMMC_CmdSwitch(SDIO_TypeDef *SDIOx, uint32_t Argument);
1109uint32_t SDMMC_CmdSendEXTCSD(SDIO_TypeDef *SDIOx, uint32_t Argument);
1118uint32_t SDMMC_GetCmdResp1(SDIO_TypeDef *SDIOx, uint8_t SD_CMD, uint32_t Timeout);
1119uint32_t SDMMC_GetCmdResp2(SDIO_TypeDef *SDIOx);
1120uint32_t SDMMC_GetCmdResp3(SDIO_TypeDef *SDIOx);
1121uint32_t SDMMC_GetCmdResp6(SDIO_TypeDef *SDIOx, uint8_t SD_CMD, uint16_t *pRCA);
1122uint32_t SDMMC_GetCmdResp7(SDIO_TypeDef *SDIOx);
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition.