CY8PLC10 temporarily stalls I2C when transmitting

Question: I am communicating properly with CY8CPLC10 over I2C, and sending PLC message over the powerline.  During transmission, I am polling the status register (0x69) to see when it is complete.  During this time, the CY8CPLC10 does not complete the I2C Stop protocol - it holds the SCL line low until the transmission is completed.  Is this correct operation?



Yes, when the PLC device is transmitting, it disables the I2C interrupts. Thus, as the I2C hardware cannot service I2C traffic, it pulls the SCL line LOW to indicate that the slave is busy. This is also referred to as clock stretching. Upon completion of the PLC transmission, the I2C SCL line will return to HIGH and the I2C transmission will be completed.

Before transmitting an I2C message, the host can check the TX_LED pin to see if there is an ongoing PLC transmission. There is a short time (<1 ms) that the TX LED is off and the I2C interrupts are disabled, but this will at least reduce the likelihood of temporarily stalling the I2C bus.

Additionally, the host can monitor the PLC device's HOST_IRQ pin to check if there is a status update instead of continuosly polling via I2C.