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
 
#define VSF_SDIO_CFG_PREFIX   vsf
 
#define VSF_SDIO_CFG_FUNCTION_RENAME   ENABLED
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE   DISABLED
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG   DISABLED
 
#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED
 
#define VSF_SDIO_CFG_INHERT_HAL_CAPABILITY   ENABLED
 
#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)
 
#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)
 
#define __VSF_HAL_TEMPLATE_API   VSF_HAL_TEMPLATE_API_FP
 
#define __vsf_sdio_t   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_t)
 
#define vsf_sdio_init(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_init) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 
#define vsf_sdio_enable(__SDIO)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_enable) ((__vsf_sdio_t *)(__SDIO))
 
#define vsf_sdio_disable(__SDIO)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_disable) ((__vsf_sdio_t *)(__SDIO))
 
#define vsf_sdio_irq_enable(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_enable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 
#define vsf_sdio_irq_disable(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_disable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 
#define vsf_sdio_status(__SDIO)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_status) ((__vsf_sdio_t *)(__SDIO))
 
#define vsf_sdio_capability(__SDIO)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_capability) ((__vsf_sdio_t *)(__SDIO))
 
#define vsf_sdio_set_clock(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_clock) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 
#define vsf_sdio_set_bus_width(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_bus_width) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 
#define vsf_sdio_host_request(__SDIO, ...)   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_host_request) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)
 

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 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
}
 

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.
 
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_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_single_voltage (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)
 request sdio operation in host mode.
 

Macro Definition Documentation

◆ VSF_SDIO_CFG_MULTI_CLASS

#define VSF_SDIO_CFG_MULTI_CLASS   ENABLED

◆ VSF_SDIO_CFG_PREFIX

#define VSF_SDIO_CFG_PREFIX   vsf

◆ VSF_SDIO_CFG_FUNCTION_RENAME

#define VSF_SDIO_CFG_FUNCTION_RENAME   ENABLED

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_MODE   DISABLED

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CFG   DISABLED

Redefine struct vsf_sdio_cfg_t. The vsf_sdio_isr_handler_t type also needs to be redefined For compatibility, members should not be deleted when struct vsf_sdio_cfg_t redefining.

◆ VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY

#define VSF_SDIO_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED

Redefine struct vsf_sdio_capability_t. For compatibility, members should not be deleted when struct vsf_sdio_capability_t redefining.

◆ VSF_SDIO_CFG_INHERT_HAL_CAPABILITY

#define VSF_SDIO_CFG_INHERT_HAL_CAPABILITY   ENABLED

◆ 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)
Value:
__VSF_HAL_TEMPLATE_API(__prefix, vsf_err_t, sdio, init, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, vsf_sdio_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix, void, sdio, fini, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix, void, sdio, irq_enable, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix, void, sdio, irq_disable, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, vsf_sdio_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix, vsf_sdio_status_t, sdio, status, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix, vsf_sdio_capability_t, sdio, capability, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix, vsf_err_t, sdio, set_clock, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, uint32_t clock_hz, bool is_ddr) \
__VSF_HAL_TEMPLATE_API(__prefix, vsf_err_t, sdio, set_bus_width, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, uint8_t bus_width) \
__VSF_HAL_TEMPLATE_API(__prefix, vsf_err_t, sdio, host_request, VSF_MCONNECT(__prefix, _sdio_t) *sdio_ptr, vsf_sdio_req_t *req)
vsf_err_t
Definition __type.h:42
vsf_sdio_irq_mask_t
Definition sdio.h:78
struct VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_t)
Definition flash.c:53
__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:639
sdio configuration
Definition vsf_template_sdio.h:718
Definition vsf_template_sdio.h:592
Definition vsf_template_sdio.h:630
#define __VSF_HAL_TEMPLATE_API
Definition vsf_template_sdio.h:728
uint8_t status
Definition vsf_tgui.h:122

◆ 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)

◆ __VSF_HAL_TEMPLATE_API

#define __VSF_HAL_TEMPLATE_API   VSF_HAL_TEMPLATE_API_FP

◆ __vsf_sdio_t

#define __vsf_sdio_t   VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_t)

◆ vsf_sdio_init

#define vsf_sdio_init (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_init) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

◆ vsf_sdio_enable

#define vsf_sdio_enable (   __SDIO)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_enable) ((__vsf_sdio_t *)(__SDIO))

◆ vsf_sdio_disable

#define vsf_sdio_disable (   __SDIO)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_disable) ((__vsf_sdio_t *)(__SDIO))

◆ vsf_sdio_irq_enable

#define vsf_sdio_irq_enable (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_enable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

◆ vsf_sdio_irq_disable

#define vsf_sdio_irq_disable (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_irq_disable) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

◆ vsf_sdio_status

#define vsf_sdio_status (   __SDIO)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_status) ((__vsf_sdio_t *)(__SDIO))

◆ vsf_sdio_capability

#define vsf_sdio_capability (   __SDIO)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_capability) ((__vsf_sdio_t *)(__SDIO))

◆ vsf_sdio_set_clock

#define vsf_sdio_set_clock (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_clock) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

◆ vsf_sdio_set_bus_width

#define vsf_sdio_set_bus_width (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_set_bus_width) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

◆ vsf_sdio_host_request

#define vsf_sdio_host_request (   __SDIO,
  ... 
)    VSF_MCONNECT(VSF_SDIO_CFG_PREFIX, _sdio_host_request) ((__vsf_sdio_t *)(__SDIO), ##__VA_ARGS__)

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_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:734

◆ 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 

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_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_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_single_voltage()

vsf_err_t vsf_sdio_single_voltage ( 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

request sdio operation in host mode.

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