Post Go back to editing

ADPD4100 external clock configuration

Category: Hardware
Product Number: ADPD4100

Hey ADI support team!

I'm using the ADPD4100 and intending to use an externally provided PWM signal as a 1MHz clock. I have working firmware that uses the internal oscillators and reads data, and am now trying to modify it to accept my 1MHz PWM signal as a clock. However, when I do this, reading the FIFO size always returns 0. An output,normal GPIO set when the device is in sleep mode remains unset, indicating that the timeslots are not active, even though the device is set in sampling mode with no external trigger. I've validated that the OP_MODE is set to go mode by reading back the register and all looks good.

My SYS_CTRL register is {0x000F, 0x0144} or 0b0000000101000100 (External LF Oscillator, on GPIO1, LFOSC_SEL = 1 for 1MHz, no internal oscillators enabled).

I've validated that the device is receiving the external clock by setting the GPIO2 output signal to be the low-frequency oscillator which shows my 1MHz signal as expected, but the FIFO still never fills.

Is there any other step that I need to take to get the device to accept an external clock (e.g. perform some sort of reset, etc.)? Would appreciate any insight or an example configuration that has worked for you to use an external PWM signal as the clock, as I feel like I've looked at the datasheet pretty thoroughly here.

Adding more info: I created a commit of my code that reads values off the AFE with no issues using the internal oscillator and an external trigger on GPIO3, then a single line of code change (changing {0x000F, 0x0006} to {0x000F, 0x0144} in my config) makes the FIFO never fill and the timeslots never advance. I'd assume this change should make the device accept the provided 1MHz signal on GPIO1 as the external oscillator, but maybe there's something I was missing?

My working config was:

{0x0022, 0x0288}, // gpio2 is output, normal. gpio1 is input. gpio3 is input (external sync)
{0x0023, 0x0000}, // no output on gpio0/1
{0x0024, 0x0011}, // gpio2 set to device in sleep state
{0x0026, 0x0007}, // gpio EXT_SYNC_EN = 1, EXT_SYNC_GPIO = 11 (GPIO3)
{0x000F, 0x0006}, // enable 1MHz internal oscillator.

and then my failed one:

{0x0022, 0x0288}, // gpio2 is output, normal. gpio1 is input. gpio3 is input (external sync)
{0x0023, 0x0000}, // no output on gpio0/1
{0x0024, 0x0011}, // gpio2 set to device in sleep state
{0x0026, 0x0007}, // gpio EXT_SYNC_EN = 1, EXT_SYNC_GPIO = 11 (GPIO3)
{0x000F, 0x0144}, // external LFOSC, on GPIO1, 1MHz.

Best,

Tyler



formatting
[edited by: tylerchen at 10:32 PM (GMT -4) on 24 Jul 2023]