DRV_SPI

[English]

DRV_SPI API Status

API

drv_spi_init()

drv_spi_deinit()

drv_spi_config()

drv_spi_set_enable()

drv_spi_register_tx_finish_cbk()

drv_spi_register_rx_finish_cbk()

drv_spi_register_slv_cs_release_cbk()

drv_spi_unregister_tx_finish_cbk()

drv_spi_unregister_rx_finish_cbk()

drv_spi_unregister_slv_cs_release_cbk()

drv_spi_tx_clr()

drv_spi_rx_clr()

drv_spi_tx()

drv_spi_rx()

drv_spi_txrx()

drv_spi_transmit()

drv_spi_tx_async()

drv_spi_rx_async()

drv_spi_txrx_async()

drv_spi_transmit_async()

drv_spi_dma_tx()

drv_spi_dma_rx()

drv_spi_dma_transmit()

drv_spi_slave_tx()

drv_spi_slave_rx()

drv_spi_slave_transmit()

drv_spi_slave_tx_aync()

drv_spi_slave_rx_aync()

drv_spi_slave_transmit_async()

drv_spi_slave_dma_tx()

drv_spi_slave_dma_rx()

drv_spi_slave_dma_transmit()

DRV_SPI Pin and GPIO Map

SPI Pin

Number

SPI0 SCK

13

SPI0 CSN

14

SPI0 MOSI

15

SPI0 MISO

16

DRV_SPI API Reference

Header File

Functions

uint32_t drv_spi_init(uint8_t dev_index)

init a spi device.

初始化设备,在使用spi功能前需要调用它获取device instance

参数:

dev_index[in] device index, from 0(the first device)

返回值:
  • 0 – fail

  • other – success

返回:

device instance

int32_t drv_spi_deinit(uint32_t dev_instance)

deinit a spi device.

反初始化spi设备,对drv_spi_init()进行反向操作

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_config(uint32_t dev_instance, spi_config_t *p_param)

config spi parameter.

对spi设备参数的配置,在配置前需要确保spi处于关闭状态

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

  • p_param[in] 参数结构体指针

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_set_enable(uint32_t dev_instance, uint8_t enable)

enable or disable spi device

开起或者关闭spi的设备

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

  • enable[in] enable or disable

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_register_tx_finish_cbk(uint32_t dev_instance, pfunc_spi_cb_t pfn_cb, void *pv_arg)

register tx finish callback function

注册发送结束回调函数,此函数通知用户此次发送结束

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

  • pfn_cb[in] callback when tx finish

  • pv_arg[in] callback parameter

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_register_rx_finish_cbk(uint32_t dev_instance, pfunc_spi_cb_t pfn_cb, void *pv_arg)

register rx finish callback function

注册接收结束回调函数,此函数通知用户此次接收结束

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

  • pfn_cb[in] callback when rx finish

  • pv_arg[in] callback parameter

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_register_slv_cs_release_cbk(uint32_t dev_instance, pfunc_spi_cs_release_cb_t pfn_cb, void *pv_arg)

register rx finish callback function

注销CS释放回调函数,仅spi做slave有效

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

  • pfn_cb[in] callback when rx finish

  • pv_arg[in] callback parameter

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_unregister_tx_finish_cbk(uint32_t dev_instance)

unregister tx finish callback function

注销接收结束回调函数

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_unregister_rx_finish_cbk(uint32_t dev_instance)

unregister rx finish callback function

注销接收结束回调函数

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_unregister_slv_cs_release_cbk(uint32_t dev_instance)

unregister rx finish callback function

注销CS释放回调函数,仅spi做slave有效 回调函数中会携带,当前实际接收或者发送的数据长度

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_tx_clr(uint32_t dev_instance)

disable spi tx operation

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_rx_clr(uint32_t dev_instance)

disable spi rx operation

参数:

dev_instance[in] return value of drv_spi_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_tx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master send

spi同步发送,发送完成才会退出函数 发送数据长度的不能大于0xFFF 发送完成不会调用注册的发送完成回调函数通知用户

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_rx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master receive

spi同步接收,接收完成才会退出函数 接收数据长度的不能大于0xFFF 接收完成不会调用注册的接收完成回调函数通知用户

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_txrx(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi master send and receive data

spi同步发送接收,发送接收完成才会退出函数 先发送数据,然后再接收数据 发送数据长度加上接收数据长度的不能大于0xFFF 发送,接收完毕后都不会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_transmit(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi master send and receive data

spi全双工同步接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 发送,接收完毕后都不会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_tx_async(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master send

spi异步发送,发送完成会调用注册的发送完成回调函数通知用户 发送数据长度的不能大于0xFFF

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_rx_async(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master receive

spi异步接收,接收完成会调用注册的接收完成回调函数通知用户 接收数据长度的不能大于0xFFF

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_txrx_async(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi master send and receive data

spi发送接收异步接口 先发送数据,然后再接收数据 发送数据长度加上接收数据长度的不能大于0xFFF 发送,接收完毕后都会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_transmit_async(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi master send and receive data

spi全双工异步接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 发送,接收完毕后都会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_dma_tx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master send

spi 使用dma的异步发送,发送完成会调用注册的发送完成回调函数通知用户 发送数据长度的不能大于0xFFF

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_dma_rx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi master receive

spi使用dma的异步接收,接收完成会调用注册的接收完成回调函数通知用户 接收数据长度的不能大于0xFFF

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_dma_transmit(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi master send and receive data

spi全双工DMA接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 此接口与drv_spi_transmit()和drv_spi_transmit_async()接口存在区别,不能做到相互替换

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针,接收完毕后接收缓存前面会包含tx_size个无效数据。

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_tx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave send

spi同步发送,发送完成才会退出函数 发送数据长度的不能大于0xFFF 发送完成不会调用注册的发送完成回调函数通知用户

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_rx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave receive

spi同步接收,接收完成才会退出函数 接收数据长度的不能大于0xFFF 接收完成不会调用注册的接收完成回调函数通知用户

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_transmit(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi slave send and receive data

spi全双工同步接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 发送,接收完毕后都不会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_tx_aync(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave send

spi异步发送,发送完成会调用注册的发送完成回调函数通知用户 发送数据长度的不能大于0xFFF

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_rx_aync(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave receive

spi异步接收,接收完成会调用注册的接收完成回调函数通知用户 接收数据长度的不能大于0xFFF

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_transmit_async(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi slave send and receive data

spi全双工异步接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 发送,接收完毕后都会调用注册的接收完成回调函数通知用户

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_dma_tx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave send

spi 使用dma的异步发送,发送完成会调用注册的发送完成回调函数通知用户 发送数据长度的不能大于0xFFF

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

  • pu1_buf[in] 发送数据缓存指针

  • size[in] 发送的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_dma_rx(uint32_t dev_instance, uint8_t *pu1_buf, uint32_t size)

spi slave receive

spi使用dma的异步接收,接收完成会调用注册的接收完成回调函数通知用户 接收数据长度的不能大于0xFFF

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

  • pu1_buf[in] 接收数据缓存指针

  • size[in] 接收的数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_spi_slave_dma_transmit(uint32_t dev_instance, uint8_t *pu1_tx_buf, uint32_t tx_size, uint8_t *pu1_rx_buf, uint32_t rx_size)

spi slave send and receive data

spi全双工DMA接口 发送数据长度的不能大于0xFFF 接收数据长度的不能大于0xFFF 此接口与drv_spi_transmit()和drv_spi_transmit_async()接口存在区别,不能做到相互替换

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

  • pu1_tx_buf[in] 发送数据缓存指针

  • tx_size[in] 发送数据长度,byte

  • pu1_rx_buf[in] 接收数据缓存指针

  • rx_size[in] 接收数据长度,byte

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

Structures

struct spi_config_t

SPI device config struct definition.

Public Members

spi_role_e role

SPI as master or slave

uint32_t clk

SPI HW work clock

uint32_t baud_rate

SPI transmit and receive SCK clock

spi_wire_mode_e wire_mode

SPI wire mode

spi_cpol_e cpol

SPI clock cpol

spi_cpha_e cpha

SPI clock cpha

spi_bit_order_e bit_order

SPI bit order, MSB/LSB

Macros

SPI_DEVICE_NUM

SPI DEVICE NUMBERS

CONFIG_SPI_DMA
DMA_DEVICE_INDEX_FOR_SPI

Type Definitions

typedef void (*pfunc_spi_cb_t)(uint32_t dev_instance, int32_t err_code, uint32_t op_len, void *param)
typedef void (*pfunc_spi_cs_release_cb_t)(uint32_t dev_instance, int32_t err_code, uint32_t tx_len, uint32_t rx_len, void *param)

Enumerations

enum spi_role_e

SPI device role mode definition.

Values:

enumerator SPI_ROLE_SLAVE

SPI as slave

enumerator SPI_ROLE_MASTER

SPI as master

enum spi_cpol_e

SPI CPOL definition.

Values:

enumerator SPI_CPOL_0

SPI clock phase low

enumerator SPI_CPOL_1

SPI clock phase high

enum spi_cpha_e

SPI CPHA definition.

Values:

enumerator SPI_CPHA_0

SPI clock phase the first edge

enumerator SPI_CPHA_1

SPI clock phase the second edge

enum spi_wire_mode_e

SPI Work line mode definition.

Values:

enumerator SPI_4WIRE_MODE

SPI four wire mode

enumerator SPI_3WIRE_MODE

SPI three wire mode (no cs)

enum spi_bit_order_e

SPI bit order definition.

Values:

enumerator SPI_MSB_FIRST

SPI MSB first

enumerator SPI_LSB_FIRST

SPI LSB first