Post Go back to editing

Request for AD9363 VCO Calibration Parameters / LUT for 40 MHz Reference Clock (PlutoSDR Bare-Metal Bring-Up)

Category: Software
Product Number: AD9363
Software Version: VITIS 2023.2

Hello,

I am working on a bare-metal, no-OS bring-up of the AD9363A on an ADALM-Pluto-derived hardware platform.
The RFPLL fails to complete VCO calibration, and I consistently receive:

  • VCO_LOCK_REG (0x247) = 0x80 (CP_OVRG_HIGH)

  • Calibration return code = –116

  • PLL does not lock on either TX or RX paths.

My reference clock is 40 MHz, and the computed VCO frequency (from ad9361_calc_rfpll_int_divider()) is typically ~9.44–9.60 GHz.
The stock AD9361 SynthLUT from no-OS is being used, but the selected VCO entries around 9445–9631 MHz consistently fail to lock on my AD9363 hardware.

I understand that AD9363 devices rely on a different set of VCO calibration parameters, and that these may be factory-trimmed and not present in the AD9361 public LUT. Since these values are critical (varactor offset, VCO bias, charge pump current, calibration offsets, etc.), I would like to confirm the correct values for the AD9363.

Could you please provide one of the following?

  1. The official AD9363 LUT (VCO_MHz, Varactor, CP current, offsets, etc.) corresponding to a 40 MHz reference clock,
    OR

  2. The factory-programmed VCO calibration parameters used on ADALM-Pluto AD9363 parts (if generic),
    OR

  3. The recommended procedure for manually adjusting CP current / varactor / VCO calibration offsets for AD9363 at ~9.4–9.6 GHz VCO.

Additional Technical Information

  • Using no-OS driver, bare-metal (no Linux).

  • Hardware is verified; SPI, reference clock, power rails, and RF front-end biasing are correct.

  • Register dump of failure shows:

    • REG_RX_CP_OVERRANGE_VCO_LOCK = 0x80

    • REG_RX_VCO_CAL_STATUS = 0x84

  • The PLL never achieves lock during calibration.

  • Adjusting CP current, varactor reference, or selecting different LUT entries only shifts the failure.

Since the AD9363 uses internal factory-trimmed VCO tables that differ from AD9361, having the correct calibration parameters is essential for proper bring-up.

Any guidance, documentation, or official parameter tables would be greatly appreciated.

Thank you,
Prasanna

  • HI  

    CP_OVRG_HIGH means the charge pump is saturating during VCO calibration → the PLL cannot pull the VCO into lock. This happens because the LUT entry (varactor bias, CP current, offsets) is not correct for AD9363’s trimmed VCO. AD9363 devices have factory-programmed calibration parameters stored internally, which Linux driver reads dynamically. No-OS defaults to AD9361 LUT unless overridden.

    Options to Fix

    1. Use AD9363-Specific LUT

      • ADI does not publish the AD9363 LUT in the open-source No-OS repo.
      • The Linux driver reads calibration data from OTP (One-Time Programmable memory) inside the chip.
      • Recommended approach: port the Linux driver’s VCO calibration logic into your No-OS code. It queries the chip for factory-trimmed values instead of using a static LUT.
    2. Best Practice

      • Use the AD9363 initialization flow from Linux:
        • Read OTP values via SPI.
        • Apply them during PLL setup.
      • This ensures correct calibration for your device.

    Regarding Reference Clock

    • 40 MHz is correct for PlutoSDR-derived hardware.
    • VCO range ~9.4–9.6 GHz is expected for 2.4 GHz LO.
    • Failure at these frequencies confirms LUT mismatch.

    Regards,

    SJ