I2C#
Modules#
Enumerations#
Enumeration to represent I2C driver status values.
Enumeration to represent I2C transfer type.
Enumeration to represent I2C operating mode.
Typedefs#
Callback for I2C Driver.
Functions#
Initialize the I2C Module and clock.
This API configures the follower address of the I2C module.
This function is used to configure the TX and RX FIFO threshold values.
This API gets the current frequency of I2C transfer in MHz, by reading the system core clock frequency.
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.
This API sends the data in non-blocking mode (using DMA), also sets the follower address when used in Leader application.
This API receives the data in blocking mode (using interrupt), also sets the follower address when used in Leader application.
This API receives the data in non-blocking mode (using DMA), also sets the follower address when used in Leader application.
This API first transmits data and then receives data from an I2C device (using interrupts).
De-initializes the I2C peripheral, disables clock, and unregisters the callback.
Set the Pin configuration for I2C.
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. |
82
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. |
90
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. |
110
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. |
117
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.
125
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.
[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
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
SL_I2C_CALLBACK_BUSY (0x0D) - Driver is busy
178
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.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | address | Follower own address |
Should be used only in Follower mode after instance initialization. I2C leader device initiates an I2C transfer with an address that matches this address in the IC_SAR register of I2C follower device.
Pre-conditions:
Here I2C mode should be set as follower mode
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
197
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 function is used to configure the TX and RX FIFO threshold values.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | tx_threshold_value | Transmit FIFO threshold value |
[in] | rx_threshold_value | Receive FIFO threshold value |
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.
Pre-conditions:
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
217
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 gets the current frequency of I2C transfer in MHz, by reading the system core clock frequency.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[out] | frequency | Currently configured frequency. |
Pre-conditions:
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
235
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 (using interrupt), sets follower address when used in leader application, sets transmit empty interrupt and enable I2C interrupts.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | address | Follower address, 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 |
Pre-conditions:
Here transfer-type should be set as interrupt-type
sl_i2c_driver_set_follower_address (if sending from slave)
Note
Maximum tx_len used can be 80000 (receives in around 10 seconds)
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
258
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 (using DMA), also sets the follower address when used in Leader application.
[in] | i2c_instance | I2C Instance. |
[in] | address | Follower address |
[in] | tx_buffer | A pointer to transmit data buffer |
[in] | tx_len | Data length in number of bytes |
[in] | p_dma_config | A pointer to DMA configuration structure sl_i2c_dma_config_t |
Configures DMA rx and tx channels. Registers DMA callback & enables DMA channels.
Pre-conditions:
Here transfer-type should be set as DMA-type
sl_i2c_driver_set_follower_address, if used in salve application
Note
Maximum tx_len values can be 30000 (receives back in around 4 seconds)
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
SL_DMA_TRANSFER_ERROR - DMA parameters are invalid
286
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 (using interrupt), also sets the follower address when used in Leader application.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | address | Follower address, 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 |
Sets receive full interrupt and enables I2C interrupts.
Pre-conditions:
Here transfer-type should be set as interrupt-type
sl_i2c_driver_set_follower_address, if used in follower application
Note
Maximum rx_len used can be 80000 (receives in around 10 seconds)
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
313
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 (using DMA), also sets the follower address when used in Leader application.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | address | Follower address |
[in] | rx_buffer | A pointer to receive data buffer |
[in] | rx_len | Data length in number of bytes |
[in] | p_dma_config | A pointer to DMA configuration structure sl_i2c_dma_config_t |
Configures DMA rx and tx channels. Registers DMA callback & enables DMA channels.
Pre-conditions:
Here transfer-type should be set as DMA-type
sl_i2c_driver_set_follower_address, if used in salve application
Note
Maximum rx_len values can be 30000 (receives back in around 4 seconds)
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
SL_DMA_TRANSFER_ERROR - DMA parameters are invalid
341
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 first transmits data and then receives data from an I2C device (using interrupts).
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
[in] | p_transfer_config | Follower address |
[in] | address | A pointer to transfer configuration structure sl_i2c_transfer_config_t |
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
Pre-conditions:
Here transfer-type should be set as Interrupt-type
sl_i2c_driver_set_follower_address, if used in follower application
Note
Maximum tx_len & rx_len values can be 80000 (sends & receives back in around 20 seconds)
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
367
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, disables clock, and unregisters the callback.
[in] | i2c_instance | I2C Instance sl_i2c_instance_t |
Pre-conditions:
Returns
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
383
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.
[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
status 0 if successful, else error code as follow
SL_I2C_SUCCESS (0x0000) - Success
SL_I2C_INVALID_PARAMETER (0x0F) - Parameters are invalid
395
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_CHANNELValue:
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
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_CHANNELValue:
30
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_CHANNELValue:
3
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_CHANNELValue:
2
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_CHANNELValue:
5
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_CHANNELValue:
4
77
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_i2c.h