VSF Documented
Data Structures | Macros | Typedefs | Enumerations | Functions
vsf_template_sdio.h File Reference
#include "./vsf_template_hal_driver.h"
#include "hal/arch/vsf_arch.h"

Go to the source code of this file.

Data Structures

union  vsf_sdio_csd_t
 
struct  vsf_sdio_cid_t
 
struct  vsf_sdio_req_t
 
struct  vsf_sdio_status_t
 
struct  vsf_sdio_capability_t
 
struct  vsf_sdio_isr_t
 sdio interrupt configuration More...
 
struct  vsf_sdio_cfg_t
 sdio configuration More...
 
struct  vsf_sdio_op_t
 
struct  vsf_sdio_t
 

Macros

#define VSF_SDIO_CFG_MULTI_CLASS   ENABLED
 Enable multi-class support by default for maximum availability.
 
#define VSF_SDIO_CFG_PREFIX   vsf
 Define SDIO hardware mask if count is defined.
 
#define VSF_SDIO_CFG_FUNCTION_RENAME   ENABLED
 Disable VSF_SDIO_CFG_FUNCTION_RENAME to use the original function names (e.g., vsf_sdio_init()).
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE   DISABLED
 Enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE in specific hardware drivers to redefine enum vsf_sdio_mode_t.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK to redefine enum vsf_sdio_irq_mask_t.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS to redefine struct vsf_sdio_status_t.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG to redefine struct vsf_sdio_cfg_t. For compatibility, members should not be deleted when redefining.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY to redefine struct vsf_sdio_capability_t. For compatibility, members should not be deleted when redefining.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP to redefine enum vsf_sdio_reqop_t.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS   DISABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS to redefine enum vsf_sdio_reqsts_t.
 
#define VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY   ENABLED
 In specific hardware driver, we can enable macro VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY to inherit the structure vsf_peripheral_capability_t.
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL   DISABLED
 Enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL in specific hardware drivers to redefine enum vsf_sdio_ctrl_t. This allows hardware-specific control commands to be added to the control enumeration.
 
#define SD_SEND_RELATIVE_ADDR   3 /* bcr R6 */
 
#define SD_SEND_RELATIVE_ADDR_OP   (SDIO_RESP_R6)
 
#define SD_SEND_IF_COND   8 /* bcr [11:0] See below R7 */
 
#define SD_SEND_IF_COND_OP   (SDIO_RESP_R7)
 
#define SD_SWITCH_VOLTAGE   11 /* ac R1 */
 
#define SD_SWITCH_VOLTAGE_OP   (SDIO_RESP_R1 | SDIO_CMDOP_CLKHOLD)
 
#define SD_SWITCH   6 /* adtc [31:0] See below R1 */
 
#define SD_SWITCH_OP   (SDIO_RESP_R1)
 
#define SD_ERASE_WR_BLK_START   32 /* ac [31:0] data addr R1 */
 
#define SD_ERASE_WR_BLK_START_OP   (SDIO_RESP_R1)
 
#define SD_ERASE_WR_BLK_END   33 /* ac [31:0] data addr R1 */
 
#define SD_ERASE_WR_BLK_END_OP   (SDIO_RESP_R1)
 
#define SD_APP_SET_BUS_WIDTH   6 /* ac [1:0] bus width R1 */
 
#define SD_APP_SET_BUS_WIDTH_OP   (SDIO_RESP_R1)
 
#define SD_BUS_WIDTH_1   0
 
#define SD_BUS_WIDTH_4   2
 
#define SD_BUS_WIDTH_8   3
 
#define SD_APP_SD_STATUS   13 /* adtc R1 */
 
#define SD_APP_SD_STATUS_OP   (SDIO_RESP_R1)
 
#define SD_APP_SEND_NUM_WR_BLKS   22 /* adtc R1 */
 
#define SD_APP_SEND_NUM_WR_BLKS_OP   (SDIO_RESP_R1)
 
#define SD_APP_OP_COND   41 /* bcr [31:0] OCR R3 */
 
#define SD_APP_OP_COND_OP   (SDIO_RESP_R3)
 
#define SD_APP_SEND_SCR   51 /* adtc R1 */
 
#define SD_APP_SEND_SCR_OP   (SDIO_RESP_R1)
 
#define SD_READ_EXTR_SINGLE   48 /* adtc [31:0] R1 */
 
#define SD_READ_EXTR_SINGLE_OP   (SDIO_RESP_R1)
 
#define SD_WRITE_EXTR_SINGLE   49 /* adtc [31:0] R1 */
 
#define SD_WRITE_EXTR_SINGLE_OP   (SDIO_RESP_R1)
 
#define SD_OCR_VDD_165_195   0x00000080 /* VDD voltage 1.65 - 1.95 */
 
#define SD_OCR_VDD_20_21   0x00000100 /* VDD voltage 2.0 ~ 2.1 */
 
#define SD_OCR_VDD_21_22   0x00000200 /* VDD voltage 2.1 ~ 2.2 */
 
#define SD_OCR_VDD_22_23   0x00000400 /* VDD voltage 2.2 ~ 2.3 */
 
#define SD_OCR_VDD_23_24   0x00000800 /* VDD voltage 2.3 ~ 2.4 */
 
#define SD_OCR_VDD_24_25   0x00001000 /* VDD voltage 2.4 ~ 2.5 */
 
#define SD_OCR_VDD_25_26   0x00002000 /* VDD voltage 2.5 ~ 2.6 */
 
#define SD_OCR_VDD_26_27   0x00004000 /* VDD voltage 2.6 ~ 2.7 */
 
#define SD_OCR_VDD_27_28   0x00008000 /* VDD voltage 2.7 ~ 2.8 */
 
#define SD_OCR_VDD_28_29   0x00010000 /* VDD voltage 2.8 ~ 2.9 */
 
#define SD_OCR_VDD_29_30   0x00020000 /* VDD voltage 2.9 ~ 3.0 */
 
#define SD_OCR_VDD_30_31   0x00040000 /* VDD voltage 3.0 ~ 3.1 */
 
#define SD_OCR_VDD_31_32   0x00080000 /* VDD voltage 3.1 ~ 3.2 */
 
#define SD_OCR_VDD_32_33   0x00100000 /* VDD voltage 3.2 ~ 3.3 */
 
#define SD_OCR_VDD_33_34   0x00200000 /* VDD voltage 3.3 ~ 3.4 */
 
#define SD_OCR_VDD_34_35   0x00400000 /* VDD voltage 3.4 ~ 3.5 */
 
#define SD_OCR_VDD_35_36   0x00800000 /* VDD voltage 3.5 ~ 3.6 */
 
#define SD_OCR_VDD_HIGH   0x00FF8000 /* VDD voltage 2.7 ~ 3.6 */
 
#define SD_OCR_VDD_LOW   0x00007F80 /* VDD voltage 1.65 ~ 2.7 */
 
#define SD_OCR_VDD   (SD_OCR_VDD_HIGH | SD_OCR_VDD_LOW)
 
#define SD_OCR_S18R   (1 << 24) /* 1.8V switching request */
 
#define SD_ROCR_S18A   SD_OCR_S18R /* 1.8V switching accepted by card */
 
#define SD_OCR_XPC   (1 << 28) /* SDXC power control */
 
#define SD_OCR_CCS   (1 << 30) /* Card Capacity Status */
 
#define MMC_GO_IDLE_STATE   0 /* bc */
 
#define MMC_GO_IDLE_STATE_OP   (SDIO_RESP_NONE)
 
#define MMC_SEND_OP_COND   1 /* bcr [31:0] OCR R3 */
 
#define MMC_SEND_OP_COND_OP   (SDIO_RESP_R3)
 
#define MMC_ALL_SEND_CID   2 /* bcr R2 */
 
#define MMC_ALL_SEND_CID_OP   (SDIO_RESP_R2)
 
#define MMC_SET_RELATIVE_ADDR   3 /* ac [31:16] RCA R1 */
 
#define MMC_SET_RELATIVE_ADDR_OP   (SDIO_RESP_R1)
 
#define MMC_SET_DSR   4 /* bc [31:16] RCA */
 
#define MMC_SET_DSR_OP   (SDIO_RESP_NONE)
 
#define MMC_SLEEP_AWAKE   5 /* ac [31:16] RCA 15:flg R1b */
 
#define MMC_SLEEP_AWAKE_OP   (SDIO_RESP_R1B)
 
#define MMC_SWITCH   6 /* ac [31:0] See below R1b */
 
#define MMC_SWITCH_OP   (SDIO_RESP_R1B)
 
#define MMC_SELECT_CARD   7 /* ac [31:16] RCA R1 */
 
#define MMC_SELECT_CARD_OP   (SDIO_RESP_R1)
 
#define MMC_SEND_EXT_CSD   8 /* adtc R1 */
 
#define MMC_SEND_EXT_CSD_OP   (SDIO_RESP_R1)
 
#define MMC_SEND_CSD   9 /* ac [31:16] RCA R2 */
 
#define MMC_SEND_CSD_OP   (SDIO_RESP_R2)
 
#define MMC_SEND_CID   10 /* ac [31:16] RCA R2 */
 
#define MMC_SEND_CID_OP   (SDIO_RESP_R2)
 
#define MMC_READ_DAT_UNTIL_STOP   11 /* adtc [31:0] dadr R1 */
 
#define MMC_READ_DAT_UNTIL_STOP_OP   (SDIO_RESP_R1)
 
#define MMC_STOP_TRANSMISSION   12 /* ac R1b */
 
#define MMC_STOP_TRANSMISSION_OP   (SDIO_RESP_R1B | SDIO_CMDOP_TRANS_STOP)
 
#define MMC_SEND_STATUS   13 /* ac [31:16] RCA R1 */
 
#define MMC_SEND_STATUS_OP   (SDIO_RESP_R1)
 
#define MMC_BUS_TEST_R   14 /* adtc R1 */
 
#define MMC_BUS_TEST_R_OP   (SDIO_RESP_R1)
 
#define MMC_GO_INACTIVE_STATE   15 /* ac [31:16] RCA */
 
#define MMC_BUS_TEST_W   19 /* adtc R1 */
 
#define MMC_BUS_TEST_W_OP   (SDIO_RESP_R1)
 
#define MMC_SPI_READ_OCR   58 /* spi spi_R3 */
 
#define MMC_SPI_READ_OCR_OP   (SDIO_RESP_SPI_R3)
 
#define MMC_SPI_CRC_ON_OFF   59 /* spi [0:0] flag spi_R1 */
 
#define MMC_SPI_CRC_ON_OFF_OP   (SDIO_RESP_SPI_R1)
 
#define MMC_SET_BLOCKLEN   16 /* ac [31:0] block len R1 */
 
#define MMC_SET_BLOCKLEN_OP   (SDIO_RESP_R1)
 
#define MMC_READ_SINGLE_BLOCK   17 /* adtc [31:0] data addr R1 */
 
#define MMC_READ_SINGLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_READ)
 
#define MMC_READ_MULTIPLE_BLOCK   18 /* adtc [31:0] data addr R1 */
 
#define MMC_READ_MULTIPLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_READ)
 
#define MMC_SEND_TUNING_BLOCK   19 /* adtc R1 */
 
#define MMC_SEND_TUNING_BLOCK_OP   (SDIO_RESP_R1)
 
#define MMC_SEND_TUNING_BLOCK_HS200   21 /* adtc R1 */
 
#define MMC_SEND_TUNING_BLOCK_HS200_OP   (SDIO_RESP_R1)
 
#define MMC_WRITE_DAT_UNTIL_STOP   20 /* adtc [31:0] data addr R1 */
 
#define MMC_WRITE_DAT_UNTIL_STOP_OP   (SDIO_RESP_R1)
 
#define MMC_SET_BLOCK_COUNT   23 /* adtc [31:0] data addr R1 */
 
#define MMC_SET_BLOCK_COUNT_OP   (SDIO_RESP_R1)
 
#define MMC_WRITE_BLOCK   24 /* adtc [31:0] data addr R1 */
 
#define MMC_WRITE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_WRITE)
 
#define MMC_WRITE_MULTIPLE_BLOCK   25 /* adtc R1 */
 
#define MMC_WRITE_MULTIPLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_WRITE)
 
#define MMC_PROGRAM_CID   26 /* adtc R1 */
 
#define MMC_PROGRAM_CID_OP   (SDIO_RESP_R1)
 
#define MMC_PROGRAM_CSD   27 /* adtc R1 */
 
#define MMC_PROGRAM_CSD_OP   (SDIO_RESP_R1)
 
#define MMC_SET_WRITE_PROT   28 /* ac [31:0] data addr R1b */
 
#define MMC_SET_WRITE_PROT_OP   (SDIO_RESP_R1B)
 
#define MMC_CLR_WRITE_PROT   29 /* ac [31:0] data addr R1b */
 
#define MMC_CLR_WRITE_PROT_OP   (SDIO_RESP_R1B)
 
#define MMC_SEND_WRITE_PROT   30 /* adtc [31:0] wpdata addr R1 */
 
#define MMC_SEND_WRITE_PROT_OP   (SDIO_RESP_R1)
 
#define MMC_ERASE_GROUP_START   35 /* ac [31:0] data addr R1 */
 
#define MMC_ERASE_GROUP_START_OP   (SDIO_RESP_R1)
 
#define MMC_ERASE_GROUP_END   36 /* ac [31:0] data addr R1 */
 
#define MMC_ERASE_GROUP_END_OP   (SDIO_RESP_R1)
 
#define MMC_ERASE   38 /* ac R1b */
 
#define MMC_ERASE_OP   (SDIO_RESP_R1B)
 
#define MMC_FAST_IO   39 /* ac <Complex> R4 */
 
#define MMC_FAST_IO_OP   (SDIO_RESP_R4)
 
#define MMC_GO_IRQ_STATE   40 /* bcr R5 */
 
#define MMC_GO_IRQ_STATE_OP   (SDIO_RESP_R5)
 
#define MMC_LOCK_UNLOCK   42 /* adtc R1b */
 
#define MMC_LOCK_UNLOCK_OP   (SDIO_RESP_R1B)
 
#define MMC_APP_CMD   55 /* ac [31:16] RCA R1 */
 
#define MMC_APP_CMD_OP   (SDIO_RESP_R1)
 
#define MMC_GEN_CMD   56 /* adtc [0] RD/WR R1 */
 
#define MMC_GEN_CMD_OP   (SDIO_RESP_R1)
 
#define MMC_QUE_TASK_PARAMS   44 /* ac [20:16] task id R1 */
 
#define MMC_QUE_TASK_PARAMS_OP   (SDIO_RESP_R1)
 
#define MMC_QUE_TASK_ADDR   45 /* ac [31:0] data addr R1 */
 
#define MMC_QUE_TASK_ADDR_OP   (SDIO_RESP_R1)
 
#define MMC_EXECUTE_READ_TASK   46 /* adtc [20:16] task id R1 */
 
#define MMC_EXECUTE_READ_TASK_OP   (SDIO_RESP_R1)
 
#define MMC_EXECUTE_WRITE_TASK   47 /* adtc [20:16] task id R1 */
 
#define MMC_EXECUTE_WRITE_TASK_OP   (SDIO_RESP_R1)
 
#define MMC_CMDQ_TASK_MGMT   48 /* ac [20:16] task id R1b */
 
#define MMC_CMDQ_TASK_MGMT_OP   (SDIO_RESP_R1B)
 
#define SD_VERSION_SD   (1U << 31)
 
#define MMC_VERSION_MMC   (1U << 30)
 
#define MAKE_SDMMC_VERSION(a, b, c)    ((((uint32_t)(a)) << 16) | ((uint32_t)(b) << 8) | (uint32_t)(c))
 
#define MAKE_SD_VERSION(a, b, c)    (SD_VERSION_SD | MAKE_SDMMC_VERSION(a, b, c))
 
#define MAKE_MMC_VERSION(a, b, c)    (MMC_VERSION_MMC | MAKE_SDMMC_VERSION(a, b, c))
 
#define EXTRACT_SDMMC_MAJOR_VERSION(x)    (((uint32_t)(x) >> 16) & 0xff)
 
#define EXTRACT_SDMMC_MINOR_VERSION(x)    (((uint32_t)(x) >> 8) & 0xff)
 
#define EXTRACT_SDMMC_CHANGE_VERSION(x)    ((uint32_t)(x) & 0xff)
 
#define SD_VERSION_3   MAKE_SD_VERSION(3, 0, 0)
 
#define SD_VERSION_2   MAKE_SD_VERSION(2, 0, 0)
 
#define SD_VERSION_1_0   MAKE_SD_VERSION(1, 0, 0)
 
#define SD_VERSION_1_10   MAKE_SD_VERSION(1, 10, 0)
 
#define MMC_VERSION_UNKNOWN   MAKE_MMC_VERSION(0, 0, 0)
 
#define MMC_VERSION_1_2   MAKE_MMC_VERSION(1, 2, 0)
 
#define MMC_VERSION_1_4   MAKE_MMC_VERSION(1, 4, 0)
 
#define MMC_VERSION_2_2   MAKE_MMC_VERSION(2, 2, 0)
 
#define MMC_VERSION_3   MAKE_MMC_VERSION(3, 0, 0)
 
#define MMC_VERSION_4   MAKE_MMC_VERSION(4, 0, 0)
 
#define MMC_VERSION_4_1   MAKE_MMC_VERSION(4, 1, 0)
 
#define MMC_VERSION_4_2   MAKE_MMC_VERSION(4, 2, 0)
 
#define MMC_VERSION_4_3   MAKE_MMC_VERSION(4, 3, 0)
 
#define MMC_VERSION_4_4   MAKE_MMC_VERSION(4, 4, 0)
 
#define MMC_VERSION_4_41   MAKE_MMC_VERSION(4, 4, 1)
 
#define MMC_VERSION_4_5   MAKE_MMC_VERSION(4, 5, 0)
 
#define MMC_VERSION_5_0   MAKE_MMC_VERSION(5, 0, 0)
 
#define MMC_VERSION_5_1   MAKE_MMC_VERSION(5, 1, 0)
 
#define IS_SD(x)   ((x) & SD_VERSION_SD)
 
#define IS_MMC(x)   ((x) & MMC_VERSION_MMC)
 
#define R1_OUT_OF_RANGE   (1 << 31) /* er, c */
 
#define R1_ADDRESS_ERROR   (1 << 30) /* erx, c */
 
#define R1_BLOCK_LEN_ERROR   (1 << 29) /* er, c */
 
#define R1_ERASE_SEQ_ERROR   (1 << 28) /* er, c */
 
#define R1_ERASE_PARAM   (1 << 27) /* ex, c */
 
#define R1_WP_VIOLATION   (1 << 26) /* erx, c */
 
#define R1_CARD_IS_LOCKED   (1 << 25) /* sx, a */
 
#define R1_LOCK_UNLOCK_FAILED   (1 << 24) /* erx, c */
 
#define R1_COM_CRC_ERROR   (1 << 23) /* er, b */
 
#define R1_ILLEGAL_COMMAND   (1 << 22) /* er, b */
 
#define R1_CARD_ECC_FAILED   (1 << 21) /* ex, c */
 
#define R1_CC_ERROR   (1 << 20) /* erx, c */
 
#define R1_ERROR   (1 << 19) /* erx, c */
 
#define R1_UNDERRUN   (1 << 18) /* ex, c */
 
#define R1_OVERRUN   (1 << 17) /* ex, c */
 
#define R1_CID_CSD_OVERWRITE   (1 << 16) /* erx, c, CID/CSD overwrite */
 
#define R1_WP_ERASE_SKIP   (1 << 15) /* sx, c */
 
#define R1_CARD_ECC_DISABLED   (1 << 14) /* sx, a */
 
#define R1_ERASE_RESET   (1 << 13) /* sr, c */
 
#define R1_STATUS(x)   (x & 0xFFF9A000)
 
#define R1_CURRENT_STATE(x)   ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */
 
#define R1_READY_FOR_DATA   (1 << 8) /* sx, a */
 
#define R1_SWITCH_ERROR   (1 << 7) /* sx, c */
 
#define R1_EXCEPTION_EVENT   (1 << 6) /* sr, a */
 
#define R1_APP_CMD   (1 << 5) /* sr, c */
 
#define R1_STATE_IDLE   0
 
#define R1_STATE_READY   1
 
#define R1_STATE_IDENT   2
 
#define R1_STATE_STBY   3
 
#define R1_STATE_TRAN   4
 
#define R1_STATE_DATA   5
 
#define R1_STATE_RCV   6
 
#define R1_STATE_PRG   7
 
#define R1_STATE_DIS   8
 
#define R1_STATE_MASK   0x0FUL
 
#define R1_CUR_STATE(__S)   ((__S) << 9)
 
#define VSF_SDIO_APIS(__prefix_name)
 SDIO API template, used to generate SDIO type, specific prefix function declarations, etc.
 
#define SDIO_RESP_NONE   0
 
#define SDIO_RESP_R1   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
 
#define SDIO_RESP_R1B   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC | SDIO_CMDOP_RESP_BUSY)
 
#define SDIO_RESP_R2   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_LONG_CRC)
 
#define SDIO_RESP_R3   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
 
#define SDIO_RESP_R4   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)
 
#define SDIO_RESP_R5   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
 
#define SDIO_RESP_R6   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
 
#define SDIO_RESP_R7   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)
 

Typedefs

typedef union vsf_sdio_csd_t vsf_sdio_csd_t
 
typedef struct vsf_sdio_cid_t vsf_sdio_cid_t
 
typedef enum vsf_sdio_mode_t vsf_sdio_mode_t
 
typedef enum vsf_sdio_reqop_t vsf_sdio_reqop_t
 flags of sdio request operations
 
typedef struct vsf_sdio_req_t vsf_sdio_req_t
 
typedef enum vsf_sdio_irq_mask_t vsf_sdio_irq_mask_t
 
typedef enum vsf_sdio_reqsts_t vsf_sdio_reqsts_t
 
typedef struct vsf_sdio_status_t vsf_sdio_status_t
 
typedef struct vsf_sdio_capability_t vsf_sdio_capability_t
 
typedef enum vsf_sdio_ctrl_t vsf_sdio_ctrl_t
 SDIO control commands for hardware-specific operations.
 
typedef struct vsf_sdio_t vsf_sdio_t
 
typedef void vsf_sdio_isr_handler_t(void *target_ptr, vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask, vsf_sdio_reqsts_t status, uint32_t resp[4])
 sdio interrupt callback function prototype.
 
typedef struct vsf_sdio_isr_t vsf_sdio_isr_t
 sdio interrupt configuration
 
typedef struct vsf_sdio_cfg_t vsf_sdio_cfg_t
 sdio configuration
 
typedef struct vsf_sdio_op_t vsf_sdio_op_t
 

Enumerations

enum  vsf_sdio_mode_t {
  SDIO_MODE_HOST = (0x1ul << 0) ,
  SDIO_MODE_SLAVE = (0x0ul << 0) ,
  SDIO_MODE_MASK = (0x1ul << 0)
}
 
enum  vsf_sdio_reqop_t {
  SDIO_CMDOP_BYTE = (0ul << 0) ,
  SDIO_CMDOP_STREAM = (1ul << 0) ,
  SDIO_CMDOP_SINGLE_BLOCK = (2ul << 0) ,
  SDIO_CMDOP_MULTI_BLOCK = (3ul << 0) ,
  SDIO_CMDOP_WRITE = (1ul << 2) ,
  SDIO_CMDOP_READ = (0ul << 2) ,
  SDIO_CMDOP_RESP_BUSY = (1ul << 3) ,
  __SDIO_CMDOP_RESP = (1ul << 4) ,
  __SDIO_CMDOP_RESP_SHORT = (1ul << 5) ,
  __SDIO_CMDOP_RESP_SHORT_CRC = (2ul << 5) ,
  __SDIO_CMDOP_RESP_LONG_CRC = (3ul << 5) ,
  SDIO_CMDOP_CLKHOLD = (1ul << 7) ,
  SDIO_CMDOP_TRANS_STOP = (1ul << 8)
}
 flags of sdio request operations More...
 
enum  vsf_sdio_irq_mask_t {
  SDIO_IRQ_MASK_HOST_RESP_DONE = (0x1ul << 0) ,
  SDIO_IRQ_MASK_HOST_DATA_DONE = (0x1ul << 1) ,
  SDIO_IRQ_MASK_HOST_DATA_ABORT = (0x1ul << 2) ,
  SDIO_IRQ_MASK_HOST_ALL
}
 
enum  vsf_sdio_reqsts_t {
  SDIO_REQSTS_DONE = 0 ,
  SDIO_REQSTS_ERR_RESP_NONE = (0x1ul << 0) ,
  SDIO_REQSTS_ERR_RESP_CRC = (0x1ul << 1) ,
  SDIO_REQSTS_ERR_DATA_CRC = (0x1ul << 2) ,
  SDIO_REQSTS_DATA_BUSY = (0x1ul << 3) ,
  SDIO_REQSTS_BUSY = (0x1ul << 4) ,
  SDIO_REQSTS_ERR_MASK
}
 
enum  vsf_sdio_ctrl_t { __VSF_SDIO_CTRL_DUMMY = 0 }
 SDIO control commands for hardware-specific operations. More...
 

Functions

vsf_err_t vsf_sdio_init (vsf_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr)
 Initialize a sdio instance.
 
void vsf_sdio_fini (vsf_sdio_t *sdio_ptr)
 Finalize a sdio instance.
 
vsf_err_t vsf_sdio_get_configuration (vsf_sdio_t *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr)
 Get the current configuration of an SDIO instance.
 
void vsf_sdio_irq_enable (vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
 Enable interrupt masks of sdio instance.
 
void vsf_sdio_irq_disable (vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
 Disable interrupt masks of sdio instance.
 
vsf_sdio_irq_mask_t vsf_sdio_irq_clear (vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask)
 Clear interrupt flags of SDIO instance and return previous state.
 
vsf_sdio_status_t vsf_sdio_status (vsf_sdio_t *sdio_ptr)
 Get the status of sdio instance.
 
vsf_sdio_capability_t vsf_sdio_capability (vsf_sdio_t *sdio_ptr)
 Get the capability of sdio instance.
 
vsf_err_t vsf_sdio_set_clock (vsf_sdio_t *sdio_ptr, uint32_t clock_hz, bool is_ddr)
 Set the clock of sdio instance.
 
vsf_err_t vsf_sdio_set_bus_width (vsf_sdio_t *sdio_ptr, uint8_t bus_width)
 Set the bus width of sdio instance.
 
vsf_err_t vsf_sdio_host_request (vsf_sdio_t *sdio_ptr, vsf_sdio_req_t *req)
 Start a new request for sdio instance.
 
vsf_err_t vsf_sdio_single_voltage (vsf_sdio_t *sdio_ptr, uint8_t bus_width)
 Set the single voltage mode of sdio instance.
 
void vsf_sdio_host_transact_stop (vsf_sdio_t *sdio_ptr)
 Stop the host transaction of sdio instance.
 
vsf_err_t vsf_sdio_ctrl (vsf_sdio_t *sdio_ptr, vsf_sdio_ctrl_t ctrl, void *param)
 Execute a control command on an SDIO instance.
 

Macro Definition Documentation

◆ VSF_SDIO_CFG_MULTI_CLASS

#define VSF_SDIO_CFG_MULTI_CLASS   ENABLED

Enable multi-class support by default for maximum availability.

◆ VSF_SDIO_CFG_PREFIX

#define VSF_SDIO_CFG_PREFIX   vsf

Define SDIO hardware mask if count is defined.

Define SDIO hardware count if mask is defined

We can redefine macro VSF_SDIO_CFG_PREFIX to specify a prefix to call a specific driver directly in the application code.

◆ VSF_SDIO_CFG_FUNCTION_RENAME

#define VSF_SDIO_CFG_FUNCTION_RENAME   ENABLED

Disable VSF_SDIO_CFG_FUNCTION_RENAME to use the original function names (e.g., vsf_sdio_init()).

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE   DISABLED

Enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE in specific hardware drivers to redefine enum vsf_sdio_mode_t.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK to redefine enum vsf_sdio_irq_mask_t.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS to redefine struct vsf_sdio_status_t.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG to redefine struct vsf_sdio_cfg_t. For compatibility, members should not be deleted when redefining.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY to redefine struct vsf_sdio_capability_t. For compatibility, members should not be deleted when redefining.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQOP to redefine enum vsf_sdio_reqop_t.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS   DISABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_REQSTS to redefine enum vsf_sdio_reqsts_t.

◆ VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY

#define VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY   ENABLED

In specific hardware driver, we can enable macro VSF_SDIO_CFG_INHERIT_HAL_CAPABILITY to inherit the structure vsf_peripheral_capability_t.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL   DISABLED

Enable macro VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL in specific hardware drivers to redefine enum vsf_sdio_ctrl_t. This allows hardware-specific control commands to be added to the control enumeration.

◆ SD_SEND_RELATIVE_ADDR

#define SD_SEND_RELATIVE_ADDR   3 /* bcr R6 */

◆ SD_SEND_RELATIVE_ADDR_OP

#define SD_SEND_RELATIVE_ADDR_OP   (SDIO_RESP_R6)

◆ SD_SEND_IF_COND

#define SD_SEND_IF_COND   8 /* bcr [11:0] See below R7 */

◆ SD_SEND_IF_COND_OP

#define SD_SEND_IF_COND_OP   (SDIO_RESP_R7)

◆ SD_SWITCH_VOLTAGE

#define SD_SWITCH_VOLTAGE   11 /* ac R1 */

◆ SD_SWITCH_VOLTAGE_OP

#define SD_SWITCH_VOLTAGE_OP   (SDIO_RESP_R1 | SDIO_CMDOP_CLKHOLD)

◆ SD_SWITCH

#define SD_SWITCH   6 /* adtc [31:0] See below R1 */

◆ SD_SWITCH_OP

#define SD_SWITCH_OP   (SDIO_RESP_R1)

◆ SD_ERASE_WR_BLK_START

#define SD_ERASE_WR_BLK_START   32 /* ac [31:0] data addr R1 */

◆ SD_ERASE_WR_BLK_START_OP

#define SD_ERASE_WR_BLK_START_OP   (SDIO_RESP_R1)

◆ SD_ERASE_WR_BLK_END

#define SD_ERASE_WR_BLK_END   33 /* ac [31:0] data addr R1 */

◆ SD_ERASE_WR_BLK_END_OP

#define SD_ERASE_WR_BLK_END_OP   (SDIO_RESP_R1)

◆ SD_APP_SET_BUS_WIDTH

#define SD_APP_SET_BUS_WIDTH   6 /* ac [1:0] bus width R1 */

◆ SD_APP_SET_BUS_WIDTH_OP

#define SD_APP_SET_BUS_WIDTH_OP   (SDIO_RESP_R1)

◆ SD_BUS_WIDTH_1

#define SD_BUS_WIDTH_1   0

◆ SD_BUS_WIDTH_4

#define SD_BUS_WIDTH_4   2

◆ SD_BUS_WIDTH_8

#define SD_BUS_WIDTH_8   3

◆ SD_APP_SD_STATUS

#define SD_APP_SD_STATUS   13 /* adtc R1 */

◆ SD_APP_SD_STATUS_OP

#define SD_APP_SD_STATUS_OP   (SDIO_RESP_R1)

◆ SD_APP_SEND_NUM_WR_BLKS

#define SD_APP_SEND_NUM_WR_BLKS   22 /* adtc R1 */

◆ SD_APP_SEND_NUM_WR_BLKS_OP

#define SD_APP_SEND_NUM_WR_BLKS_OP   (SDIO_RESP_R1)

◆ SD_APP_OP_COND

#define SD_APP_OP_COND   41 /* bcr [31:0] OCR R3 */

◆ SD_APP_OP_COND_OP

#define SD_APP_OP_COND_OP   (SDIO_RESP_R3)

◆ SD_APP_SEND_SCR

#define SD_APP_SEND_SCR   51 /* adtc R1 */

◆ SD_APP_SEND_SCR_OP

#define SD_APP_SEND_SCR_OP   (SDIO_RESP_R1)

◆ SD_READ_EXTR_SINGLE

#define SD_READ_EXTR_SINGLE   48 /* adtc [31:0] R1 */

◆ SD_READ_EXTR_SINGLE_OP

#define SD_READ_EXTR_SINGLE_OP   (SDIO_RESP_R1)

◆ SD_WRITE_EXTR_SINGLE

#define SD_WRITE_EXTR_SINGLE   49 /* adtc [31:0] R1 */

◆ SD_WRITE_EXTR_SINGLE_OP

#define SD_WRITE_EXTR_SINGLE_OP   (SDIO_RESP_R1)

◆ SD_OCR_VDD_165_195

#define SD_OCR_VDD_165_195   0x00000080 /* VDD voltage 1.65 - 1.95 */

◆ SD_OCR_VDD_20_21

#define SD_OCR_VDD_20_21   0x00000100 /* VDD voltage 2.0 ~ 2.1 */

◆ SD_OCR_VDD_21_22

#define SD_OCR_VDD_21_22   0x00000200 /* VDD voltage 2.1 ~ 2.2 */

◆ SD_OCR_VDD_22_23

#define SD_OCR_VDD_22_23   0x00000400 /* VDD voltage 2.2 ~ 2.3 */

◆ SD_OCR_VDD_23_24

#define SD_OCR_VDD_23_24   0x00000800 /* VDD voltage 2.3 ~ 2.4 */

◆ SD_OCR_VDD_24_25

#define SD_OCR_VDD_24_25   0x00001000 /* VDD voltage 2.4 ~ 2.5 */

◆ SD_OCR_VDD_25_26

#define SD_OCR_VDD_25_26   0x00002000 /* VDD voltage 2.5 ~ 2.6 */

◆ SD_OCR_VDD_26_27

#define SD_OCR_VDD_26_27   0x00004000 /* VDD voltage 2.6 ~ 2.7 */

◆ SD_OCR_VDD_27_28

#define SD_OCR_VDD_27_28   0x00008000 /* VDD voltage 2.7 ~ 2.8 */

◆ SD_OCR_VDD_28_29

#define SD_OCR_VDD_28_29   0x00010000 /* VDD voltage 2.8 ~ 2.9 */

◆ SD_OCR_VDD_29_30

#define SD_OCR_VDD_29_30   0x00020000 /* VDD voltage 2.9 ~ 3.0 */

◆ SD_OCR_VDD_30_31

#define SD_OCR_VDD_30_31   0x00040000 /* VDD voltage 3.0 ~ 3.1 */

◆ SD_OCR_VDD_31_32

#define SD_OCR_VDD_31_32   0x00080000 /* VDD voltage 3.1 ~ 3.2 */

◆ SD_OCR_VDD_32_33

#define SD_OCR_VDD_32_33   0x00100000 /* VDD voltage 3.2 ~ 3.3 */

◆ SD_OCR_VDD_33_34

#define SD_OCR_VDD_33_34   0x00200000 /* VDD voltage 3.3 ~ 3.4 */

◆ SD_OCR_VDD_34_35

#define SD_OCR_VDD_34_35   0x00400000 /* VDD voltage 3.4 ~ 3.5 */

◆ SD_OCR_VDD_35_36

#define SD_OCR_VDD_35_36   0x00800000 /* VDD voltage 3.5 ~ 3.6 */

◆ SD_OCR_VDD_HIGH

#define SD_OCR_VDD_HIGH   0x00FF8000 /* VDD voltage 2.7 ~ 3.6 */

◆ SD_OCR_VDD_LOW

#define SD_OCR_VDD_LOW   0x00007F80 /* VDD voltage 1.65 ~ 2.7 */

◆ SD_OCR_VDD

#define SD_OCR_VDD   (SD_OCR_VDD_HIGH | SD_OCR_VDD_LOW)

◆ SD_OCR_S18R

#define SD_OCR_S18R   (1 << 24) /* 1.8V switching request */

◆ SD_ROCR_S18A

#define SD_ROCR_S18A   SD_OCR_S18R /* 1.8V switching accepted by card */

◆ SD_OCR_XPC

#define SD_OCR_XPC   (1 << 28) /* SDXC power control */

◆ SD_OCR_CCS

#define SD_OCR_CCS   (1 << 30) /* Card Capacity Status */

◆ MMC_GO_IDLE_STATE

#define MMC_GO_IDLE_STATE   0 /* bc */

◆ MMC_GO_IDLE_STATE_OP

#define MMC_GO_IDLE_STATE_OP   (SDIO_RESP_NONE)

◆ MMC_SEND_OP_COND

#define MMC_SEND_OP_COND   1 /* bcr [31:0] OCR R3 */

◆ MMC_SEND_OP_COND_OP

#define MMC_SEND_OP_COND_OP   (SDIO_RESP_R3)

◆ MMC_ALL_SEND_CID

#define MMC_ALL_SEND_CID   2 /* bcr R2 */

◆ MMC_ALL_SEND_CID_OP

#define MMC_ALL_SEND_CID_OP   (SDIO_RESP_R2)

◆ MMC_SET_RELATIVE_ADDR

#define MMC_SET_RELATIVE_ADDR   3 /* ac [31:16] RCA R1 */

◆ MMC_SET_RELATIVE_ADDR_OP

#define MMC_SET_RELATIVE_ADDR_OP   (SDIO_RESP_R1)

◆ MMC_SET_DSR

#define MMC_SET_DSR   4 /* bc [31:16] RCA */

◆ MMC_SET_DSR_OP

#define MMC_SET_DSR_OP   (SDIO_RESP_NONE)

◆ MMC_SLEEP_AWAKE

#define MMC_SLEEP_AWAKE   5 /* ac [31:16] RCA 15:flg R1b */

◆ MMC_SLEEP_AWAKE_OP

#define MMC_SLEEP_AWAKE_OP   (SDIO_RESP_R1B)

◆ MMC_SWITCH

#define MMC_SWITCH   6 /* ac [31:0] See below R1b */

◆ MMC_SWITCH_OP

#define MMC_SWITCH_OP   (SDIO_RESP_R1B)

◆ MMC_SELECT_CARD

#define MMC_SELECT_CARD   7 /* ac [31:16] RCA R1 */

◆ MMC_SELECT_CARD_OP

#define MMC_SELECT_CARD_OP   (SDIO_RESP_R1)

◆ MMC_SEND_EXT_CSD

#define MMC_SEND_EXT_CSD   8 /* adtc R1 */

◆ MMC_SEND_EXT_CSD_OP

#define MMC_SEND_EXT_CSD_OP   (SDIO_RESP_R1)

◆ MMC_SEND_CSD

#define MMC_SEND_CSD   9 /* ac [31:16] RCA R2 */

◆ MMC_SEND_CSD_OP

#define MMC_SEND_CSD_OP   (SDIO_RESP_R2)

◆ MMC_SEND_CID

#define MMC_SEND_CID   10 /* ac [31:16] RCA R2 */

◆ MMC_SEND_CID_OP

#define MMC_SEND_CID_OP   (SDIO_RESP_R2)

◆ MMC_READ_DAT_UNTIL_STOP

#define MMC_READ_DAT_UNTIL_STOP   11 /* adtc [31:0] dadr R1 */

◆ MMC_READ_DAT_UNTIL_STOP_OP

#define MMC_READ_DAT_UNTIL_STOP_OP   (SDIO_RESP_R1)

◆ MMC_STOP_TRANSMISSION

#define MMC_STOP_TRANSMISSION   12 /* ac R1b */

◆ MMC_STOP_TRANSMISSION_OP

#define MMC_STOP_TRANSMISSION_OP   (SDIO_RESP_R1B | SDIO_CMDOP_TRANS_STOP)

◆ MMC_SEND_STATUS

#define MMC_SEND_STATUS   13 /* ac [31:16] RCA R1 */

◆ MMC_SEND_STATUS_OP

#define MMC_SEND_STATUS_OP   (SDIO_RESP_R1)

◆ MMC_BUS_TEST_R

#define MMC_BUS_TEST_R   14 /* adtc R1 */

◆ MMC_BUS_TEST_R_OP

#define MMC_BUS_TEST_R_OP   (SDIO_RESP_R1)

◆ MMC_GO_INACTIVE_STATE

#define MMC_GO_INACTIVE_STATE   15 /* ac [31:16] RCA */

◆ MMC_BUS_TEST_W

#define MMC_BUS_TEST_W   19 /* adtc R1 */

◆ MMC_BUS_TEST_W_OP

#define MMC_BUS_TEST_W_OP   (SDIO_RESP_R1)

◆ MMC_SPI_READ_OCR

#define MMC_SPI_READ_OCR   58 /* spi spi_R3 */

◆ MMC_SPI_READ_OCR_OP

#define MMC_SPI_READ_OCR_OP   (SDIO_RESP_SPI_R3)

◆ MMC_SPI_CRC_ON_OFF

#define MMC_SPI_CRC_ON_OFF   59 /* spi [0:0] flag spi_R1 */

◆ MMC_SPI_CRC_ON_OFF_OP

#define MMC_SPI_CRC_ON_OFF_OP   (SDIO_RESP_SPI_R1)

◆ MMC_SET_BLOCKLEN

#define MMC_SET_BLOCKLEN   16 /* ac [31:0] block len R1 */

◆ MMC_SET_BLOCKLEN_OP

#define MMC_SET_BLOCKLEN_OP   (SDIO_RESP_R1)

◆ MMC_READ_SINGLE_BLOCK

#define MMC_READ_SINGLE_BLOCK   17 /* adtc [31:0] data addr R1 */

◆ MMC_READ_SINGLE_BLOCK_OP

#define MMC_READ_SINGLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_READ)

◆ MMC_READ_MULTIPLE_BLOCK

#define MMC_READ_MULTIPLE_BLOCK   18 /* adtc [31:0] data addr R1 */

◆ MMC_READ_MULTIPLE_BLOCK_OP

#define MMC_READ_MULTIPLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_READ)

◆ MMC_SEND_TUNING_BLOCK

#define MMC_SEND_TUNING_BLOCK   19 /* adtc R1 */

◆ MMC_SEND_TUNING_BLOCK_OP

#define MMC_SEND_TUNING_BLOCK_OP   (SDIO_RESP_R1)

◆ MMC_SEND_TUNING_BLOCK_HS200

#define MMC_SEND_TUNING_BLOCK_HS200   21 /* adtc R1 */

◆ MMC_SEND_TUNING_BLOCK_HS200_OP

#define MMC_SEND_TUNING_BLOCK_HS200_OP   (SDIO_RESP_R1)

◆ MMC_WRITE_DAT_UNTIL_STOP

#define MMC_WRITE_DAT_UNTIL_STOP   20 /* adtc [31:0] data addr R1 */

◆ MMC_WRITE_DAT_UNTIL_STOP_OP

#define MMC_WRITE_DAT_UNTIL_STOP_OP   (SDIO_RESP_R1)

◆ MMC_SET_BLOCK_COUNT

#define MMC_SET_BLOCK_COUNT   23 /* adtc [31:0] data addr R1 */

◆ MMC_SET_BLOCK_COUNT_OP

#define MMC_SET_BLOCK_COUNT_OP   (SDIO_RESP_R1)

◆ MMC_WRITE_BLOCK

#define MMC_WRITE_BLOCK   24 /* adtc [31:0] data addr R1 */

◆ MMC_WRITE_BLOCK_OP

#define MMC_WRITE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_SINGLE_BLOCK | SDIO_CMDOP_WRITE)

◆ MMC_WRITE_MULTIPLE_BLOCK

#define MMC_WRITE_MULTIPLE_BLOCK   25 /* adtc R1 */

◆ MMC_WRITE_MULTIPLE_BLOCK_OP

#define MMC_WRITE_MULTIPLE_BLOCK_OP   (SDIO_RESP_R1 | SDIO_CMDOP_MULTI_BLOCK | SDIO_CMDOP_WRITE)

◆ MMC_PROGRAM_CID

#define MMC_PROGRAM_CID   26 /* adtc R1 */

◆ MMC_PROGRAM_CID_OP

#define MMC_PROGRAM_CID_OP   (SDIO_RESP_R1)

◆ MMC_PROGRAM_CSD

#define MMC_PROGRAM_CSD   27 /* adtc R1 */

◆ MMC_PROGRAM_CSD_OP

#define MMC_PROGRAM_CSD_OP   (SDIO_RESP_R1)

◆ MMC_SET_WRITE_PROT

#define MMC_SET_WRITE_PROT   28 /* ac [31:0] data addr R1b */

◆ MMC_SET_WRITE_PROT_OP

#define MMC_SET_WRITE_PROT_OP   (SDIO_RESP_R1B)

◆ MMC_CLR_WRITE_PROT

#define MMC_CLR_WRITE_PROT   29 /* ac [31:0] data addr R1b */

◆ MMC_CLR_WRITE_PROT_OP

#define MMC_CLR_WRITE_PROT_OP   (SDIO_RESP_R1B)

◆ MMC_SEND_WRITE_PROT

#define MMC_SEND_WRITE_PROT   30 /* adtc [31:0] wpdata addr R1 */

◆ MMC_SEND_WRITE_PROT_OP

#define MMC_SEND_WRITE_PROT_OP   (SDIO_RESP_R1)

◆ MMC_ERASE_GROUP_START

#define MMC_ERASE_GROUP_START   35 /* ac [31:0] data addr R1 */

◆ MMC_ERASE_GROUP_START_OP

#define MMC_ERASE_GROUP_START_OP   (SDIO_RESP_R1)

◆ MMC_ERASE_GROUP_END

#define MMC_ERASE_GROUP_END   36 /* ac [31:0] data addr R1 */

◆ MMC_ERASE_GROUP_END_OP

#define MMC_ERASE_GROUP_END_OP   (SDIO_RESP_R1)

◆ MMC_ERASE

#define MMC_ERASE   38 /* ac R1b */

◆ MMC_ERASE_OP

#define MMC_ERASE_OP   (SDIO_RESP_R1B)

◆ MMC_FAST_IO

#define MMC_FAST_IO   39 /* ac <Complex> R4 */

◆ MMC_FAST_IO_OP

#define MMC_FAST_IO_OP   (SDIO_RESP_R4)

◆ MMC_GO_IRQ_STATE

#define MMC_GO_IRQ_STATE   40 /* bcr R5 */

◆ MMC_GO_IRQ_STATE_OP

#define MMC_GO_IRQ_STATE_OP   (SDIO_RESP_R5)

◆ MMC_LOCK_UNLOCK

#define MMC_LOCK_UNLOCK   42 /* adtc R1b */

◆ MMC_LOCK_UNLOCK_OP

#define MMC_LOCK_UNLOCK_OP   (SDIO_RESP_R1B)

◆ MMC_APP_CMD

#define MMC_APP_CMD   55 /* ac [31:16] RCA R1 */

◆ MMC_APP_CMD_OP

#define MMC_APP_CMD_OP   (SDIO_RESP_R1)

◆ MMC_GEN_CMD

#define MMC_GEN_CMD   56 /* adtc [0] RD/WR R1 */

◆ MMC_GEN_CMD_OP

#define MMC_GEN_CMD_OP   (SDIO_RESP_R1)

◆ MMC_QUE_TASK_PARAMS

#define MMC_QUE_TASK_PARAMS   44 /* ac [20:16] task id R1 */

◆ MMC_QUE_TASK_PARAMS_OP

#define MMC_QUE_TASK_PARAMS_OP   (SDIO_RESP_R1)

◆ MMC_QUE_TASK_ADDR

#define MMC_QUE_TASK_ADDR   45 /* ac [31:0] data addr R1 */

◆ MMC_QUE_TASK_ADDR_OP

#define MMC_QUE_TASK_ADDR_OP   (SDIO_RESP_R1)

◆ MMC_EXECUTE_READ_TASK

#define MMC_EXECUTE_READ_TASK   46 /* adtc [20:16] task id R1 */

◆ MMC_EXECUTE_READ_TASK_OP

#define MMC_EXECUTE_READ_TASK_OP   (SDIO_RESP_R1)

◆ MMC_EXECUTE_WRITE_TASK

#define MMC_EXECUTE_WRITE_TASK   47 /* adtc [20:16] task id R1 */

◆ MMC_EXECUTE_WRITE_TASK_OP

#define MMC_EXECUTE_WRITE_TASK_OP   (SDIO_RESP_R1)

◆ MMC_CMDQ_TASK_MGMT

#define MMC_CMDQ_TASK_MGMT   48 /* ac [20:16] task id R1b */

◆ MMC_CMDQ_TASK_MGMT_OP

#define MMC_CMDQ_TASK_MGMT_OP   (SDIO_RESP_R1B)

◆ SD_VERSION_SD

#define SD_VERSION_SD   (1U << 31)

◆ MMC_VERSION_MMC

#define MMC_VERSION_MMC   (1U << 30)

◆ MAKE_SDMMC_VERSION

#define MAKE_SDMMC_VERSION (   a,
  b,
 
)     ((((uint32_t)(a)) << 16) | ((uint32_t)(b) << 8) | (uint32_t)(c))

◆ MAKE_SD_VERSION

#define MAKE_SD_VERSION (   a,
  b,
 
)     (SD_VERSION_SD | MAKE_SDMMC_VERSION(a, b, c))

◆ MAKE_MMC_VERSION

#define MAKE_MMC_VERSION (   a,
  b,
 
)     (MMC_VERSION_MMC | MAKE_SDMMC_VERSION(a, b, c))

◆ EXTRACT_SDMMC_MAJOR_VERSION

#define EXTRACT_SDMMC_MAJOR_VERSION (   x)     (((uint32_t)(x) >> 16) & 0xff)

◆ EXTRACT_SDMMC_MINOR_VERSION

#define EXTRACT_SDMMC_MINOR_VERSION (   x)     (((uint32_t)(x) >> 8) & 0xff)

◆ EXTRACT_SDMMC_CHANGE_VERSION

#define EXTRACT_SDMMC_CHANGE_VERSION (   x)     ((uint32_t)(x) & 0xff)

◆ SD_VERSION_3

#define SD_VERSION_3   MAKE_SD_VERSION(3, 0, 0)

◆ SD_VERSION_2

#define SD_VERSION_2   MAKE_SD_VERSION(2, 0, 0)

◆ SD_VERSION_1_0

#define SD_VERSION_1_0   MAKE_SD_VERSION(1, 0, 0)

◆ SD_VERSION_1_10

#define SD_VERSION_1_10   MAKE_SD_VERSION(1, 10, 0)

◆ MMC_VERSION_UNKNOWN

#define MMC_VERSION_UNKNOWN   MAKE_MMC_VERSION(0, 0, 0)

◆ MMC_VERSION_1_2

#define MMC_VERSION_1_2   MAKE_MMC_VERSION(1, 2, 0)

◆ MMC_VERSION_1_4

#define MMC_VERSION_1_4   MAKE_MMC_VERSION(1, 4, 0)

◆ MMC_VERSION_2_2

#define MMC_VERSION_2_2   MAKE_MMC_VERSION(2, 2, 0)

◆ MMC_VERSION_3

#define MMC_VERSION_3   MAKE_MMC_VERSION(3, 0, 0)

◆ MMC_VERSION_4

#define MMC_VERSION_4   MAKE_MMC_VERSION(4, 0, 0)

◆ MMC_VERSION_4_1

#define MMC_VERSION_4_1   MAKE_MMC_VERSION(4, 1, 0)

◆ MMC_VERSION_4_2

#define MMC_VERSION_4_2   MAKE_MMC_VERSION(4, 2, 0)

◆ MMC_VERSION_4_3

#define MMC_VERSION_4_3   MAKE_MMC_VERSION(4, 3, 0)

◆ MMC_VERSION_4_4

#define MMC_VERSION_4_4   MAKE_MMC_VERSION(4, 4, 0)

◆ MMC_VERSION_4_41

#define MMC_VERSION_4_41   MAKE_MMC_VERSION(4, 4, 1)

◆ MMC_VERSION_4_5

#define MMC_VERSION_4_5   MAKE_MMC_VERSION(4, 5, 0)

◆ MMC_VERSION_5_0

#define MMC_VERSION_5_0   MAKE_MMC_VERSION(5, 0, 0)

◆ MMC_VERSION_5_1

#define MMC_VERSION_5_1   MAKE_MMC_VERSION(5, 1, 0)

◆ IS_SD

#define IS_SD (   x)    ((x) & SD_VERSION_SD)

◆ IS_MMC

#define IS_MMC (   x)    ((x) & MMC_VERSION_MMC)

◆ R1_OUT_OF_RANGE

#define R1_OUT_OF_RANGE   (1 << 31) /* er, c */

◆ R1_ADDRESS_ERROR

#define R1_ADDRESS_ERROR   (1 << 30) /* erx, c */

◆ R1_BLOCK_LEN_ERROR

#define R1_BLOCK_LEN_ERROR   (1 << 29) /* er, c */

◆ R1_ERASE_SEQ_ERROR

#define R1_ERASE_SEQ_ERROR   (1 << 28) /* er, c */

◆ R1_ERASE_PARAM

#define R1_ERASE_PARAM   (1 << 27) /* ex, c */

◆ R1_WP_VIOLATION

#define R1_WP_VIOLATION   (1 << 26) /* erx, c */

◆ R1_CARD_IS_LOCKED

#define R1_CARD_IS_LOCKED   (1 << 25) /* sx, a */

◆ R1_LOCK_UNLOCK_FAILED

#define R1_LOCK_UNLOCK_FAILED   (1 << 24) /* erx, c */

◆ R1_COM_CRC_ERROR

#define R1_COM_CRC_ERROR   (1 << 23) /* er, b */

◆ R1_ILLEGAL_COMMAND

#define R1_ILLEGAL_COMMAND   (1 << 22) /* er, b */

◆ R1_CARD_ECC_FAILED

#define R1_CARD_ECC_FAILED   (1 << 21) /* ex, c */

◆ R1_CC_ERROR

#define R1_CC_ERROR   (1 << 20) /* erx, c */

◆ R1_ERROR

#define R1_ERROR   (1 << 19) /* erx, c */

◆ R1_UNDERRUN

#define R1_UNDERRUN   (1 << 18) /* ex, c */

◆ R1_OVERRUN

#define R1_OVERRUN   (1 << 17) /* ex, c */

◆ R1_CID_CSD_OVERWRITE

#define R1_CID_CSD_OVERWRITE   (1 << 16) /* erx, c, CID/CSD overwrite */

◆ R1_WP_ERASE_SKIP

#define R1_WP_ERASE_SKIP   (1 << 15) /* sx, c */

◆ R1_CARD_ECC_DISABLED

#define R1_CARD_ECC_DISABLED   (1 << 14) /* sx, a */

◆ R1_ERASE_RESET

#define R1_ERASE_RESET   (1 << 13) /* sr, c */

◆ R1_STATUS

#define R1_STATUS (   x)    (x & 0xFFF9A000)

◆ R1_CURRENT_STATE

#define R1_CURRENT_STATE (   x)    ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */

◆ R1_READY_FOR_DATA

#define R1_READY_FOR_DATA   (1 << 8) /* sx, a */

◆ R1_SWITCH_ERROR

#define R1_SWITCH_ERROR   (1 << 7) /* sx, c */

◆ R1_EXCEPTION_EVENT

#define R1_EXCEPTION_EVENT   (1 << 6) /* sr, a */

◆ R1_APP_CMD

#define R1_APP_CMD   (1 << 5) /* sr, c */

◆ R1_STATE_IDLE

#define R1_STATE_IDLE   0

◆ R1_STATE_READY

#define R1_STATE_READY   1

◆ R1_STATE_IDENT

#define R1_STATE_IDENT   2

◆ R1_STATE_STBY

#define R1_STATE_STBY   3

◆ R1_STATE_TRAN

#define R1_STATE_TRAN   4

◆ R1_STATE_DATA

#define R1_STATE_DATA   5

◆ R1_STATE_RCV

#define R1_STATE_RCV   6

◆ R1_STATE_PRG

#define R1_STATE_PRG   7

◆ R1_STATE_DIS

#define R1_STATE_DIS   8

◆ R1_STATE_MASK

#define R1_STATE_MASK   0x0FUL

◆ R1_CUR_STATE

#define R1_CUR_STATE (   __S)    ((__S) << 9)

◆ VSF_SDIO_APIS

#define VSF_SDIO_APIS (   __prefix_name)
Value:
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, init, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, fini, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, get_configuration, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_enable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, sdio, irq_disable, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_irq_mask_t, sdio, irq_clear, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_status_t, sdio, status, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_sdio_capability_t, sdio, capability, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, set_clock, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, uint32_t clock_hz, bool is_ddr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, set_bus_width, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, uint8_t bus_width) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, host_request, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_req_t *req) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, sdio, ctrl, VSF_MCONNECT(__prefix_name, _t) *sdio_ptr, vsf_sdio_ctrl_t ctrl, void* param)
vsf_err_t
Definition __type.h:42
vsf_sdio_irq_mask_t
Definition sdio.h:78
struct VSF_MCONNECT(VSF_DMA_CFG_IMP_PREFIX, _dma_channel_t)
Definition dma.c:57
__le16 capability
Definition ieee80211.h:134
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_sdio.h:787
sdio configuration
Definition vsf_template_sdio.h:901
Definition vsf_template_sdio.h:739
Definition vsf_template_sdio.h:777
#define __VSF_HAL_TEMPLATE_API
Definition vsf_template_instance_declaration.h:120
vsf_sdio_ctrl_t
SDIO control commands for hardware-specific operations.
Definition vsf_template_sdio.h:813
uint8_t status
Definition vsf_tgui.h:144

SDIO API template, used to generate SDIO type, specific prefix function declarations, etc.

Parameters
[in]__prefix_nameThe prefix used for generating SDIO functions.

◆ SDIO_RESP_NONE

#define SDIO_RESP_NONE   0

◆ SDIO_RESP_R1

#define SDIO_RESP_R1   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)

◆ SDIO_RESP_R1B

◆ SDIO_RESP_R2

#define SDIO_RESP_R2   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_LONG_CRC)

◆ SDIO_RESP_R3

#define SDIO_RESP_R3   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)

◆ SDIO_RESP_R4

#define SDIO_RESP_R4   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT)

◆ SDIO_RESP_R5

#define SDIO_RESP_R5   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)

◆ SDIO_RESP_R6

#define SDIO_RESP_R6   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)

◆ SDIO_RESP_R7

#define SDIO_RESP_R7   (__SDIO_CMDOP_RESP | __SDIO_CMDOP_RESP_SHORT_CRC)

Typedef Documentation

◆ vsf_sdio_csd_t

◆ vsf_sdio_cid_t

◆ vsf_sdio_mode_t

◆ vsf_sdio_reqop_t

flags of sdio request operations

Note
vsf_sdio_reqop_t is implemented by specific driver.

◆ vsf_sdio_req_t

◆ vsf_sdio_irq_mask_t

◆ vsf_sdio_reqsts_t

◆ vsf_sdio_status_t

◆ vsf_sdio_capability_t

◆ vsf_sdio_ctrl_t

SDIO control commands for hardware-specific operations.

Note
These commands provide additional control beyond basic SDIO operations

◆ vsf_sdio_t

typedef struct vsf_sdio_t vsf_sdio_t

◆ vsf_sdio_isr_handler_t

typedef void vsf_sdio_isr_handler_t(void *target_ptr, vsf_sdio_t *sdio_ptr, vsf_sdio_irq_mask_t irq_mask, vsf_sdio_reqsts_t status, uint32_t resp[4])

sdio interrupt callback function prototype.

Note
It is called after interrupt occurs.
Parameters
target_ptrpointer of user.
sdio_ptrpointer of sdio instance.
irq_maskone or more value of enum vsf_sdio_irq_mask_t
statusrequest status.
respresponse.
Returns
None.
static void __user_sdio_irchandler(void *target_ptr, vsf_sdio_t *sdio_ptr,
{
// do something
}
}
@ SDIO_IRQ_MASK_HOST_RESP_DONE
Definition sdio.h:79
vsf_sdio_reqsts_t
Definition sdio.h:85
Definition vsf_template_sdio.h:919

◆ vsf_sdio_isr_t

sdio interrupt configuration

◆ vsf_sdio_cfg_t

sdio configuration

◆ vsf_sdio_op_t

typedef struct vsf_sdio_op_t vsf_sdio_op_t

Enumeration Type Documentation

◆ vsf_sdio_mode_t

Enumerator
SDIO_MODE_HOST 
SDIO_MODE_SLAVE 
SDIO_MODE_MASK 

◆ vsf_sdio_reqop_t

flags of sdio request operations

Note
vsf_sdio_reqop_t is implemented by specific driver.
Enumerator
SDIO_CMDOP_BYTE 
SDIO_CMDOP_STREAM 
SDIO_CMDOP_SINGLE_BLOCK 
SDIO_CMDOP_MULTI_BLOCK 
SDIO_CMDOP_WRITE 
SDIO_CMDOP_READ 
SDIO_CMDOP_RESP_BUSY 
__SDIO_CMDOP_RESP 
__SDIO_CMDOP_RESP_SHORT 
__SDIO_CMDOP_RESP_SHORT_CRC 
__SDIO_CMDOP_RESP_LONG_CRC 
SDIO_CMDOP_CLKHOLD 
SDIO_CMDOP_TRANS_STOP 

◆ vsf_sdio_irq_mask_t

Enumerator
SDIO_IRQ_MASK_HOST_RESP_DONE 
SDIO_IRQ_MASK_HOST_DATA_DONE 
SDIO_IRQ_MASK_HOST_DATA_ABORT 
SDIO_IRQ_MASK_HOST_ALL 

◆ vsf_sdio_reqsts_t

Enumerator
SDIO_REQSTS_DONE 
SDIO_REQSTS_ERR_RESP_NONE 
SDIO_REQSTS_ERR_RESP_CRC 
SDIO_REQSTS_ERR_DATA_CRC 
SDIO_REQSTS_DATA_BUSY 
SDIO_REQSTS_BUSY 
SDIO_REQSTS_ERR_MASK 

◆ vsf_sdio_ctrl_t

SDIO control commands for hardware-specific operations.

Note
These commands provide additional control beyond basic SDIO operations
Enumerator
__VSF_SDIO_CTRL_DUMMY 

Dummy value for compilation, required when no actual control commands are defined.

Note
This value is needed only when using the template default enum definition (VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED) and all optional control commands are commented out. It ensures the enum has at least one member to avoid compilation errors with some C compilers that don't allow empty enums.
If you enable any control commands below (uncomment them), or if you redefine the enum in a specific hardware driver (VSF_SDIO_CFG_REIMPLEMENT_TYPE_CTRL == ENABLED), you can remove this DUMMY value as long as at least one actual command is defined.

Function Documentation

◆ vsf_sdio_init()

vsf_err_t vsf_sdio_init ( vsf_sdio_t sdio_ptr,
vsf_sdio_cfg_t cfg_ptr 
)
extern

Initialize a sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]cfg_ptra pointer to structure vsf_sdio_cfg_t
Returns
vsf_err_t: VSF_ERR_NONE if sdio was initialized, or a negative error code
Note
It is not necessary to call vsf_sdio_fini() to deinitialization. vsf_sdio_init() should be called before any other sdio API except vsf_sdio_capability().

◆ vsf_sdio_fini()

void vsf_sdio_fini ( vsf_sdio_t sdio_ptr)
extern

Finalize a sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
Returns
none

◆ vsf_sdio_get_configuration()

vsf_err_t vsf_sdio_get_configuration ( vsf_sdio_t sdio_ptr,
vsf_sdio_cfg_t cfg_ptr 
)
extern

Get the current configuration of an SDIO instance.

Parameters
[in]sdio_ptrpointer to structure vsf_sdio_t
[out]cfg_ptrpointer to configuration structure vsf_sdio_cfg_t to store the current configuration
Returns
vsf_err_t: VSF_ERR_NONE if successful, otherwise return error code
Note
This function retrieves the current SDIO configuration including mode and interrupt settings. The SDIO instance should be initialized before calling this function.

◆ vsf_sdio_irq_enable()

void vsf_sdio_irq_enable ( vsf_sdio_t sdio_ptr,
vsf_sdio_irq_mask_t  irq_mask 
)
extern

Enable interrupt masks of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]irq_maskone or more value of enum vsf_sdio_irq_mask_t
Returns
none.
Note
All pending interrupts should be cleared before interrupts are enabled.

◆ vsf_sdio_irq_disable()

void vsf_sdio_irq_disable ( vsf_sdio_t sdio_ptr,
vsf_sdio_irq_mask_t  irq_mask 
)
extern

Disable interrupt masks of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]irq_maskone or more value of enum vsf_sdio_irq_mask_t, vsf_sdio_irq_mask_t
Returns
none.

◆ vsf_sdio_irq_clear()

vsf_sdio_irq_mask_t vsf_sdio_irq_clear ( vsf_sdio_t sdio_ptr,
vsf_sdio_irq_mask_t  irq_mask 
)
extern

Clear interrupt flags of SDIO instance and return previous state.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]irq_maskone or more values of enum vsf_sdio_irq_mask_t to clear
Returns
vsf_sdio_irq_mask_t: the interrupt mask state before clearing (0 if no flags were set)
Note
This function attempts to clear the specified interrupt flags if they are set, and returns the state of those flags before clearing. This is useful for polling operations and determining if interrupts occurred. Note that if interrupts are enabled and an interrupt handler is active, the interrupt handler may clear the interrupt flags automatically. In such cases, this function will return 0 even if interrupts occurred.

◆ vsf_sdio_status()

vsf_sdio_status_t vsf_sdio_status ( vsf_sdio_t sdio_ptr)
extern

Get the status of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
Returns
vsf_sdio_status_t: return all status of current sdio

◆ vsf_sdio_capability()

vsf_sdio_capability_t vsf_sdio_capability ( vsf_sdio_t sdio_ptr)
extern

Get the capability of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
Returns
vsf_sdio_capability_t: return all capability of current sdio vsf_sdio_capability_t

◆ vsf_sdio_set_clock()

vsf_err_t vsf_sdio_set_clock ( vsf_sdio_t sdio_ptr,
uint32_t  clock_hz,
bool  is_ddr 
)
extern

Set the clock of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]clock_hzclock in Hz
[in]is_ddris DDR mode, true means DDR mode while false means SDR mode
Returns
vsf_err_t: VSF_ERR_NONE if sdio set clock was successfully, or a negative error code

◆ vsf_sdio_set_bus_width()

vsf_err_t vsf_sdio_set_bus_width ( vsf_sdio_t sdio_ptr,
uint8_t  bus_width 
)
extern

Set the bus width of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]bus_widthbus width in 1, 4, 8
Returns
vsf_err_t: VSF_ERR_NONE if sdio was successfully, or a negative error code

◆ vsf_sdio_host_request()

vsf_err_t vsf_sdio_host_request ( vsf_sdio_t sdio_ptr,
vsf_sdio_req_t req 
)
extern

Start a new request for sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]reqpointer to structure vsf_sdio_req_t
Returns
vsf_err_t: VSF_ERR_NONE if sdio was successfully, or a negative error code

◆ vsf_sdio_single_voltage()

vsf_err_t vsf_sdio_single_voltage ( vsf_sdio_t sdio_ptr,
uint8_t  bus_width 
)
extern

Set the single voltage mode of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]bus_widthbus width in 1, 4, 8
Returns
vsf_err_t: VSF_ERR_NONE if sdio was successfully, or a negative error code

◆ vsf_sdio_host_transact_stop()

void vsf_sdio_host_transact_stop ( vsf_sdio_t sdio_ptr)
extern

Stop the host transaction of sdio instance.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t

◆ vsf_sdio_ctrl()

vsf_err_t vsf_sdio_ctrl ( vsf_sdio_t sdio_ptr,
vsf_sdio_ctrl_t  ctrl,
void *  param 
)
extern

Execute a control command on an SDIO instance.

Parameters
[in,out]sdio_ptrpointer to SDIO instance structure vsf_sdio_t
[in]ctrlControl command from vsf_sdio_ctrl_t enumeration
[in]paramCommand-specific parameter (can be NULL depending on command)
Returns
vsf_err_t: VSF_ERR_NONE if command executed successfully, VSF_ERR_NOT_SUPPORT if command is not supported, other error codes defined by vsf_err_t for specific failures
Note
Available commands and their parameters are hardware-dependent
Some commands may not be supported on all hardware platforms
Generated from commit: vsfteam/vsf@b2e9e8a