Hello Team,
we are using LPC51U68 for a controlling and managing a power distribution application where in for reading temperature we connected 2 (LM75) temp sensors on I2C bus (PIO0_25/PIO0_26) with a pull up of 4.7K resistor. We observed that raise time and fall time of the I2C clock is around 323 ns which is our concern. We are expecting this value to be less than 100ns.
Please suggest
Below is the ping configuration used for those pins:
#define IOCON_PIO_I2CSLEW_I2C 0x00u /*!< I2C mode */
#define IOCON_PIO_I2CDRIVE_LOW 0x01u /*!< High drive: 20mA */
#define IOCON_PIO_I2CFILTER_EN 0x00u /*!< I2C 50 ns glitch filter enabled */
//I2C
const uint32_t port0_pin25_config = (
IOCON_PIO_FUNC1 | /* Pin is configured as FC4_RTS_SCL_SSEL1 */
IOCON_PIO_I2CSLEW_I2C | /* I2C mode */
IOCON_PIO_INV_DI | /* Input function is not inverted */
IOCON_PIO_DIGITAL_EN | /* Enables digital function */
IOCON_PIO_INPFILT_OFF | /* Input filter disabled */
IOCON_PIO_I2CDRIVE_LOW | /* Low drive: 4 mA */
IOCON_PIO_I2CFILTER_EN /* I2C 50 ns glitch filter enabled */
);
IOCON_PinMuxSet(IOCON, PORT0_IDX, PIN25_IDX, port0_pin25_config); /* PORT0 PIN25 (coords: 3) is configured as FC4_RTS_SCL_SSEL1 */
const uint32_t port0_pin26_config = (
IOCON_PIO_FUNC1 | /* Pin is configured as FC4_CTS_SDA_SSEL0 */
IOCON_PIO_I2CSLEW_I2C | /* I2C mode */
IOCON_PIO_INV_DI | /* Input function is not inverted */
IOCON_PIO_DIGITAL_EN | /* Enables digital function */
IOCON_PIO_INPFILT_OFF | /* Input filter disabled */
IOCON_PIO_I2CDRIVE_LOW | /* Low drive: 4 mA */
IOCON_PIO_I2CFILTER_EN /* I2C 50 ns glitch filter enabled */
);
IOCON_PinMuxSet(IOCON, PORT0_IDX, PIN26_IDX, port0_pin26_config); /* PORT0 PIN26 (coords: 4) is configured as FC4_CTS_SDA_SSEL0 */
Attaching the screen shot of the captured waveform .
Any suggestion from you would be of great help.
Thanks in advance.
Regards,
Phaniram.K
In my experience, 4,7k is already on the upper end of pull-up resistor values, 1,2 ... 2,4k are more common.
"Slew rate" is the charge and discharge of parasitic capacitors over line resistance.
If you don't have excessive capacities on your I2C lines (check PCB routing and schematics), you could try increasing IO driver capability:
> IOCON_PIO_I2CDRIVE_LOW | /* Low drive: 4 mA */
Try using high drive instead.
I have no experience with the LPC51U68 , though.