Post Go back to editing

ADV7280A-M Registers Questions

Category: Software
Product Number: ADV7280A-M, ADV7280A

Hello,

I have been investigating the ADV7280A-M and have some questions with regards to the Linux driver and the script (ADV7280AM_Cust-VER.5.0.txt) provided by ADI.

From what I understand the drivers/media/i2c/adv7180.c driver is compatible with all the ADV7X8X devices, is this correct?

While looking at the driver and the scripts alongside the datasheets, for both ADV7280A-M and ADV7180, I noticed some disagreements as to the contents of certain registers. I realise there are several undocumented registers and even "read-only" registers that redirect for writes (ez.analog.com/.../adv7280a---itu-r-bt-656-output).

Register 0x0F [Power Management]: Do the reserved bits do anything? More specifically bit 2 which was used in the ADV7180 but not the ADV7280A (non-A datasheet is missing this bit from register map).

Register 0x52 [CVBS_TRIM]: This appears in the datasheet for the ADV7180 but not the ADV7280, however the script still sets this register, does this exist? Does this write do anything?

Register 0x03 [Output Control]: Bits 5:0 these are marked as reserved in the ADV7280 datasheet whereas for the ADV7180 only bit 1 is reserved. Either case the script sets bit 1 what is this doing? Are the other reserved bits for the ADV7280 reserved or unspecified?

Register 0x04 [Extended Ouput Control]: Bits 6:4 are reserved for both but the default and description differ. ADV7180 reserves bit 6 as 1 and 5:4 as don't care. ADV7280 defaults these bits to 011 but doesn't explicitly state reserved in the function column just the description. Are these bits used internally? Do they differ between the devices?

Register 0x13 [Status 3 (read only)]: I realise there is some funky redirection for writes here from the question linked above, are the other bits in this register doing anything? Additionally what is the default state? Do I have to write to this if using an oscillator rather than a crystal?

When I started working on this using the Linux driver, I was having some bizarre video output when disconnect/connecting video sources and/or switching inputs. The colours of the image being incorrect and other oddities. I noticed that the registers had reserved bits set, specifically 0x03 and 0x04, so I read and masked these bits when writing and since then the video corruption doesn't appear to happen anymore.

I have also observed a minor oddity where on first power-up the device never successfully locks, with the bottom few lines jittering on a slope. On an input change (just writing to 0x00) to another channel and back fixes this and every subsequent change of video always locks. Does anyone have any idea why the video never locks on the first power on?

Thanks,

Chris

  • Hi,

      Regarding powerup issue, Please follow the optimal power-up sequence described in the datasheet is how the ADV728x is powered up during in-house testing. It is the safest method of powering up the ADV728x part. Please refer below snap,

     

    Also ensure the below mentioned point when programming the ADV728x.

    - Apply power supply as required
    - Wait for 5 millisecond (ms) period
    - Apply a reset for 5 ms period
    - Wait 5 ms after reset has been de-asserted
    - Program the ADV728x as advised on our I2C script

    Kindly note that, Regarding register questions we don't have any register related details other than what available in the ADV728x manuals.

    Thanks,

    Poornima

  • Unfortunately on my prototype board there is no way of sequencing the supplies, both the 3V3 and 1V8 come up at the same time. I did note that 1V8 does not exceed 3V3 during this period. I will keep this in mind for the production release, thank you.

    "Kindly note that, Regarding register questions we don't have any register related details other than what available in the ADV728x manuals."

    Not what I expected to hear. How were the registers and values in the script determined then? This doesn't fill me with a lot of confidence.

  • Hi,

      Script configuration been made by referring the same family chipset manuals since 'ADV718x/ADV728x' related parts will come under same family. 

    Thanks,

    Poornima

  • Hi Poornima

    Think we are having a similar issue in that each time we stop and then restart video, and therefore toggle the 0x0F PWRDWN bit, there is a chance of it coming back with blue and red swapped, or no colour, or very dark, or wavy vertical bars where blue and red swap. And once in that state, it is generally stuck in that state, even after more PWRDWN cycles. Never setting PWRDWN to 1 works around the issue, but is obviously a hack?

    Not sure if the issue is the PWRDWN itself, or the powering back up, or some other register settings that take effect at that time?

    I have also tried masking the bits when writing to 0x03 and 0x04 as Chris suggested (read/mask/write), but unfortunately that alone didn't seem to fix the issue for us.

    In the script from Customer Version 5.0 August 2017 ADV7280A-M

    :I2P AUTODETECT CVBS Single Ended In Ain 1, 480p/576p MIPI Out:
    ...
    42 03 4E ; Power down unused pads
    42 04 57 ; Power-up INTRQ pin

    0x57 is 0101 0111

    which means for address 0x04:
    Bit 7: default 0, new 0, unchanged, ITU-R BT.656-3 compatible
    Bit 6-4: default 011, new 101, changed, Reserved / undocumented
    Bit 3: default 0, new 0, unchanged, TIM_OE
    Bit 2: default 1, new 1, unchanged, BL_C_VBI
    Bit 1: default 0, new 1, changed, EN_SFL_PIN
    Bit 0: default 1, new 1, unchanged, Extended range

    The script says Power-up INTRQ pin.
    But the manual does not refer to any of those bits as INTRQ pin?
    Or at least not that section?

    And as Chris asked, is it not strange that the script changes the Reserved bits from the default 011 to 101?

    Thank you
    -- Peter

  • Hi,

    Please find the below comment,

    1). The script says Power-up INTRQ pin.
    But the manual does not refer to any of those bits as INTRQ pin?
    Or at least not that section?

    Please refer below expert comment about 0x04 register description about INTRQ Pin

         The ADV728x die contains two INTRQ pads. Only one of these is bonded out on the ADV7282-M. By setting these bits to 0b'101 ensures that the correct INTRQ pad is selected So user map register 0x04 bits [6:4] do need to be set to 0b'101. 

         This description to be added in the next revision of the ADV728x hardware manual.

    2). Also try to configure 0x03 as 42 03 0C ; Enable Pixel & Sync output drivers.

    3). Please make sure with below things,
     1) Make sure whether ADV7280-M is programmed correctly with ADI recommended  I2C writes,
     2) Could you ensure that during power-up: the reset pin is held low for at least 5ms after the 3.3V, 1.8V and power down lines go high. After the reset pin goes high, wait for at least 5ms before starting I2C communication.
     3) After programming the ADV7280-M  could you please read the User Map register 0x0F. This should have the value 0x00.
     4) Can you ensure that there is no contention on the lines. i.e. that the backend processor could be trying to pull the line low as the ADV7280-M tries to output a MIPI clock.
     5) The backend processor is not configured correctly and it is pulling the clock lane low. Could you double check that the backend processor is configured correctly with latest software.
      Expert written an applications note describing the main issues interfacing the ADV728x with a MIPI receiver. Please refer the link here: https://www.analog.com/media/en/technical-documentation/application-notes/AN-1337.pdf

    4). As per recommended script, the normal sequence would be like below,
       delay 10;  // wait 10ms after hardware reset to start i2c
       42 0F 80; // Reset Decoder(ADV728x) - Chip reset for loading all I2c bits with default values (This bit is self-clearing one, approximately it takes 2ms for reset)
     Then Reset corresponding encoder
     delay 10;  // wait another 10ms
     42 0F 00;  Exit power down mode[ADV728x writes begin]
    5). Kindly check whether you are using a crystal or an oscillator. A crystal requires a voltage from the ADV7280-M to operate while an oscillator is powered externally. An oscillator output should be fed into the VrefN pin of the ADV7280-M and an additional I2C write is needed see How Do I Use an External Oscillator to Clock the ADV728x ?
    Note that If a crystal is used then it will not oscillate until the ADV7280-M has been programmed out of power down mode.
    Please check that the crystal / oscillator is outputting 28.63636MHz.
    Thanks,
    Poornima