This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LMH0303: I2C issues

Part Number: LMH0303

I have some issues with LMH0303 and reading the status (register 0x01) over I2C bus.

When verifing the signals with a logic analyser we can see the second byte is 0x00 and NACK , and it should read 0x01 with ACK , as this is the register we want to read.

It happens from time to time (several minutes, while reaing it 100 times per seconds) and only with the LMH0303 (I2C address 0x17) device .
As there are multiple (up to 5) devices on the bus I have no issues with other devices.

A good I2C transaction looks like this, and it is followed by reading the register after resending start condition etc.

  • The register address is written by the I²C master, not by the LMH0303. So if the register address is 0x00 instead of 0x01, it cannot be the LMH0303's fault.

    There should not be a NACK (even for the wrong register address), so I'd guess that there are wrong clock pulses, maybe caused by ringing. Please look at the waveform with an oscilloscope.

  • I am aware that the register address is written by the I2C master, but in this case it seems the LMH0303 pulls the SDA signal low.
    Please verify my scope signals : everything seems clean to me as I have used an I2C bus accelerator chip (active pull-up)
    I have multipe I2C devices on the bus, with no issues except when accessing the LMH0303 it goes wrong from time to time.

    These scope signals are randomly triggered , but if requested I can try to create a trigger signal in software to see the I2C transaction for LMH0303.
    You can see the behavior of the SCL where the rising edge is accelereated.

  • This indeed looks clean.

    But an I²C accelerator might be falsely triggered by noise that looks like the beginning of a rising edge, and thus create an additional clock pulse. Please try to capture a failing transaction.

  • thanks for your feedback.

    I have adapted my setup (software) so I can capture the last transaction when the error happens.
    I am using an AVR microcontroller, but disabled all I2C transactions and connected a RPI for reading the registers of the LMH0303.
    With this setup I can read all registers from the LMH0303 and show the results if they change.
    As you can see from time to time there is garbage data displayed,
    and as soon register 0 id different from 0x2E (device ID is always 0x2E in register 0) the test application is halted.

    In the halted state the scope is holding the last measurement , and I can see a small ringing in SCL.
    As I had to connect an other I2C master with some short cabling this ringing can also be caused by the setup.
    As far as I can see , there is no  real impact from the bus acceletor.

    Can I lower the I2C pull up resistors to minimise ringing ? They are 4K7 at this moment.

    Any help is welcome as the LMH0303 is the only device on the I2C bus who is causing issues.
    Even a verification of 2 I2C eeproms of 32KByte is always succesfull (just to verify I2C signals are not corrupted)