VSF Documented
Macros | Typedefs | Enumerations | Functions
sdio_probe.c File Reference
#include "hal/vsf_hal.h"
#include "hal/driver/driver.h"
#include "hal/driver/common/template/vsf_template_sdio.h"
#include "./sdio_probe.h"

Macros

#define __VSF_SDIO_PROBE_CLASS_IMPLEMENT
 
#define SDIO_SEND_IF_COND_CHECK_PATTERN   0xAA
 
#define SD_ACMD41_ARG_OCR_S18R   (0x01UL << 24)
 
#define SD_ACMD41_ARG_OCR_HCS   (0x01UL << 30)
 
#define SD_ACMD41_RSP_OCR_S18A   (0x01UL << 24)
 
#define SD_ACMD41_RSP_OCR_CCS   (0x01UL << 30)
 
#define SD_ACMD41_RSP_OCR_BUSY   (0x01UL << 31)
 
#define SDIO_CMD1_RSP_OCR_BUSY   (0x01UL << 31)
 
#define SDIO_OCR_HVOLTAGE_MASK   0x00FF8000
 
#define SDIO_OCR_LVOLTAGE_MASK   0x00007F80
 
#define SDIO_OCR_DVOLTAGE_MASK   (SDIO_OCR_HVOLTAGE_MASK | SDIO_OCR_LVOLTAGE_MASK)
 
#define SDIO_OCR_SECTOR_MODE   0x40000000
 
#define SDIO_OCR_ACCESS_MODE_MASK   0x60000000
 

Typedefs

typedef enum vsf_sdio_probe_state_t vsf_sdio_probe_state_t
 

Enumerations

enum  vsf_sdio_probe_state_t {
  VSF_SDIO_PROBE_STATE_APP_CMD ,
  VSF_SDIO_PROBE_STATE_GO_IDLE ,
  VSF_SDIO_PROBE_STATE_SEND_IF_COND ,
  VSF_SDIO_PROBE_STATE_SEND_OP_COND_APP ,
  VSF_SDIO_PROBE_STATE_SEND_OP_COND ,
  VSF_SDIO_PROBE_STATE_SEND_OP_COND_DONE ,
  VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND_GO_IDLE ,
  VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND ,
  VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND_DONE ,
  VSF_SDIO_PROBE_STATE_ALL_SEND_CID ,
  VSF_SDIO_PROBE_STATE_RELATIVE_ADDR ,
  VSF_SDIO_PROBE_STATE_SEND_CSD ,
  VSF_SDIO_PROBE_STATE_SET_DSR ,
  VSF_SDIO_PROBE_STATE_SELECT_CARD ,
  VSF_SDIO_PROBE_STATE_SET_BUS_WIDTH ,
  VSF_SDIO_PROBE_STATE_SET_BUS_WIDTH_DONE ,
  VSF_SDIO_PROBE_STATE_SET_BLOCK_LEN ,
  VSF_SDIO_PROBE_STATE_DONE
}
 

Functions

vsf_err_t vsf_sdio_probe_start (vsf_sdio_t *sdio, vsf_sdio_probe_t *probe)
 start sdio probe, SDIO MUST be initialized by calling vsf_sdio_init first.
 
vsf_err_t vsf_sdio_probe_irqhandler (vsf_sdio_t *sdio, vsf_sdio_probe_t *probe, vsf_sdio_irq_mask_t irq_mask, vsf_sdio_reqsts_t status, uint32_t resp[4])
 called in sdio irqhandler while probing sdio.
 

Macro Definition Documentation

◆ __VSF_SDIO_PROBE_CLASS_IMPLEMENT

#define __VSF_SDIO_PROBE_CLASS_IMPLEMENT

◆ SDIO_SEND_IF_COND_CHECK_PATTERN

#define SDIO_SEND_IF_COND_CHECK_PATTERN   0xAA

◆ SD_ACMD41_ARG_OCR_S18R

#define SD_ACMD41_ARG_OCR_S18R   (0x01UL << 24)

◆ SD_ACMD41_ARG_OCR_HCS

#define SD_ACMD41_ARG_OCR_HCS   (0x01UL << 30)

◆ SD_ACMD41_RSP_OCR_S18A

#define SD_ACMD41_RSP_OCR_S18A   (0x01UL << 24)

◆ SD_ACMD41_RSP_OCR_CCS

#define SD_ACMD41_RSP_OCR_CCS   (0x01UL << 30)

◆ SD_ACMD41_RSP_OCR_BUSY

#define SD_ACMD41_RSP_OCR_BUSY   (0x01UL << 31)

◆ SDIO_CMD1_RSP_OCR_BUSY

#define SDIO_CMD1_RSP_OCR_BUSY   (0x01UL << 31)

◆ SDIO_OCR_HVOLTAGE_MASK

#define SDIO_OCR_HVOLTAGE_MASK   0x00FF8000

◆ SDIO_OCR_LVOLTAGE_MASK

#define SDIO_OCR_LVOLTAGE_MASK   0x00007F80

◆ SDIO_OCR_DVOLTAGE_MASK

#define SDIO_OCR_DVOLTAGE_MASK   (SDIO_OCR_HVOLTAGE_MASK | SDIO_OCR_LVOLTAGE_MASK)

◆ SDIO_OCR_SECTOR_MODE

#define SDIO_OCR_SECTOR_MODE   0x40000000

◆ SDIO_OCR_ACCESS_MODE_MASK

#define SDIO_OCR_ACCESS_MODE_MASK   0x60000000

Typedef Documentation

◆ vsf_sdio_probe_state_t

Enumeration Type Documentation

◆ vsf_sdio_probe_state_t

Enumerator
VSF_SDIO_PROBE_STATE_APP_CMD 
VSF_SDIO_PROBE_STATE_GO_IDLE 
VSF_SDIO_PROBE_STATE_SEND_IF_COND 
VSF_SDIO_PROBE_STATE_SEND_OP_COND_APP 
VSF_SDIO_PROBE_STATE_SEND_OP_COND 
VSF_SDIO_PROBE_STATE_SEND_OP_COND_DONE 
VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND_GO_IDLE 
VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND 
VSF_SDIO_PROBE_STATE_MMC_SEND_OP_COND_DONE 
VSF_SDIO_PROBE_STATE_ALL_SEND_CID 
VSF_SDIO_PROBE_STATE_RELATIVE_ADDR 
VSF_SDIO_PROBE_STATE_SEND_CSD 
VSF_SDIO_PROBE_STATE_SET_DSR 
VSF_SDIO_PROBE_STATE_SELECT_CARD 
VSF_SDIO_PROBE_STATE_SET_BUS_WIDTH 
VSF_SDIO_PROBE_STATE_SET_BUS_WIDTH_DONE 
VSF_SDIO_PROBE_STATE_SET_BLOCK_LEN 
VSF_SDIO_PROBE_STATE_DONE 

Function Documentation

◆ vsf_sdio_probe_start()

vsf_err_t vsf_sdio_probe_start ( vsf_sdio_t sdio,
vsf_sdio_probe_t probe 
)

start sdio probe, SDIO MUST be initialized by calling vsf_sdio_init first.

Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]vsf_sdio_probe_ta pointer to struct vsf_sdio_probe_t
Returns
vsf_err_t: on success, returns VSF_ERR_NONE(0); on error, returns err code(< 0)

◆ vsf_sdio_probe_irqhandler()

vsf_err_t vsf_sdio_probe_irqhandler ( vsf_sdio_t sdio,
vsf_sdio_probe_t probe,
vsf_sdio_irq_mask_t  irq_mask,
vsf_sdio_reqsts_t  status,
uint32_t  resp[4] 
)

called in sdio irqhandler while probing sdio.

Note
if probe->delay_ms is none zero after returned with VSF_ERR_NOT_READY, vsf_sdio_probe_irqhandler(irq_mask: 0, status: 0) should be called again after delay_ms delayed.
Parameters
[in]sdio_ptra pointer to structure vsf_sdio_t
[in]vsf_sdio_probe_ta pointer to struct vsf_sdio_probe_t
[in]irq_maskone or more value of enum vsf_sdio_irq_mask_t
[in]statustransact status.
[in]respresponse.
Returns
vsf_err_t: on success, returns VSF_ERR_NONE(0); on going, returns VSF_ERR_NOT_READY(> 0); on error, returns err code(< 0)