DRV_I2C
DRV_I2C API Status
API |
|---|
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