Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

I2C_Stop() API Does Not Disable I2C Master in I2C Component v3.50 of PSoC 3 and PSoC 5LP - KBA231344

I2C_Stop() API Does Not Disable I2C Master in I2C Component v3.50 of PSoC 3 and PSoC 5LP - KBA231344

ChaitanyaV_61
Employee
Employee
50 questions asked 25 likes received 25 sign-ins

Author: RakshithM_16      Version: **

When the I2C Component v3.50 is used in I2C Master mode with Fixed function implementation, the I2C_Stop() API does not disable the master. This is a known issue due to an error in the I2C_Stop() function definition in the Generated Source.

Note: Here, I2C_Stop() is a Component API. Therefore, if the I2C Component in your project is MyI2CComponent, the Component API will be MyI2CComponent_Stop(). For simplicity, the API will be referred to as <i2c_comp>_Stop() now on in this article, where <i2c_comp> is the name of the I2C Component.

<i2c_comp>_Stop() is defined in <i2c_comp>.c, and it contains the following line:

/* Disable block */

<i2c_comp>_CFG_REG &= (uint8) ~<i2c_comp>_CFG_EN_SLAVE;

The issue is that the <i2c_comp>_Stop() disables only the slave block even when the Component is configured as a master. As a workaround, replace this code with the following:

/* Disable block */

<i2c_comp>_CFG_REG &= (uint8) ~<i2c_comp>_ENABLE_MS;

Do one of the following to change the <i2c_comp>_Stop() function:

  1. Create a custom I2C stop function, for example, <i2c_comp>_Custom_Stop(), with the workaround implemented and call this function instead of <i2c_comp>_Stop().

  2. Create a modified Component with the workaround. See Customizing a Component using PSoC Creator - KBA229139.

  3. Modify the existing Generated Source and set Skip Code Generation to True in the project’s Build Settings > Code Generation.

Note: Do not Clean or Clean and Build the project after this setting.

0 Likes
657 Views
Contributors