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.

ADS54J66: Inconsistent SPI programming & read back.

Part Number: ADS54J66
Other Parts Discussed in Thread: LMK04828,

Hi,

We have a custom PCB that hosts two ADS54J66s. For one of the ADCs we observe the expected behavior in all cases, we can configure and read back the configuration over SPI and everything agrees. The other ADC does not behave as well. It can be configured well enough to achieve JESD SYNC, but for things like enabling test patterns and/or turning off the interleaving correction the ADC responds inconsistently. The read back values are never what they should be and can be fairly inconsistent; sometimes you see values that are just one bit off of the expected value or sometimes the wrong register reads back the expected value. E.g. If I program ADC Page register 0x0F74 with a value of 0x40 to enable the test ramp, I can sometimes see the value 0x40 in register 0x0F6D. The same code is being used to program and read back each ADC. I've also used the same code to program the ADC on the ADS54J66EVM and had no problems. I've also probed, with an oscilloscope, the SPI signals at the ADC to make sure they looked okay, they did. This isn't just a problem with the read back either, I have had trouble getting this ADC to perform the JESD data scrambling or entering a test ramp mode. 

We have two copies of this custom PCB, each with two ADCs - A and B. On each PCB ADC-A shows strange SPI behavior and ADC-B behaves well. However, for one of the PCBs  ADC-A will sometimes read back some registers correctly, for the other PCB ADC-A basically never reads back anything correctly.

On each PCB the ADCs share all power rails so it seems unlikely that the issues might be due to an unreliable power rail.

I've investigated this issue to the extent that I'd be confident the issue is within the ADC chip, except for the fact that ADC-A on two different PCBs shows similar-ish unexpected behavior. That seems to indicate there ought to be some systematic issue with that chip on each PCB. We've spent a lot of time looking at the PCB layout & design associated with ADC-A and B to try and come up with a plausible explanation for what might be causing the observed programming issues and we've so far come up with nothing. The two ADCs are treated nearly identically in our design.

Right now we can achieve SYNC with the ADCs and read out data reliably, so the core ADC functionality seems to be working, but we're not confident enough to move forward with our design with this lingering issue unresolved. We'd prefer to avoid having to replace chips on our boards if that can be avoided, so I'm hoping someone here can tell me if there's anything I might be overlooking that could explain the behavior we're seeing. Or if there's some tests that could do that might indicate where the origin of this problem is. Or if people have seen issues similar to this in the past.

I'm happy to share some design files/screenshots or specific examples of the issues I mentioned if that'd be helpful.

Thanks,

Eric M

  • Eric,

    Please send your schematic. The SPI will not work properly if both the CLK and SYSREF are not received  properly. You must also do a hard reset after power and the clocks are present. I would check the clocks and reset.

    Regards,

    Jim

  • Below are the relevant schematics for the ADC and LMK04828 which provides the CLK and SYSREF.  Also I write to the reset register before programming the ADC every time, below is an example ADC configuration file that I use.

    LMK04828
    0x107 0x11
    0x10F 0x11
    ADS54J66
    0x0000 0x81
    0x8053 0x80 // DIVIDE BY 2
    0x0F74 0x40 // Ramp test mode enable
    0x6800f7 0x01 // digital top reset
    0x680042 0x00 // nyquist zone select 1st Nyquist = 0
    0x68004E 0x80 // 2nd nyquist validity
    0x680000 0x01 // reset interleaving engine
    0x680000 0x00 // clear IL reset
    0x610018 0x03 // Interleaving correction disabled (0x03)
    0x614100 0x08 // bypass mode (DDC mode 8)
    0x6A0016 0x02 // JESD PLL mode 40x
    0x690000 0x86 // (0x86) set CTRL K + LANE Align + Frame Align
    0x690005 0x80 // 0x0 = No scrambling. 0x80 = Scrambling
    0x690006 0x0F // set K to 16
    LMK04828
    0x107 0x01
    0x10F 0x01

    ADC Schematics

    CLK Schematics

  • Eric,

    Make sure pin 49 (SCAN_EN) is always tied to GND. Since you have one working device, I would compare every input between the two parts. This would include power, clocks, SPI, ect... If this does not show you anything, you could swap the two parts on the board. This will definitely rule out the ADC if the problem does not follow the ADC.  Writing to the reset register is not the same as toggling the rest pin. Make sure to pulse the reset pin after power and clocks are provided. You should also follow the power sequence shown in the attached updated data sheet. 

    Regards,

    Jim

    5074.Updated data sheet.pdf

  • Hi Jim,

    Shorting the SCAN_EN pin to GND appears to have fixed the issue. It’s still not clear why ADC A on both of our PCBs behaved differently the ADC B, regardless both are operating correctly now. I’m a bit surprised the SCAN_EN pin, which is barely mentioned in the data sheet, can have such a significant effect. Still, thank you for your help and we’re glad to be able to move forward with our design.

  • Good to hear this.