Post Go back to editing

ADV7280A I2C problem

Hi

I am using two no ADV7280A in my board for video decoding purpose .

Hereby I am attaching the

a. Schematic Pages 1 and 2 referring use of two ADV7280A IC's

b. I2C transaction - oscilloscope capture screenshots.

c. Reset_n sequencing -oscilloscope capture screenshots

As i am using 1.8V for all supplies and i see almost 45ms delay between POWERDWN_n going high to Reset_n going High, I think there should be no problem in power sequencing, But I am not getting I2C acknowledgment even though I am starting transaction after very long delay of 1000ms.

Please suggest if I am missing anything?

Parents
  • Hi,

      As per recommended script, the normal sequence would be follow as like below, Please make sure with your i2c writes,

         delay 10;  // wait 10ms after hardware reset to start i2c
         42 0F 80; // Reset Decoder(ADV7280A) - Chip reset for loading all I2c bits with default values (This bit is self clearing one, approximately it take 2ms for reset)
        delay 10;  // wait another 10ms
        42 0F 00;  Exit power down mode[ADV7280A writes begin]

    Note :Generally after ADV728x-M is programmed, the clock lanes should exit low power mode and it remains in high speed mode until the part is reset  or powered down.
    In the ADV7280 rev.A datasheet the simplified power-up sequence  state that a software reset is needed after power-up.
    After the hardware reset wait 10 ms before beginning I2C communication. Not performing the hardware reset can leave the ADV7280 in a state where it is not able to perform I2C communication properly.

     Please refer here for more details about I2C https://ez.analog.com/video/w/documents/15352/i2c-protocol-sequence

    Thanks,

    Poornima 

Reply
  • Hi,

      As per recommended script, the normal sequence would be follow as like below, Please make sure with your i2c writes,

         delay 10;  // wait 10ms after hardware reset to start i2c
         42 0F 80; // Reset Decoder(ADV7280A) - Chip reset for loading all I2c bits with default values (This bit is self clearing one, approximately it take 2ms for reset)
        delay 10;  // wait another 10ms
        42 0F 00;  Exit power down mode[ADV7280A writes begin]

    Note :Generally after ADV728x-M is programmed, the clock lanes should exit low power mode and it remains in high speed mode until the part is reset  or powered down.
    In the ADV7280 rev.A datasheet the simplified power-up sequence  state that a software reset is needed after power-up.
    After the hardware reset wait 10 ms before beginning I2C communication. Not performing the hardware reset can leave the ADV7280 in a state where it is not able to perform I2C communication properly.

     Please refer here for more details about I2C https://ez.analog.com/video/w/documents/15352/i2c-protocol-sequence

    Thanks,

    Poornima 

Children
  • Hello Poornima,

    I am facing problem in getting acknowledgment for I2C to start writing the data,

    Referring to your answer, I have given sufficient delay (>20ms) after power on reset before starting the I2C.

    42 0F 80; // Reset Decoder(ADV7280A) - Chip reset for loading all I2c bits with default values (This bit is self clearing one, approximately it take 2ms for reset)

    To do this means writing data 80  to I2C address 42, device should respond for register address and give acknowledgment for write request on 9th clock cycle, which is missing.

    What may be the reason for this?

  • Hi,

     Please make sure you have the right address, a lot of software defines I2C addresses as 7-bit addresses(i.e In that case we need to right shift the 8 bit map address to one),our i2c driver work with 8-bit address.

     Do you have one of our evaluation board ? If not,Please crosscheck your schematic with 0676.ADV7280Schemaic.zip

    Here you can find the more details about i2c bus specification and also timing related details I2C Bus Specification and User Manual

    https://i2c.info/i2c-bus-specification

    Note :In order to initiate communications, the master transmits a start condition followed by the 8 bit address of the slave device. When a peripheral recognizes the address. it transmits an acknowledgment by pulling the SDA line low. By transmitting a byte of data or an address takes eight clock cycles,master generates all clock pulses, including the acknowledge ninth clock pulse.
    During acknowledge clock pulse during which the receiver must pull the SDA line low and keep it low during the High period of the clock in order to acknowledge the previous byte or address.But SDA remains HIGH during this ninth clock pulse, this is defined as the Not Acknowledge signal
    If the slave is not ready to receive more data it may produce a no acknowledge by leaving the line high.
    This will cause the master to either abort the transfer by producing a stop condition or suspend the transfer by producing a repeated start.

    Thanks,

    Poornima

  • Hello Poornima,

    I am controlling the I2C from FPGA and a vhdl code is written to work as per i2c specifications and the code was tested with  other i2c devices and working fine.

     As per your note and also my initial query is all about getting ack at ninth clock cycle, which i am not getting and the schematic is fine w.r.t eval board schematic, only change is i am using 1.8V for all supply including i2c levels.

     Regarding using the correct address, address can be either 0x40 or 0x42 only, both are tried.

     Please suggest why device is not acknowledging.

    Thanks

    Arun
     

  • FormerMember
    0 FormerMember
on May 12, 2020 8:40 AM in reply to Arun.Kumar

If your first I2C transaction is a reset command, the commands will also reset the I2C engine and subsequently fail the ACK response in the transaction.  Start with another command after power up/hardware reset

  • Hello,

    My first I2C transaction starts with sending the i2c address for which device has to give ack, I am struck at this stage where device not acknowledging either 0x40 or 0x42 (in simple terms)

    Regards

    Arun

  • FormerMember
    0 FormerMember on May 13, 2020 8:59 AM in reply to Arun.Kumar

    What you are doing looks good.

    Let's try an experiment.

    1) Power up the chip as normal

    2) With a jumper wire or probe, pull the reset pin low to get a good solid hardware reset after power up.

    3) Try I2C transaction again.

    I am wondering if the reset set pin has passed its threshold before the power supplies are fully stable.

    Also the I2C bus is an open collector design.  Looking at the wave forms it looks like the SDA and SCL lines are driven high, no RC curve on the rising edge.  Make sure the FPGA only pulls down the lines down, never drives them high.  Normally to do an I2C engines in FPGA or processors you write a '0' to the output pin and then flip the pin direction.  When it's an output it pulls the bus low and when it's an input is allows the RC to pull the bus high.

  • Hello Mr. Guenter,

    After the above suggestion i tried to hold reset for long time using a jumper wire connected to GND and after about 10 seconds of power on i released  hard reset and started I2C transaction from FPGA, But could not succeed in getting ACK.

    Also I tried different experiments like changing SCL frequency as low as 20KHz to max of 400KHz, but in no case i am getting ACK.

    Also regarding bidirectional nature of i2c SDA pin, I have declared it as inout and only writing '0'  and 'Z'.

    Never driving it to high on my own.

    What should be my next action on this?

    Please suggest.

    Regards

    Arun

  • FormerMember
    +1 FormerMember on May 18, 2020 10:51 AM in reply to Arun.Kumar

    Assuming you are following the I2C spec's I would begin to look at a damaged part.  Do you have another board to try? 

  • Hello Arun,

    i have the same problem with the ADV7280A. It doesn't response an ACK on the correct Address.

    Did you find a solution for that problem?