Post Go back to editing

Weird problem with AD9511 at power on

We have implemented a radio receiver that uses an AD9643 as ADC connected to a Zynq SoC using axi-adc HDL core and corresponding drivers. The ADC is clocked by an AD9511 which is connected to two oscillators. The main reference comes from a 24.576 high precission oscillator and the PLL uses a Crystek 122.88 MHz VCXO, so we get a very high precission and very low jitter reference for all the stuff in the board. The ADC is clocked at 122.88 MHz.

There's a PIC microcontroller that among other things configures the AD9511 at powerup. The board uses several voltage regulators that start in sequence and when all is powered up the PIC sends the configuration to the AD9511 which doesn't need to change afterwards. The problem is that the AD9511 doesn't take the configuration, the PLL doesn't lock and it outputs a variable frequency and variable duty cycle clock, which only makes sense to me if the dividers start randomly changing like crazy as the VCXO only has a few kHz pulling range and outputs a perfectly fine square wave. Of course the ADC and the programmable logic of the zynq go crazy too.

If we try resending the configuration twice or three times with delays between them it still doesn't work, but if we reset the PIC and it resends the configuration after PIC's reset the AD9511 takes it perfectly, locks in and after a programmable logic reset everything starts working perfectly. That is odd because the PIC does not reset the AD9511, it just spits the configuration out the SPI port, and the waveforms and the data sent are the same before and after the PIC resets. In fact nothing resets the AD9511 because it has a POR. The FUNCTION pin of the AD9511 is connected to the Zynq's PL and we've checked that it doesn't toggle during powerup/boot.

So long story short:

Powerup -> PIC sends config automatically (even 2-3 times) -> AD9511 goes crazy

Powerup -> PIC sends config automatically -> PIC reset -> PIC sends config again automatically -> AD9511 works perfectly

Any clue about what might be going on?

This is what we send to the AD9511: (last 0xFF byte is to signal end of array, it's not sent)

typedef struct {

    char address;

    char data;

} reg_config_t;

reg_config_t defaults[] = {

    {0x00, 0x10},

    {0x02, 0x20},

    {0x04, 0x00},

    {0x05, 0x00},

    {0x06, 0x05},

    {0x07, 0x00},

    {0x08, 0x47},

    {0x09, 0x70},

    {0x0A, 0x06},

    {0x0B, 0x00},

    {0x0C, 0x02},

    {0x0D, 0x20},

    {0x34, 0x01},

    {0x35, 0x00},

    {0x36, 0x00},

    {0x37, 0x04},

    {0x3D, 0x08},

    {0x3E, 0x08},

    {0x3F, 0x08},

    {0x40, 0x0A},

    {0x41, 0x02},

    {0x44, 0x13},

    {0x45, 0x00},

    {0x4A, 0x00},

    {0x4B, 0x80},

    {0x4C, 0x44},

    {0x4D, 0x00},

    {0x4E, 0x33},

    {0x4F, 0x80},

    {0x50, 0x44},

    {0x51, 0x00},

    {0x52, 0x11},

    {0x53, 0x80},

    {0x58, 0x60},

    {0x59, 0x00},

    {0x5A, 0x00},

    {0x5A, 0x01},

    {0xFF, 0xFF}


Parents Reply Children
No Data