I2C HAL interface documentation#
Hardware introduction#
K230 has a total of 5 i2c channels. The i2c module supports master-slave mode, 7/10-bit addressing, and interrupts. The i2c module transmission rate supports 100k/400k/1M/3.4M.
Data structure description#
drv_i2c_inst_t#
Description: I2C host instance structure, containing I2C configuration and status information.
i2c_msg_t#
Description: I2C message structure.
addr: device addressflags: Transmission flags (read/write, 10-bit address, etc.)len: data lengthbuf: Data buffer pointer
drv_i2c_slave_inst_t#
Description: I2C slave instance structure.
I2C transfer flags#
DRV_I2C_WR: write operationDRV_I2C_RD: read operationDRV_I2C_ADDR_10BIT: 10-bit address modeDRV_I2C_NO_START: Do not send start signalDRV_I2C_IGNORE_NACK: Ignore NACKDRV_I2C_NO_READ_ACK: No ACK is sent when readingDRV_I2C_NO_STOP: Do not send stop signal
I2C master mode interface#
int drv_i2c_inst_create(int id, uint32_t freq, uint32_t timeout_ms, uint8_t scl, uint8_t sda, drv_i2c_inst_t** inst);#
Function: Create an I2C master instance.
parameter:
id: I2C number, 0-4 is hardware I2C, greater than 4 is software I2Cfreq: I2C clock frequency (Hz)timeout_ms: timeout (milliseconds)scl: SCL pin number (valid in software I2C, must be less than 64)sda: SDA pin number (valid in software I2C, must be less than 64)inst: used to store the created I2C instance pointer
Return Value:
0: Success-1: failed
void drv_i2c_inst_destroy(drv_i2c_inst_t** inst);#
Function: Destroy the I2C host instance and release resources.
parameter:
inst: Pointer to I2C instance pointer
int drv_i2c_set_7b_addr(drv_i2c_inst_t* inst);#
Function: Set I2C to 7-bit address mode.
parameter:
inst: I2C instance pointer
Return Value:
0: Success-1: failed
int drv_i2c_set_10b_addr(drv_i2c_inst_t* inst);#
Function: Set I2C to 10-bit address mode.
parameter:
inst: I2C instance pointer
Return Value:
0: Success-1: failed
int drv_i2c_set_freq(drv_i2c_inst_t* inst, uint32_t freq);#
Function: Set I2C clock frequency.
parameter:
inst: I2C instance pointerfreq: clock frequency (Hz)
Return Value:
0: Success-1: failed
int drv_i2c_set_timeout(drv_i2c_inst_t* inst, uint32_t timeout_ms);#
Function: Set I2C timeout.
parameter:
inst: I2C instance pointertimeout_ms: timeout (milliseconds)
Return Value:
0: Success-1: failed
int drv_i2c_transfer(drv_i2c_inst_t* inst, i2c_msg_t* msgs, int msg_cnt);#
Function: Perform I2C transfer operation.
parameter:
inst: I2C instance pointermsgs: message arraymsg_cnt: Number of messages
Return Value:
0: Success-1: failed
I2C host attribute acquisition function#
The following functions are used to obtain various properties of the I2C master instance:
uint32_t drv_i2c_master_get_type(drv_i2c_inst_t* inst);- Get I2C type (hardware/software)int drv_i2c_master_get_id(drv_i2c_inst_t* inst);- Get I2C numberint drv_i2c_master_get_fd(drv_i2c_inst_t* inst);- Get file descriptoruint32_t drv_i2c_master_get_freq(drv_i2c_inst_t* inst);- Get clock frequencyuint32_t drv_i2c_master_get_timeout_ms(drv_i2c_inst_t* inst);- Get timeoutuint8_t drv_i2c_master_get_pin_scl(drv_i2c_inst_t* inst);- Get SCL pin numberuint8_t drv_i2c_master_get_pin_sda(drv_i2c_inst_t* inst);- Get SDA pin number
I2C slave mode interface#
int drv_i2c_slave_inst_create(int id, uint32_t buffer_size, uint16_t slave_address, uint8_t scl, uint8_t sda, drv_i2c_slave_inst_t** inst);#
Function: Create I2C slave instance.
parameter:
id: I2C numberbuffer_size: buffer sizeslave_address: slave addressscl: SCL pin numbersda: SDA pin numberinst: used to store the created slave instance pointer
Return Value:
0: Success-1: failed
I2C slave attribute acquisition function#
int drv_i2c_slave_get_id(drv_i2c_slave_inst_t* inst);- Get I2C numberint drv_i2c_slave_get_fd(drv_i2c_slave_inst_t* inst);- Get file descriptoruint8_t drv_i2c_slave_get_pin_scl(drv_i2c_slave_inst_t* inst);- Get SCL pin numberuint8_t drv_i2c_slave_get_pin_sda(drv_i2c_slave_inst_t* inst);- Get SDA pin numberuint32_t drv_i2c_slave_get_buffer_size(drv_i2c_slave_inst_t* inst);- Get buffer sizeuint16_t drv_i2c_slave_get_slave_address(drv_i2c_slave_inst_t* inst);- Get slave address
Usage example#
Please refer to src/rtsmart/libs/testcases/rtsmart_hal/test_i2c_ssd1306.c
Note:
Before using hardware I2C, you need to configure the corresponding pin function through FPIOA
