AM62Ax MCU+ SDK  10.01.00
I2C

I2C module provides an interface to any I2C bus compatible device accessible via I2C serial bus. External components attached to I2C bus can serially transmit/receive data to/from the CPU through two wire interface. I2C driver provides API to perform transmit/receive to any of the I2C peripherals on the board, with the multiple modes of operation.

Features Supported

  • Master and Slave mode of operation
  • Interrupt, Polled Mode
  • Blocking and Non-blocking (callback) transfers
  • Queueing of I2C transactions
  • I2C Bus Recovery

SysConfig Features

Note
It is strongly recommend to use SysConfig where it is available instead of using direct SW API calls. This will help simplify the SW application and also catch common mistakes early in the development cycle.

SysConfig can be used to configure below parameters apart from common configuration like Clock,MPU,RAT and others.

  • I2C module configuration parmaters like bitrate, slave addresses to probe.
  • I2C instances and pin configurations.
  • Interrupt mode enable option.If you disable it, configures to polling mode.
  • Based on above parameters, the SysConfig generated code does below as part of Drivers_open and Drivers_close functions
    • Set I2C instance parameter configuration.
    • Driver ISR registration if Interrupt Mode is enabled.

Features NOT Supported

  • Slave mode is not supported in polling mode.

Failure Prevention Guidelines for Applications

Application developer must take care of the following guidelines to avoid failures:

  • The application developer should verify the bit rate supported by the end connected device while configuring the bit rate in the application.
  • The application developer should verify the pinmux settings in the syscfg and make sure that the correct pins are configured.
  • The application developer should verify that the correct addressing mode as supported by the end device is configured.
  • The application developer should make sure that suffecient buffers are allocated before starting the transaction.
  • The application developer should have bus recovery mechanisms for different operation modes of I2C like interrupt callback mode.
  • The application developer should make sure that there is no resource/memory conflict when using i2c in a multi-core use case

Important Usage Guidelines

NA

Example Usage

Include the below file to access the APIs

#include <drivers/i2c.h>

Instance Open Example

I2C_Params params;
I2C_Params_init(&params);
gI2cHandle = I2C_open(CONFIG_I2C0, &params);
if (!gI2cHandle) {
DebugP_assert(FALSE);
}

Instance Close Example

I2C_close(gI2cHandle);

I2c Transfer Example

int32_t status;
I2C_Transaction i2cTransaction;
I2C_Transaction_init(&i2cTransaction);
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1U;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.readCount = 2U;
status = I2C_transfer(gI2cHandle, &i2cTransaction);
DebugP_assert(FALSE);
}

API

APIs for I2C

I2C_Params_init
void I2C_Params_init(I2C_Params *params)
Function to set default values of I2C_Params in params.
status
uint32_t status
Definition: tisci_lpm.h:1
I2C_MODE_BLOCKING
#define I2C_MODE_BLOCKING
Definition: i2c/v0/i2c.h:136
I2C_Transaction::writeBuf
void * writeBuf
Definition: i2c/v0/i2c.h:235
I2C_transfer
int32_t I2C_transfer(I2C_Handle handle, I2C_Transaction *transaction)
Function to initiate a transfer from I2C.
I2C_Transaction
I2C transaction.
Definition: i2c/v0/i2c.h:231
I2C_Params
I2C Parameters.
Definition: i2c/v0/i2c.h:290
I2C_open
I2C_Handle I2C_open(uint32_t idx, const I2C_Params *params)
Open the I2C at index idx with parameters params.
SystemP_SUCCESS
#define SystemP_SUCCESS
Return status when the API execution was successful.
Definition: SystemP.h:56
I2C_Transaction_init
void I2C_Transaction_init(I2C_Transaction *transaction)
Function to set default values of I2C_Transaction in transaction.
I2C_Transaction::readBuf
void * readBuf
Definition: i2c/v0/i2c.h:241
I2C_Transaction::writeCount
size_t writeCount
Definition: i2c/v0/i2c.h:238
I2C_Transaction::readCount
size_t readCount
Definition: i2c/v0/i2c.h:244
DebugP_assert
#define DebugP_assert(expression)
Function to call for assert check.
Definition: DebugP.h:175
i2c.h
I2C_close
void I2C_close(I2C_Handle handle)
Function to close the I2C Peripheral specified by the handle.
I2C_Params::transferMode
uint8_t transferMode
Definition: i2c/v0/i2c.h:292
I2C_init
void I2C_init(void)
Initialize the I2C module.