DRV_SDIO

[English]

DRV_SDIO API Status

API

drv_sdio_init()

drv_sdio_deinit()

drv_sdio_set_sys_clk()

drv_sdio_send_cmd()

drv_sdio_wait_cmd_rsp()

drv_sdio_get_cmd_rsp_argument()

drv_sdio_set_data_timeout()

drv_sdio_config_data()

drv_sdio_read_data_fifo()

drv_sdio_write_data_fifo()

drv_sdio_read_data_start()

drv_sdio_write_data_start()

drv_sdio_wait_read_done()

drv_sdio_wait_write_done()

drv_sdio_interrupt_callback_register()

drv_sdio_get_rx_fifo_addr()

drv_sdio_get_tx_fifo_addr()

drv_sdio_set_tx_empty()

drv_sdio_wait_tx_fifo_empty()

drv_sdio_sd_reset()

drv_sdio_clear_wr_end_int()

DRV_SDIO Pin and GPIO Map

SDIO Pin

Number

SDIO CLK

2

SDIO CSN

3

SDIO DATA[0]

4

SDIO DATA[1]

5

SDIO DATA[3]

10

SDIO DATA[4]

11

DRV_SDIO API Reference

Header File

Functions

uint32_t drv_sdio_init(uint32_t dev_index)

Init the sdio host driver.

This API init the resoure common:

  • Power up the sdio

  • Enable sdio host interrupt

  • Configure the sdio clock soure to 26M

Attention

1. This API should be called before any other sdio host APIs

返回值:
  • 0 – fail

  • other – success

返回:

device instance

int32_t drv_sdio_deinit(uint32_t dev_instance)

Deinit the sdio host driver.

  • Reset all configuration of sdio host to default value

    • Clear sdio host interrupt status

  • Power down the sdio host

  • Disable sdio host interrupt

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

void drv_sdio_set_sys_clk(sdio_clock_src_e clock_src, sdio_clock_div_e clock_div)

Set the sdio clock.

参数:
  • clock_src[in] clock的源头

  • clock_div[in] 分频系数

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_send_cmd(uint32_t dev_instance, sdio_cmd_config_t *p_cmd)

Send the command from host to slave.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • p_cmd[in] command the configuration information for the command

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_wait_cmd_rsp(uint32_t dev_instance, uint32_t cmd_index)

Host wait for salve command response.

函数是阻塞式等待slave响应,不能与drv_sdio_interrupt_callback_register进行混用

参数:
  • dev_instance[in] return value of drv_spi_init()

  • cmd_index[in] cmd_index the command index

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

uint32_t drv_sdio_get_cmd_rsp_argument(uint32_t dev_instance, sdio_response_e argument_index)

Get the command response.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • argument_index[in] argument_index the command argument index

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_set_data_timeout(uint32_t dev_instance, uint32_t timeout)

Set the data timeout.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • timeout[in] timeout the data timeout

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_config_data(uint32_t dev_instance, const sdio_data_config_t *data_config)

Config the data.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • data_config[in] data_config the configuration information for the data

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_read_data_fifo(uint32_t dev_instance, uint32_t *pu4_buf)

Read data from rx fifo.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • pu4_buf[in] pointer to read data

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_write_data_fifo(uint32_t dev_instance, uint32_t write_data)

Write data to tx fifo.

参数:
  • dev_instance[in] return value of drv_spi_init()

  • write_data[in] write_data pointer to data to write

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_read_data_start(uint32_t dev_instance)

host starts reading data from slave

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_write_data_start(uint32_t dev_instance)

host starts writing data to slave

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_wait_read_done(uint32_t dev_instance)

wait read data done

函数是阻塞式等待slave响应,不能与drv_sdio_interrupt_callback_register进行混用

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_wait_write_done(uint32_t dev_instance)

wait read data done

函数是阻塞式等待host发送数据完成,,不能与drv_sdio_interrupt_callback_register进行混用

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_sdio_interrupt_callback_register(uint32_t dev_instance, pfunc_sdio_cb_t pfn_cb, void *pv_arg)

register callback to sdio drvier

注册了此函数,sdio的操作结果将通过回调函数通知用户。 此函数不能drv_sdio_wait_write_done(),drv_sdio_wait_read_done(),drv_sdio_wait_cmd_rsp()进行混用

参数:
  • dev_instance[in] return value of drv_spi_init()

  • pfn_cb[in] callback function for async recevie. it can be NULL if you do not want async recevie

  • pv_arg[in] callback function paramters

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

uint32_t drv_sdio_get_rx_fifo_addr(uint32_t dev_instance)

get rx fifo address

参数:

dev_instance[in] return value of drv_spi_init()

返回:

address

uint32_t drv_sdio_get_tx_fifo_addr(uint32_t dev_instance)

get tx fifo address

参数:

dev_instance[in] return value of drv_spi_init()

返回:

address

int32_t drv_sdio_set_tx_empty(uint32_t dev_instance, uint32_t enable)
int32_t drv_sdio_wait_tx_fifo_empty(uint32_t dev_instance)
int32_t drv_sdio_sd_reset(uint32_t dev_instance)
int32_t drv_sdio_clear_wr_end_int(uint32_t dev_instance)

Structures

struct sdio_cmd_config_t

Public Members

uint32_t cmd_index

sdio command index, between 0 and 63

uint32_t argument

sdio command argument

sdio_cmd_rsp_e response

sdio command response type

uint32_t wait_rsp_timeout

sdio wait for slave command response timeout

bool crc_check

sdio whether need to check slave response crc value

struct sdio_data_config_t

Public Members

sdio_data_direction_e data_dir

sdio data direction

bool multi_block_flag

sdio received data multiple blocks true: multiple blocks flash: single block

uint32_t data_block_size

sdio data block size

uint32_t data_timeout

sdio data timeout

uint32_t data_len

sdio data length

sdio_bus_width_e bus_width

sdio data bus width

sdio_data_byte_sel_e data_byte_sel

sdio wires transfer data with little-endian or big-endian

Macros

SDIO_DEV_NUM

Type Definitions

typedef void (*pfunc_sdio_cb_t)(int32_t status, sdio_op_type_e op_type, void *param)

Enumerations

enum sdio_response_e

Values:

enumerator SDIO_RSP0

sdio response regiseter 0

enumerator SDIO_RSP1

sdio response regiseter 1

enumerator SDIO_RSP2

sdio response regiseter 2

enumerator SDIO_RSP3

sdio response regiseter 3

enum sdio_cmd_rsp_e

Values:

enumerator SDIO_CMD_RSP_NONE

sdio not need slave respond the command

enumerator SDIO_CMD_RSP_SHORT

sdio need slave long response

enumerator SDIO_CMD_RSP_LONG

sdio need slave short response

enum sdio_data_direction_e

Values:

enumerator SDIO_DATA_DIR_RD

sdio data direction read

enumerator SDIO_DATA_DIR_WR

sdio data direction write

enum sdio_clock_src_e

Values:

enumerator SDIO_CLK_XTAL

sdio clk source, XTAL 26M

enumerator SDIO_CLK_DPLL

sdio clk source, DPLL top:336M

enum sdio_clock_div_e

Values:

enumerator SDIO_CLK_DIV1

sdio clk source, division 1

enumerator SDIO_CLK_DIV2

sdio clk source, division 2

enumerator SDIO_CLK_DIV3

sdio clk source, division 3

enumerator SDIO_CLK_DIV4

sdio clk source, division 4

enumerator SDIO_CLK_DIV5

sdio clk source, division 5

enumerator SDIO_CLK_DIV6

sdio clk source, division 6

enumerator SDIO_CLK_DIV7

sdio clk source, division 7

enumerator SDIO_CLK_DIV8

sdio clk source, division 8

enum sdio_bus_width_e

Values:

enumerator SDIO_BUS_WIDTH_1LINE

sdio bus width 1 line

enumerator SDIO_BUS_WIDTH_4LINE

sdio bus width 4 line

enum sdio_data_byte_sel_e

Values:

enumerator SDIO_DATA_LITTLE_ENDIAN

sdio wires transfer data with little-endian

enumerator SDIO_DATA_BIG_ENDIAN

sdio wires transfer data with big-endian

enum sdio_op_type_e

Values:

enumerator SDIO_CMD_OP

sdio command operation

enumerator SDIO_DATA_OP

sdio data operation