Post Go back to editing

ADV7282A-M decoder does not response to the I2C @ 400kHz commands

Hello all Members,


I own an EVAL-ADV7282A-M evaluation board. When I connect to the I2C pins via an external Initiator device (after desoldering resistors R17 and R18), which runs a frequency of 100kHz the chip is detected and responds to commands.

When I connect to the same pins with another I2C Initiator device, operating at a frequency of almost 400kHz - the chip does not respond.

What could be the cause?

The technical documentation allows an I2C bus clock of up to 400kHz.
I attach screenshots from the oscilloscope in two above scenarios.

www.analog.com/.../EVAL-ADV7282A-M.html

Please help to fix the problem.

Sylwester

Parents
  • Hi,

    If slowing the I2C bus down to 100kHz makes a difference, then there could be something wrong in the timing at 400kHz or some board issue. 

    I2C lines are open collector designs with pull up resistors only. There should be no case where the signal is driven to mid-point and held there. Again, this points to a possible problem with the FGPA driving the I2C bus. 

    Please let us know the below things.

    • Does any other I2C device work correctly on this I2C bus without out the SDA begin driven to the mid-point?
    • Do you have another way to drive the I2C lines such as a USB to I2C adapter to check out its functionality?

    Please ensure you are following the I2C communication recommendations as described in the I2C PORT DESCRIPTION section of the ADV7280 datasheet.

    You can increase the drive strength of the I2C pins.

    • Open the ADV728x hardware manual (which is available here ADV7280 / ADV7280-M Design Support Files)
    • Open the GLOBAL PIN CONTROL section of the ADV728x hardware manual.
    • Read the Drive Strength Selection (I2C) subsection.

    Also, we believe you can get some more details on 400KHz if referring to this thread 2010-05-12 05:28:23     I2C driver - trunk - Documents - Linux Forum Archive - EngineerZone (analog.com)

    Let us know if further clarification is required.

    Thanks,
    Dharani S

  • Hi,

    Thank you for your quick response and for pointing out possible problems.


    Please find below the answers to your questions:
    1. There are pull-up resistors (4k7) to the supply in the circuit, so there is no possibility of a steady state appearing at half the 3V3 supply voltage.
    2. There is only one Initiator and one receiver on the I2C bus. I change the Initiator by connecting to the test points I2C of the evaluation board. There is only one Initiator at a time.
    3. One Initiator is the USB to I2C adapter
    4. The other Initiator is OS Linux via the interposer board

    I changed the frequency from 100 kHz to 400 kHz on the USB to I2C adapter and in both cases the decoder talked back. I am attaching the screen shots below:


    Unfortunately in Linux changing the frequency from 400 kHz to 100 kHz requires modification and compilation of the device tree. At the moment I cannot perform this.

    Maybe I made a wrong diagnosis and the problem is not the baud rate? Maybe it's interference or the slightly lower voltage level seen on the waveform below (from Linux Initiator):

    Or as you pointed out at the beginning, a problem with the board, in this case the interposer?
    But note that the oscilloscope correctly decodes I2C from both the adapter and Linux Initiators. The oscilloscope probes are connected to the test points of the evaluation board. The waveforms on the oscilloscope show the Data and Clock Lines going into the PAL decoder, pulled up to the 3v3 eval board supply.

    I think the answer is somewhere in the waveforms.

    Any suggestions?

    At the weekend I will check the "I2C communication recommendations as described in the I2C PORT DESCRIPTION section of the ADV7280 datasheet.". But I don't think I have much influence on what Linux spits out when using i2cdetect -y command.

    Thanks,

    Sylwester

  • Hi,

    ADI linux drivers can be found at Linux Drivers [Analog Devices Wiki]

    The Linux driver for the ADV7280 branch in the Linux kernel git repository on the ADI git-hub account.

    https://github.com/analogdevicesinc/linux/tree/adv7280

    https://github.com/analogdevicesinc/linux/blob/adv7280/drivers/media/i2c/adv7180.c

    Also, there is separate forum Linux software drivers' group Linux Software Drivers - EngineerZone (analog.com)

    Could you please post your question there, where you will be more likely to get a knowledgeable answer?

     

    Thanks,
    Dharani S

  • Hi,

    Thank you for the links.
    I managed to change the frequency of the I2C bus in Linux using the device-tree-compiler package (fdtget and fdtput commands). At 100kHz unfortunately further the decoder is not responding to queries, see screenshot below.

    I confirm that the frequency of the I2C bus is not an issue.

    In order to use the driver provided in the links, the Linux system firstly must see the device (decoder) on the I2C bus. I use the i2cdetect command to detect devices connected to the I2C bus. The I2C bus is functional, as I can see the data line and clock waveforms on the oscilloscope.
    Any idea where to look next?

    Regards,

    Sylwester

  • Hi,

    Problem still not solved but workaround found.
    The decoder does not respond when the linux command "i2cdetect -r 2" is called but the decoder responds to the commands "i2cget" and "i2cset", as I have shown in the screenshot below:

    Strange behaviour.

    I tested another decoder from Renesas on the same Linux and it had no problems when responding to the command "i2cdetect -r 2"

    The topic is closed.

    Regards,

    Sylwester

  • Hi,

    Please ensure with the below expert comments.

    1. First, make sure whether you are using the correct I2C address.

    2. Make sure the power rails are good

    3. Make sure the device is out of reset and the reset goes high after both power rails are stable.

    4. Make sure SDA and SCL signals are going to the right pins.

    5. Verify the pull up resistors on SDA and SCL, 2.2k - 10k.

    6. Verify the SDA and SCK signals wiggle and are the right amplitude.  0 - 3.3V

    7. Verify the I2C SDA master becomes an input or is tri-stated during the ACK bit so the ADV7282 can pull SDA low.

    8. Verify you are using the correct device address.

    9. Verify the start command is correct.

    Refer here https://ez.analog.com/video/f/q-a/11215/adv7393-i2c for more details on the I2C communication.

    Thanks,
    Dharani S

  • The problem has been diagnosed. The Linux tools for I2C use SMBus, whereas the ADV7282 appears to have no implementation of this standard.

    Topic to be closed

Reply Children
No Data