DRV_I2C

[English]

DRV_I2C API Status

API

drv_i2c_init()

drv_i2c_deinit()

drv_i2c_master_trx()

drv_i2c_slave_rx()

drv_i2c_slave_tx()

DRV_I2C UNIT Number

Capability

Number

UNIT Number

2

DRV_I2C Pin and GPIO Map

SPI Pin

Number

I2C0 SCK

0

I2C0 SDA

1

I2C1 SCK

7

I2C1 SDA

8

DRV_I2C API Reference

Header File

Functions

uint32_t drv_i2c_init(uint32_t dev_index, uint16_t slv_addr_7bit, uint32_t work_clk_hz)

init a I2C device.

初始化I2C设备. 由于我们的I2C同时支持master和slave角色,所以如果期望切换角色或者 切换不同的工作clock,或者slv_addr有变动的时候,就需要再次调用该函数

参数:
  • dev_index[in] device index, from 0(the first device), < I2C_DEVICE_NUM

  • slv_addr_7bit[in] for master: it is equal zero for slave: it’s own address, only high 7 bit in the first byte from master 不包括第一个byte的最低位的读写位,如果是10bit地址,也是纯地址部分

  • work_clk_hz[in] work clock in HZ

返回值:
  • 0 – fail

  • other – success

返回:

device instance

int32_t drv_i2c_deinit(uint32_t dev_instance)

deinit a I2C device.

反初始化I2C设备。是 drv_i2c_init()的反向操作。两次调用 drv_i2c_init()之间需要 调用一次 drv_i2c_deinit()

参数:

dev_instance[in] return value of drv_i2c_init()

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_i2c_master_trx(uint32_t dev_instance, uint8_t *pu1_buf, uint16_t tx_size, uint16_t rx_size, bool gen_stop, pfunc_i2c_cb_t pfn_cb, void *pv_arg)

master tx and rx data on I2C bus.

master发起tx和rx的动作,也可以只进行tx的动作。pu1_buf 的第一个byte是寻址信息 该函数是一个异步函数,完成RX的动作后会调用回调函数 pfn_cb 进行通知

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

  • pu1_buf[in] tx/rx buffer pointer, buffer size is tx_size+rx_size

  • tx_size[in] buffer tx size in byte, slave address is in this feild

  • rx_size[in] buffer rx size in byte, 0 if you want to rx nothing

  • gen_stop[in] true: send stop when transfer finish false: do not send stop

  • pfn_cb[in] finish callback

  • pv_arg[in] argument for rx finish callback

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_i2c_slave_rx(uint32_t dev_instance, uint8_t *pu1_buf, uint16_t rx_size, pfunc_i2c_cb_t pfn_cb, void *pv_arg)

slave rx data on I2C bus.

slave RX data, pu1_buf的数据不包括slave address部分 该函数是一个异步函数,完成RX的动作后会调用回调函数 pfn_cb 进行通知

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

  • pu1_buf[in] rx buffer pointer

  • rx_size[in] rx buffer size in byte

  • pfn_cb[in] rx finish callback

  • pv_arg[in] argument for rx finish callback

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

int32_t drv_i2c_slave_tx(uint32_t dev_instance, uint8_t *pu1_buf, uint16_t tx_size, pfunc_i2c_cb_t pfn_cb, void *pv_arg)

slave tx data on I2C bus.

slave TX data, pu1_buf的数据不包括address byte 该函数是一个异步函数,完成TX的动作后会调用回调函数 pfn_cb 进行通知

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

  • pu1_buf[in] tx buffer pointer

  • tx_size[in] tx buffer size in byte

  • pfn_cb[in] tx finish callback

  • pv_arg[in] argument for tx finish callback

返回值:
  • 0 – success [BK_RET_OK]

  • other – fail

返回:

result

Macros

I2C_DEVICE_NUM

I2C device number.

I2C_RW_FLAG_INDICATOR_WRITE
I2C_RW_FLAG_INDICATOR_READ

Type Definitions

typedef enum _drv_i2c_role_e drv_i2c_role_e

driver I2C work role

typedef void (*pfunc_i2c_cb_t)(uint32_t dev_instance, int32_t err_code, void *pv_arg)

driver I2C callback for tx or rx, it means no error when err_code==0

Enumerations

enum _drv_i2c_role_e

driver I2C work role

Values:

enumerator DRV_I2C_MASTER
enumerator DRV_I2C_SLAVE