Note

This is the documentation for the latest development branch and may refer to features that are not available in released versions. If you are looking for the documentation for a specific release, use the drop-down menu on the left and select the desired version.

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 address

  • flags: Transmission flags (read/write, 10-bit address, etc.)

  • len: data length

  • buf: Data buffer pointer

drv_i2c_slave_inst_t#

Description: I2C slave instance structure.

I2C transfer flags#

  • DRV_I2C_WR: write operation

  • DRV_I2C_RD: read operation

  • DRV_I2C_ADDR_10BIT: 10-bit address mode

  • DRV_I2C_NO_START: Do not send start signal

  • DRV_I2C_IGNORE_NACK: Ignore NACK

  • DRV_I2C_NO_READ_ACK: No ACK is sent when reading

  • DRV_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 I2C

  • freq: 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 pointer

  • freq: 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 pointer

  • timeout_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 pointer

  • msgs: message array

  • msg_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 number

  • int drv_i2c_master_get_fd(drv_i2c_inst_t* inst); - Get file descriptor

  • uint32_t drv_i2c_master_get_freq(drv_i2c_inst_t* inst); - Get clock frequency

  • uint32_t drv_i2c_master_get_timeout_ms(drv_i2c_inst_t* inst); - Get timeout

  • uint8_t drv_i2c_master_get_pin_scl(drv_i2c_inst_t* inst); - Get SCL pin number

  • uint8_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 number

  • buffer_size: buffer size

  • slave_address: slave address

  • scl: SCL pin number

  • sda: SDA pin number

  • inst: 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 number

  • int drv_i2c_slave_get_fd(drv_i2c_slave_inst_t* inst); - Get file descriptor

  • uint8_t drv_i2c_slave_get_pin_scl(drv_i2c_slave_inst_t* inst); - Get SCL pin number

  • uint8_t drv_i2c_slave_get_pin_sda(drv_i2c_slave_inst_t* inst); - Get SDA pin number

  • uint32_t drv_i2c_slave_get_buffer_size(drv_i2c_slave_inst_t* inst); - Get buffer size

  • uint16_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:

  1. Before using hardware I2C, you need to configure the corresponding pin function through FPIOA

Comments list
Comments
Log in