I2C#

Introduction#

I2C, which stands for Inter-Integrated Circuit, is a serial communication protocol commonly used in micro-controllers and other integrated circuits for communication between various peripheral devices and sensors. In micro-controllers, I2C is often used to connect peripherals like sensors, EEPROMs, real-time clocks, and other integrated circuits. The I2C protocol uses only two wires for communication: a serial data line (SDA) and a serial clock line (SCL). This makes it very efficient in terms of pin usage, which is particularly important in micro-controller systems where pin count might be limited.

  • In embedded industries, I2C (Inter-Integrated Circuit) is widely used for various applications due to its simplicity, flexibility, and low pin count requirements. Here are some common use cases of I2C in embedded systems:

  1. Sensor Integration

  2. Sensor Hubs and Fusion Algorithms

  3. Memory Expansion

  4. Real-Time Clock (RTC)

  5. Display Interfaces

  6. Peripheral Control

  7. Communication with Other Micro-controllers and Modules

  8. System Configuration and Control

Configuration#

  • For more information on configuring available parameters refer to the respective peripheral example readme document.

Usage#

The common I2C functions can be used after the I2C Structures are specified, passing an instance of sl_i2c_config_t. These functions will initiate and configure the I2C below, which is the flow for implementation.

  1. sl_i2c_driver_init

  2. sl_i2c_driver_set_follower_address (for follower)

  3. sl_i2c_driver_configure_fifo_threshold

  4. sl_i2c_driver_receive_data_blocking or

  5. sl_i2c_driver_send_data_blocking

  6. sl_i2c_driver_deinit

Note : The above flow is for I2C non-DMA operations. If the requirement is to use DMA Mode, then use send and receive non-blocking APIs sl_i2c_driver_receive_data_non_blocking and sl_i2c_driver_send_data_non_blocking.

Modules#

sl_i2c_config_t

sl_i2c_dma_config_t

sl_i2c_transfer_config_t

sl_i2c_pin_init_t

Enumerations#

enum
SL_I2C0
SL_I2C1
SL_I2C2
SL_I2C_LAST
}

Enumeration to represent I2C instances.

enum
SL_I2C_SUCCESS
SL_I2C_IDLE
SL_I2C_7BIT_ADD
SL_I2C_10BIT_ADD
SL_I2C_10BIT_ADD_WITH_REP_START
SL_I2C_ACKNOWLEDGE
SL_I2C_NACK
SL_I2C_DATA_TRANSFER_COMPLETE
SL_I2C_ARIBITRATION_LOST
SL_I2C_BUS_ERROR
SL_I2C_BUS_HOLD
SL_I2C_SDA_ERROR
SL_I2C_SCL_ERROR
SL_I2C_CALLBACK_BUSY
SL_I2C_DMA_TRANSFER_ERROR
SL_I2C_INVALID_PARAMETER
}

Enumeration to represent I2C driver status values.

enum
SL_I2C_USING_INTERRUPT
SL_I2C_USING_DMA
SL_I2C_TRANFER_TYPE_LAST
}

Enumeration to represent I2C transfer type.

enum
SL_I2C_STANDARD_MODE = 1
SL_I2C_FAST_MODE
SL_I2C_HIGH_SPEED_MODE
SL_I2C_FAST_PLUS_MODE
SL_I2C_OPERATING_MODE_LAST
}

Enumeration to represent I2C operating mode.

enum
SL_I2C_ULP_MODE
SL_I2C_HP_MODE
SL_I2C_POWER_MODE_LAST
}

Enumeration to represent I2C power modes.

Typedefs#

typedef void(*
sl_i2c_callback_t)(sl_i2c_instance_t i2c_instance, uint32_t status)

Callback for I2C Driver.

Variables#

sl_i2c_mode_t

Leader/Follower Mode, 0 for leader mode and 1 for follower mode.

uint32_t

DMA transmit channel number.

uint32_t

DMA receive channel number.

uint8_t *

Pointer to Tx Data buffer.

uint32_t

Number of bytes to transmit.

uint8_t *

Pointer to Rx Data buffer.

uint32_t

Number of bytes to receive.

uint8_t

PWM GPIO port.

uint8_t

PWM GPIO pin.

uint8_t

PWM GPIO mux.

uint8_t

PWM GPIO pad.

uint8_t

PWM GPIO port.

uint8_t

PWM GPIO pin.

uint8_t

PWM GPIO mux.

uint8_t

PWM GPIO pad.

Functions#

sl_i2c_driver_init(sl_i2c_instance_t i2c_instance, const sl_i2c_config_t *p_user_config)

Initialize the I2C Module and clock.

sl_i2c_driver_set_follower_address(sl_i2c_instance_t i2c_instance, uint16_t address)

This API configures the follower address of the I2C module.

sl_i2c_driver_configure_fifo_threshold(sl_i2c_instance_t i2c_instance, uint8_t tx_threshold_value, uint8_t rx_threshold_value)

This API configures the TX and RX FIFO threshold values.

sl_i2c_driver_get_frequency(sl_i2c_instance_t i2c_instance, uint32_t *frequency)

This API will read the current I2C clock frequency.

sl_i2c_driver_send_data_blocking(sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t *tx_buffer, uint32_t tx_len)

This API sends the data in blocking mode.

sl_i2c_driver_send_data_non_blocking(sl_i2c_instance_t i2c_instance, uint16_t address, uint32_t *tx_buffer, uint32_t tx_len, sl_i2c_dma_config_t *p_dma_config)

This API sends the data in non-blocking mode.

sl_i2c_driver_receive_data_blocking(sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t *rx_buffer, uint32_t rx_len)

This API receives the data in blocking mode.

sl_i2c_driver_receive_data_non_blocking(sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t *rx_buffer, uint32_t rx_len, sl_i2c_dma_config_t *p_dma_config)

This API receives the data in non-blocking mode.

sl_i2c_driver_transfer_data(sl_i2c_instance_t i2c_instance, sl_i2c_transfer_config_t const *p_transfer_config, uint16_t address)

This API transmits data and then receives data from an I2C device.

sl_i2c_driver_deinit(sl_i2c_instance_t i2c_instance)

De-initializes the I2C peripheral and clock.

sl_si91x_i2c_pin_init(sl_i2c_pin_init_t *pin_init)

Set the Pin configuration for I2C.

sl_i2c_driver_leader_reconfig_on_power_mode_change(sl_i2c_power_modes_t new_power_mode)

This API re-configures the I2C leader device on power mode changes.

sl_i2c_driver_enable_repeated_start(sl_i2c_instance_t i2c_instance, boolean_t enable_rep_start)

To enable or disable repeated start, to enable or disable combined format transfer.

Enumeration Documentation#

sl_i2c_instance_t#

sl_i2c_instance_t

Enumeration to represent I2C instances.

Enumerator
SL_I2C0

I2C Instance 0.

SL_I2C1

I2C Instance 1.

SL_I2C2

I2C Instance 2.

SL_I2C_LAST

Last member of enum for validation.


Definition at line 84 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_status_t#

sl_i2c_status_t

Enumeration to represent I2C driver status values.

Enumerator
SL_I2C_SUCCESS

Success.

SL_I2C_IDLE

I2C Idle.

SL_I2C_7BIT_ADD

I2C 7 Bit address transfer.

SL_I2C_10BIT_ADD

I2C 10 Bit address transfer.

SL_I2C_10BIT_ADD_WITH_REP_START

I2C 10 Bit address transfer with Repeated Start.

SL_I2C_ACKNOWLEDGE

I2C ACK.

SL_I2C_NACK

I2C NACK.

SL_I2C_DATA_TRANSFER_COMPLETE

I2C data transfer complete.

SL_I2C_ARIBITRATION_LOST

I2C Arbitration Lost.

SL_I2C_BUS_ERROR

I2C Bus Error.

SL_I2C_BUS_HOLD

I2C Bus held by I2C Bus.

SL_I2C_SDA_ERROR

I2C SDA at loopback path is not equal to SDA output.

SL_I2C_SCL_ERROR

I2C SCL at loopback path is not equal to SCL output.

SL_I2C_CALLBACK_BUSY

I2C instance callback already registered.

SL_I2C_DMA_TRANSFER_ERROR

I2C DMA transfer error.

SL_I2C_INVALID_PARAMETER

Invalid Parameter.


Definition at line 92 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_transfer_type_t#

sl_i2c_transfer_type_t

Enumeration to represent I2C transfer type.

Enumerator
SL_I2C_USING_INTERRUPT

The driver will use interrupts to perform I2C transfer.

SL_I2C_USING_DMA

The driver will use DMA to perform I2C transfer.

SL_I2C_TRANFER_TYPE_LAST

For Validation.


Definition at line 112 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_operating_mode_t#

sl_i2c_operating_mode_t

Enumeration to represent I2C operating mode.

Enumerator
SL_I2C_STANDARD_MODE

Standard-mode, bidirectional data transfers up to 100 kbit/s.

SL_I2C_FAST_MODE

Fast-mode, bidirectional data transfers up to 400 kbit/s.

SL_I2C_HIGH_SPEED_MODE

High speed-mode, bidirectional data transfers up to 3.4 Mbit/s.

SL_I2C_FAST_PLUS_MODE

Fast-mode Plus, bidirectional data transfers up to 1 Mbit/s.

SL_I2C_OPERATING_MODE_LAST

Last member of enum for validation.


Definition at line 119 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_power_modes_t#

sl_i2c_power_modes_t

Enumeration to represent I2C power modes.

Enumerator
SL_I2C_ULP_MODE

The driver leader ULP mode.

SL_I2C_HP_MODE

The driver leader HP mode.

SL_I2C_POWER_MODE_LAST

For Validation.


Definition at line 164 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

Typedef Documentation#

sl_i2c_callback_t#

typedef void(* sl_i2c_callback_t) (sl_i2c_instance_t i2c_instance, uint32_t status) )(sl_i2c_instance_t i2c_instance, uint32_t status)

Callback for I2C Driver.


Definition at line 127 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

Variable Documentation#

mode#

sl_i2c_mode_t sl_i2c_config_t::mode

Leader/Follower Mode, 0 for leader mode and 1 for follower mode.


Definition at line 131 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

operating_mode#

sl_i2c_operating_mode_t sl_i2c_config_t::operating_mode

Speed mode sl_i2c_operating_mode_t for possible values.


Definition at line 132 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

transfer_type#

sl_i2c_transfer_type_t sl_i2c_config_t::transfer_type

Transfer type sl_i2c_transfer_type_t for possible values.


Definition at line 133 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

i2c_callback#

sl_i2c_callback_t sl_i2c_config_t::i2c_callback

I2C callback sl_i2c_callback_t.


Definition at line 134 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

dma_tx_channel#

uint32_t sl_i2c_dma_config_t::dma_tx_channel

DMA transmit channel number.


Definition at line 139 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

dma_rx_channel#

uint32_t sl_i2c_dma_config_t::dma_rx_channel

DMA receive channel number.


Definition at line 140 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

tx_buffer#

uint8_t* sl_i2c_transfer_config_t::tx_buffer

Pointer to Tx Data buffer.


Definition at line 145 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

tx_len#

uint32_t sl_i2c_transfer_config_t::tx_len

Number of bytes to transmit.


Definition at line 146 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

rx_buffer#

uint8_t* sl_i2c_transfer_config_t::rx_buffer

Pointer to Rx Data buffer.


Definition at line 147 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

rx_len#

uint32_t sl_i2c_transfer_config_t::rx_len

Number of bytes to receive.


Definition at line 148 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sda_port#

uint8_t sl_i2c_pin_init_t::sda_port

PWM GPIO port.


Definition at line 153 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sda_pin#

uint8_t sl_i2c_pin_init_t::sda_pin

PWM GPIO pin.


Definition at line 154 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sda_mux#

uint8_t sl_i2c_pin_init_t::sda_mux

PWM GPIO mux.


Definition at line 155 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sda_pad#

uint8_t sl_i2c_pin_init_t::sda_pad

PWM GPIO pad.


Definition at line 156 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

scl_port#

uint8_t sl_i2c_pin_init_t::scl_port

PWM GPIO port.


Definition at line 157 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

scl_pin#

uint8_t sl_i2c_pin_init_t::scl_pin

PWM GPIO pin.


Definition at line 158 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

scl_mux#

uint8_t sl_i2c_pin_init_t::scl_mux

PWM GPIO mux.


Definition at line 159 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

scl_pad#

uint8_t sl_i2c_pin_init_t::scl_pad

PWM GPIO pad.


Definition at line 160 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

Function Documentation#

sl_i2c_driver_init#

sl_i2c_status_t sl_i2c_driver_init (sl_i2c_instance_t i2c_instance, const sl_i2c_config_t * p_user_config)

Initialize the I2C Module and clock.

Parameters
[in]i2c_instance

I2C Instance to be initialized sl_i2c_instance_t.

[in]p_user_config

A pointer to I2C configuration structure sl_i2c_config_t

Sets I2C instance mode,operating mode (bus-speed), frequency, and transfer type (using Interrupt or DMA). If the transfer type is DMA, it initializes DMA as well. Registers I2C instance callback and clears pending interrupts. Configures SDL and SCL pins as per the instance.

Returns


Definition at line 188 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_set_follower_address#

sl_i2c_status_t sl_i2c_driver_set_follower_address (sl_i2c_instance_t i2c_instance, uint16_t address)

This API configures the follower address of the I2C module.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]address

Follower own address, can be provided in 7-bit length (0-127) or in 10-bit length(0-1023).

Should be used only in Follower mode after instance initialization. It updates the slave address register I2C leader device initiates transfer with the address that matches slave address register of follower device.

Returns


Definition at line 209 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_configure_fifo_threshold#

sl_i2c_status_t sl_i2c_driver_configure_fifo_threshold (sl_i2c_instance_t i2c_instance, uint8_t tx_threshold_value, uint8_t rx_threshold_value)

This API configures the TX and RX FIFO threshold values.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]tx_threshold_value

Transmit FIFO threshold value: Range between 0 to 255.

[in]rx_threshold_value

Receive FIFO threshold value: Range between 0 to 255.

The valid range is 0-255, with the additional restriction that hardware does not allow this value to be set to a value larger than the depth of the buffer. A value of 0 sets the threshold for 1 entry, and a value of 255 sets the threshold for 256 entries. This should be called after I2C instance initialization.

Returns


Definition at line 228 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_get_frequency#

sl_i2c_status_t sl_i2c_driver_get_frequency (sl_i2c_instance_t i2c_instance, uint32_t * frequency)

This API will read the current I2C clock frequency.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]frequency

Pointer to a variable to store currently configured frequency.

This API gets the current clock frequency of I2C in MHz, by reading the system core clock frequency.

Returns


Definition at line 245 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_send_data_blocking#

sl_i2c_status_t sl_i2c_driver_send_data_blocking (sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t * tx_buffer, uint32_t tx_len)

This API sends the data in blocking mode.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t.

[in]address

Follower address, can be provided in 7-bit length (0-127) or in 10-bit length(0-1023). In follower mode this parameter will be ignored.

[in]tx_buffer

A pointer to transmit data buffer.

[in]tx_len

Data length in number of bytes in the range of 1- 80000 bytes.

This API sends the data in blocking mode using interrupt, sets follower address when used in leader application, sets transmit empty interrupt and enable I2C interrupts. It keeps the call blocked until the last byte is transferred.

Note

  • Maximum tx_len used can be 80000 (receives in around 10 seconds).

Returns


Definition at line 269 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_send_data_non_blocking#

sl_i2c_status_t sl_i2c_driver_send_data_non_blocking (sl_i2c_instance_t i2c_instance, uint16_t address, uint32_t * tx_buffer, uint32_t tx_len, sl_i2c_dma_config_t * p_dma_config)

This API sends the data in non-blocking mode.

Parameters
[in]i2c_instance

I2C Instance.

[in]address

Follower address can be provided in 7-bit length (0-127) or in 10-bit length(0-1023).

[in]tx_buffer

A pointer to transmit data buffer

[in]tx_len

Data length in number of bytes in the range of 1- 30000 bytes.

[in]p_dma_config

A pointer to DMA configuration structure sl_i2c_dma_config_t.

This API sends the data in non-blocking mode using DMA also sets the follower address when used in Leader application. Configures DMA rx and tx channels. Registers DMA callback & enables DMA channels. It updates the transfer complete flag SL_I2C_DATA_TRANSFER_COMPLETE after data transfer completion.

Note

  • Maximum tx_len values can be 30000 (receives back in around 4 seconds)

Returns


Definition at line 298 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_receive_data_blocking#

sl_i2c_status_t sl_i2c_driver_receive_data_blocking (sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t * rx_buffer, uint32_t rx_len)

This API receives the data in blocking mode.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]address

Follower address, can be provided in 7-bit length (0-127) or in 10-bit length(0-1023). In follower mode this parameter will be ignored.

[in]rx_buffer

A pointer to receive data buffer

[in]rx_len

Data length in number of bytes in the range of 1-80000.

This API receives the data in blocking mode using interrupt, also sets the follower address when used in Leader application. Sets receive full interrupt and enables I2C interrupts. It keeps the call blocked until the last byte is transferred.

Note

  • Maximum rx_len used can be 80000 (receives in around 10 seconds)

Returns


Definition at line 326 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_receive_data_non_blocking#

sl_i2c_status_t sl_i2c_driver_receive_data_non_blocking (sl_i2c_instance_t i2c_instance, uint16_t address, uint8_t * rx_buffer, uint32_t rx_len, sl_i2c_dma_config_t * p_dma_config)

This API receives the data in non-blocking mode.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]address

Follower address, can be provided in 7-bit length (0-127) or in 10-bit length(0-1023).

[in]rx_buffer

A pointer to receive data buffer.

[in]rx_len

Data length in number of bytes in the range of 1- 30000 Bytes.

[in]p_dma_config

A pointer to DMA configuration structure sl_i2c_dma_config_t

This API receives the data in non-blocking mode (using DMA), also sets the follower address when used in Leader application. Configures DMA rx and tx channels. Registers DMA callback & enables DMA channels. It updates the transfer complete flag SL_I2C_DATA_TRANSFER_COMPLETE after data transfer completion.

Note

    • Maximum rx_len values can be 30000 (receives back in around 4 seconds).

    • The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f.

Returns


Definition at line 358 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_transfer_data#

sl_i2c_status_t sl_i2c_driver_transfer_data (sl_i2c_instance_t i2c_instance, sl_i2c_transfer_config_t const * p_transfer_config, uint16_t address)

This API transmits data and then receives data from an I2C device.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]p_transfer_config

Follower address, can be provided in 7-bit length (0-127) or in 10-bit length(0-1023).

[in]address

A pointer to transfer configuration structure sl_i2c_transfer_config_t

This API first transmits data and then receives data from an I2C device using interrupts. Also sets follower address when used in Leader application. Sets & enable transmit empty interrupt while transmitting data . Sets & enable receive full interrupt while receiving data.

Note

  • Maximum tx_len & rx_len values can be 80000 (sends & receives back in around 20 seconds).

    • The default values cannot be any of the reserved address locations: that is, 0x00 to 0x07, or 0x78 to 0x7f.

Returns


Definition at line 386 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_deinit#

sl_i2c_status_t sl_i2c_driver_deinit (sl_i2c_instance_t i2c_instance)

De-initializes the I2C peripheral and clock.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

This API will de-initializes the I2C peripheral, disables its clock and unregisters the callback.

Returns

Note

  • When the I2C module is used in combination with other peripherals, while de-initializing in the application, refer to the notes below:

    1. Whenever sl_i2c_driver_deinit() gets called, it will power down the domain (PERI_EFUSE), which contains different peripherals mentioned below: USART, UART, I2C, SSI Master, SSI Slave, Generic-SPI Master, I2S Master, I2S Slave, Micro-DMA Controller, Config Timer, Random-Number Generator, CRC Accelerator, SIO, QEI, MCPWM and EFUSE. Since deinit power downs the PERI_EFUSE doamin, it's recommended to call the sl_i2c_driver_deinit() API at the end of the application.

    2. Few peripherals (ULP Peripherals, UULP Peripherals, GPDMA and SDIO-SPI) have seperate domains that can be powered down indepedently. For additional details, refer to the Power architecture section in the Hardware Reference Manual e.g., To power down ULP I2C, use the API below: RSI_PS_M4ssPeriPowerDown(ULPSS_PWRGATE_ULP_I2C); Here, ULP_I2C has seperate power domain ULPSS_PWRGATE_ULP_I2C, which can be powered down indepedently. Refer to the rsi_power_save.h file for all power gates definitions.


Definition at line 411 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_si91x_i2c_pin_init#

sl_i2c_status_t sl_si91x_i2c_pin_init (sl_i2c_pin_init_t * pin_init)

Set the Pin configuration for I2C.

Parameters
[in]pin_init

Pointer to pin init structure sl_i2c_pin_init_t

It configures the SDA and SCL pins. Also enables internal pullups of SDA & SCL lines of follower device.

Returns


Definition at line 425 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_leader_reconfig_on_power_mode_change#

sl_i2c_status_t sl_i2c_driver_leader_reconfig_on_power_mode_change (sl_i2c_power_modes_t new_power_mode)

This API re-configures the I2C leader device on power mode changes.

Parameters
[in]new_power_mode

power state to switch to sl_i2c_power_modes_t

Re-Config the I2C driver leader instance (I2C2) for ULP/HP mode. It will re-config I2C clock frequency required for I2C operating(speed) mode to run in ULP/HP mode.

  • Pre-conditions:

    • sl_i2c_driver_init

    • Instance should be ULP mode when new mode is HP

    • Instance should be HP mode when new mode is ULP

    • Instance used should be ULP-I2C instance

Returns


Definition at line 442 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

sl_i2c_driver_enable_repeated_start#

sl_i2c_status_t sl_i2c_driver_enable_repeated_start (sl_i2c_instance_t i2c_instance, boolean_t enable_rep_start)

To enable or disable repeated start, to enable or disable combined format transfer.

Parameters
[in]i2c_instance

I2C Instance sl_i2c_instance_t

[in]enable_rep_start

true to enable & false to disable repeated start

Details :

  • This API should be called by a leader application to enable repeated start, before starting data transfer.

  • By enabling this, one can use combined format transfers.

  • With this, I2C can perform combined write/read operations to same or different slave without releasing the line, thus with the guarantee that the operation is not interrupted.

    • Pre-condition:

sl_i2c_driver_init

Returns


Definition at line 463 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

Macro Definition Documentation#

SL_I2C0_DMA_TX_CHANNEL#

#define SL_I2C0_DMA_TX_CHANNEL
Value:
31

I2C Peripheral.

Overview#

I2C standard compliant bus interface with open-drain pins Configurable as Primary or Secondary Four speed modes: Standard Mode (100 kbps), Fast Mode (400 kbps), Fast Mode Plus (1Mbps) and High-Speed Mode (3.4 Mbps) 7 or 10-bit addressing 7 or 10-bit combined format transfers Support for Clock synchronization and Bus Clear Programmable SDA Hold time Integrated transmit and receive buffers with support for DMA Bulk transmit mode in I2C Slave mode Interrupt based operation (polled mode also available)

Initialization#

Call init API with the init parameters. Call set follower address API, in follower mode Call Set FIFO threshold API


Definition at line 72 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

SL_I2C0_DMA_RX_CHANNEL#

#define SL_I2C0_DMA_RX_CHANNEL
Value:
30

Definition at line 73 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

SL_I2C1_DMA_TX_CHANNEL#

#define SL_I2C1_DMA_TX_CHANNEL
Value:
3

Definition at line 74 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

SL_I2C1_DMA_RX_CHANNEL#

#define SL_I2C1_DMA_RX_CHANNEL
Value:
2

Definition at line 75 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

SL_I2C2_DMA_TX_CHANNEL#

#define SL_I2C2_DMA_TX_CHANNEL
Value:
5

Definition at line 76 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

SL_I2C2_DMA_RX_CHANNEL#

#define SL_I2C2_DMA_RX_CHANNEL
Value:
4

Definition at line 77 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h

ULP_I2C#

#define ULP_I2C
Value:
SL_I2C2

Definition at line 78 of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h