Post Go back to editing

Linux Support for ADRV9025 CFR and DPD

Category: Software
Product Number: ADRV9026

Dear team,


On our custom hardware which has Zynq Ultrascale plus MPSoC and ADRV9025, we are using 13-NLS profile with ORX disabled.
HDL built over Vivado 2025.1 and Petalinux over 2025.1 environment.

For the initial bringup of the ADRV9025 device, the following steps are performed in /sys/bus/iio/decices:

  1. Setting TX LO frequency. (out_altvolatge1_LO2_frequency)
  2. Setting TX output hardware gain. (out_voltage0_hardwaregain)
  3. Enabling ORX. (echo 1 > in_voltage4_en).

After the bringup, we are performing the steps required for executing the DPD correction by setting the IIO attributes in /sys/bus/iio/devices, as shown below:

  1. echo 1 > calibrate_rx_qec_en
  2. echo 1 > calibrate_tx_lol_en
  3. echo 1 > calibrate_tx_qec_en
  4. echo 1 > calibrate
  5. echo 0 > calibrate_rx_qec_en
  6. echo 0 > calibrate_tx_lol_en
  7. echo 0 > calibrate_tx_qec_en
  8. echo 1 > calibrate_ext_path_delay_en
  9. echo 1 > calibrate

While setting the calibrate_ext_path_delay_en attribute to '1', and triggering calibrate, we encountered the following error:
"adrv9025 spi1.0: adrv9025_phy_store, 367: failed with PathDelay:Measured correlated power too low (2307)"

Kindly provide the debug steps.

Regards,

Satyam

Thread Notes

  • Dear team,

    We were able to resolve the issue by setting the calibrate_mask attribute (echo 0x1 > calibrate_mask) for calibrating Tx channel 0.

    After the calibrations, we are setting the DPD related attributes for TX channel 0, as shown below:

    1. cat /home/petalinux/ADRV9025_DPD_63Coeff_Model_10.txt > dpd_coef_model
    2. echo 0x1 > dpd_tx_mask
    3. echo 1 > dpd_reset
    4. echo 1 > dpd_tracking_config_set
    5. echo 1 > out_voltage0_dpd_en

    The TX0 advanced DPD status is shown in figure below:

    Kindly provide the debug steps.

    Regards, Satyam

  • Hello,

    A member of our team will look into this and follow up.

    Regards,

    Tudor

  • Hi,

    First, you should search for the error code, it should tell you exactly what is wrong.

    Second, make sure you follow the correct steps for enabling the DPD calibration. They are presented in the UG-1727 ADRV9026/ADRV9029 System Development User Guide, in Table 263 at page 284: UG-1727 (Rev.A)

    Regards,

    Tudor

  • Dear team,

    We are able to resolve the above issue.

    Now we are planning to use the CFR Engines for clipping the TX LTE signal.

    For our current custom board and JESD profile, the TX data path is operating at 245.76 MSPS rate. We need to test the CFR application at this sampling rate.

    We have brought up the ADS9+ADRV9029 Eval board setup for testing the above scenario. We have generated NR_5MHz_3-1_15K-SCS_245-76MSPS.txt from MATLAB, and feeding in the TX channels in the Transmit GUI. While submitting, the following GUI log is observed and error is thrown.

    3678.NR_5MHz_3-1_15K-SCS_245-76MSPS.txt

    2026-07-29 14:01:44,593 [ERROR] ERROR PerformTx() failed. Exception message: Index was outside the bounds of the array.
    ---------- EXCEPTION: ----------
    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    at System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices)
    at System.Array.GetValue(Int32 index)
    at adrv9010_dll.SubClasses.Fpga9010TxExt.TransportSet(adi_fpga9010_JesdInfo_t jesdInfo, Byte[] dataBytes, List`1& data)
    at adrv9010_dll.SubClasses.Fpga9010TxExt.TxDataSet(adi_fpga9010_JesdInfo_t jesdInfo, adi_fpga9010_TxDatamoverSel_e txDatamoverSel, List`1 data)
    at adrv9010_dll.TopLevelClasses.AdrvDaughterCard.PerformTx(adi_fpga9010_TxTollgateTrigSources_e trigSource, List`1 txData, UInt32 channelMask, Byte continuous)
    at Adi.Trx.Adrv9xxx.Adrv9xxxApiCommon.PerformTx(List`1 dataArray, CaptureTrigger trigger)
    ------------------------------

    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    at System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices)
    at System.Array.GetValue(Int32 index)
    at adrv9010_dll.SubClasses.Fpga9010TxExt.TransportSet(adi_fpga9010_JesdInfo_t jesdInfo, Byte[] dataBytes, List`1& data)
    at adrv9010_dll.SubClasses.Fpga9010TxExt.TxDataSet(adi_fpga9010_JesdInfo_t jesdInfo, adi_fpga9010_TxDatamoverSel_e txDatamoverSel, List`1 data)
    at adrv9010_dll.TopLevelClasses.AdrvDaughterCard.PerformTx(adi_fpga9010_TxTollgateTrigSources_e trigSource, List`1 txData, UInt32 channelMask, Byte continuous)
    at Adi.Trx.Adrv9xxx.Adrv9xxxApiCommon.PerformTx(List`1 dataArray, CaptureTrigger trigger)
    2026-07-29 14:01:51,417 [FATAL] FATAL Unhandled exception was thrown on UI thread. The GUI may be unstable now, so it is recommended to restart it. Please report the problem. Exception message: Exception of type 'System.OutOfMemoryException' was thrown.
    ---------- EXCEPTION: ----------
    System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
    at NationalInstruments.UI.Internal.XYDeviceDataManager.Map(Domain fromXDomain, Domain fromYDomain, Domain toXDomain, Domain toYDomain, Double[] xData, Double[] yData, Int32 dataLength, PointF[]& mappedData)
    at NationalInstruments.UI.Internal.XYDeviceDataManager.Map(Domain fromXDomain, Domain fromYDomain, Rectangle bounds, Boolean invertedX, Boolean invertedY, PointF[]& mappedData)
    at NationalInstruments.UI.Internal.CartesianPlotElement.Map(Rectangle bounds, PointF[]& mappedData)
    at NationalInstruments.UI.Internal.CartesianPlotElement.DrawPlot(ComponentDrawArgsInternal args)
    at NationalInstruments.UI.Internal.PlotElement.DrawForeground(ComponentDrawArgsInternal args)
    at NationalInstruments.Restricted.ControlElement.a(ComponentDrawArgsInternal A_0, Rectangle A_1, Boolean A_2)
    at NationalInstruments.Restricted.ControlElement.DrawChildren(ComponentDrawArgsInternal args, Rectangle clipRectangle)
    at NationalInstruments.Restricted.ControlElement.a(ComponentDrawArgsInternal A_0, Rectangle A_1, Boolean A_2)
    at NationalInstruments.Restricted.ControlElement.DrawChildren(ComponentDrawArgsInternal args, Rectangle clipRectangle)
    at NationalInstruments.Restricted.ControlElement.a(ComponentDrawArgsInternal A_0, Rectangle A_1, Boolean A_2)
    at NationalInstruments.Restricted.ControlElement.DrawChildren(ComponentDrawArgsInternal args, Rectangle clipRectangle)
    at NationalInstruments.Restricted.ControlElement.a(ComponentDrawArgsInternal A_0, Rectangle A_1, Boolean A_2)
    at NationalInstruments.Restricted.ControlElement.a(ComponentDrawArgsInternal A_0, Rectangle A_1)
    at NationalInstruments.Restricted.ControlElement.Paint(PaintEventArgs e)
    at NationalInstruments.UI.WindowsForms.ControlBase.OnPaint(PaintEventArgs e)
    at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
    at System.Windows.Forms.Control.WmPaint(Message& m)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    ------------------------------

    Can you provide the correct LTE waveforms like LTE_DL_7p68MSPS_5M_TM3p1_245.76 for 5, 10, and 20 MHz at 245.76 MSPS rate. which can be fed in the TES GUI.

    Regards,

    Satyam

  • Hi team,

    We are awaiting for your reply.

    Regards, Satyam

  • We're glad the initial problem was solved!
    We moved this thread to Support ADRV9022/ADRV9026/ADRV9029 for further assistance on the new problem.

  • Dear team, 

    Our development has stuck at this point.

    Can you provide the CFR correction pulse for the following LTE signal specifications:

    ETM 3.1, BW = 5 MHz, Sampling Rate = 245.76 MSPS

    Regards,

    Satyam

  • Please follow the link below for generating the CFR pulse file per your requirement.

    ez.analog.com/.../cfr-pulse-generation

  • Dear team,

    We have followed the steps mentioned in the Application Note. But we are not getting the proper CFR Engine response.

    We have brought up ADS9 + ADRV9025 Evaluation board setup, with the following configurations.

    1. JESD Profile: 13 NLS with ORX disabled.
    2. LTE Waveform: ETM 3.1, 5 MHz, 245.76 MSPS, 15 KHz SCS generated from MATLAB.
    3. CFR Correction pulse generated for 5 MHz at sampling rate fs = 245.76 MHz.

    The CFR Statistics observed in the GUI for multiple CFR Peak Threshold values are as shown below:

    1. Target PAPR = 6; CFR Peak Threshold = 0.3724                                  
    2. Target PAPR = 7.5; CFR Peak Threshold = 0.4426                       

    With the above two CFR Peak threshold values and generated CFR Correction pulse, the TX output is getting distorted and hence not meeting the CFR correction criteria. In fact for Case 2, the CFR Engine 1 Peaks Skipped is 0, whereas for the correct operation of the CFR Engines, the CFR Engine 2 and 3 Peaks Skipped should be 0.

    The generated CFR correction pulse is attached below.

    -244 0
    -249 0
    -254 0
    -259 0
    -264 0
    -269 0
    -274 0
    -279 0
    -284 0
    -289 0
    -294 0
    -299 0
    -303 0
    -308 0
    -313 0
    -317 0
    -322 0
    -326 0
    -331 0
    -335 0
    -339 0
    -343 0
    -347 0
    -351 0
    -355 0
    -359 0
    -363 0
    -367 0
    -370 0
    -374 0
    -377 0
    -381 0
    -384 0
    -387 0
    -390 0
    -393 0
    -395 0
    -398 0
    -400 0
    -403 0
    -405 0
    -407 0
    -409 0
    -411 0
    -412 0
    -414 0
    -415 0
    -416 0
    -417 0
    -418 0
    -419 0
    -419 0
    -419 0
    -419 0
    -419 0
    -419 0
    -419 0
    -418 0
    -417 0
    -416 0
    -415 0
    -413 0
    -411 0
    -410 0
    -407 0
    -405 0
    -402 0
    -400 0
    -396 0
    -393 0
    -389 0
    -386 0
    -381 0
    -377 0
    -372 0
    -367 0
    -362 0
    -357 0
    -351 0
    -345 0
    -339 0
    -332 0
    -325 0
    -318 0
    -310 0
    -302 0
    -294 0
    -286 0
    -277 0
    -268 0
    -258 0
    -248 0
    -238 0
    -228 0
    -217 0
    -205 0
    -194 0
    -182 0
    -169 0
    -157 0
    -144 0
    -130 0
    -116 0
    -102 0
    -87 0
    -72 0
    -57 0
    -41 0
    -25 0
    -8 0
    9 0
    26 0
    44 0
    63 0
    82 0
    101 0
    121 0
    141 0
    161 0
    182 0
    204 0
    226 0
    248 0
    271 0
    295 0
    319 0
    343 0
    368 0
    393 0
    419 0
    445 0
    472 0
    500 0
    528 0
    556 0
    585 0
    614 0
    644 0
    675 0
    706 0
    737 0
    769 0
    802 0
    835 0
    869 0
    903 0
    938 0
    973 0
    1009 0
    1046 0
    1083 0
    1121 0
    1159 0
    1198 0
    1237 0
    1277 0
    1318 0
    1359 0
    1400 0
    1443 0
    1486 0
    1529 0
    1573 0
    1618 0
    1663 0
    1709 0
    1756 0
    1803 0
    1851 0
    1899 0
    1948 0
    1998 0
    2048 0
    2099 0
    2151 0
    2203 0
    2256 0
    2309 0
    2363 0
    2418 0
    2474 0
    2530 0
    2586 0
    2643 0
    2701 0
    2760 0
    2819 0
    2879 0
    2940 0
    3001 0
    3063 0
    3125 0
    3188 0
    3252 0
    3317 0
    3382 0
    3448 0
    3514 0
    3581 0
    3649 0
    3717 0
    3786 0
    3856 0
    3926 0
    3998 0
    4069 0
    4142 0
    4215 0
    4288 0
    4363 0
    4438 0
    4513 0
    4590 0
    4667 0
    4744 0
    4823 0
    4902 0
    4981 0
    5061 0
    5142 0
    5224 0
    5306 0
    5389 0
    5472 0
    5557 0
    5641 0
    5727 0
    5813 0
    5900 0
    5987 0
    6075 0
    6163 0
    6253 0
    6343 0
    6433 0
    6524 0
    6616 0
    6708 0
    6801 0
    6895 0
    6989 0
    7084 0
    7179 0
    7275 0
    7372 0
    7469 0
    7567 0
    7665 0
    7764 0
    7864 0
    7964 0
    8065 0
    8166 0
    8268 0
    8370 0
    8473 0
    8577 0
    8681 0
    8786 0
    8891 0
    8996 0
    9103 0
    9209 0
    9317 0
    9425 0
    9533 0
    9642 0
    9751 0
    9861 0
    9972 0
    10082 0
    10194 0
    10306 0
    10418 0
    10531 0
    10644 0
    10758 0
    10872 0
    10986 0
    11102 0
    11217 0
    11333 0
    11449 0
    11566 0
    11683 0
    11801 0
    11919 0
    12037 0
    12156 0
    12275 0
    12395 0
    12515 0
    12635 0
    12756 0
    12877 0
    12998 0
    13120 0
    13241 0
    13364 0
    13486 0
    13609 0
    13733 0
    13856 0
    13980 0
    14104 0
    14228 0
    14353 0
    14478 0
    14603 0
    14728 0
    14854 0
    14980 0
    15106 0
    15232 0
    15358 0
    15485 0
    15612 0
    15739 0
    15866 0
    15993 0
    16120 0
    16248 0
    16376 0
    16504 0
    16632 0
    16760 0
    16888 0
    17016 0
    17144 0
    17273 0
    17401 0
    17530 0
    17658 0
    17787 0
    17916 0
    18044 0
    18173 0
    18302 0
    18430 0
    18559 0
    18688 0
    18816 0
    18945 0
    19073 0
    19202 0
    19330 0
    19458 0
    19587 0
    19715 0
    19843 0
    19971 0
    20098 0
    20226 0
    20353 0
    20481 0
    20608 0
    20735 0
    20862 0
    20988 0
    21115 0
    21241 0
    21367 0
    21493 0
    21618 0
    21743 0
    21868 0
    21993 0
    22117 0
    22242 0
    22365 0
    22489 0
    22612 0
    22735 0
    22858 0
    22980 0
    23102 0
    23223 0
    23344 0
    23465 0
    23585 0
    23705 0
    23825 0
    23944 0
    24062 0
    24181 0
    24298 0
    24416 0
    24533 0
    24649 0
    24765 0
    24880 0
    24995 0
    25109 0
    25223 0
    25336 0
    25449 0
    25561 0
    25673 0
    25784 0
    25894 0
    26004 0
    26114 0
    26222 0
    26330 0
    26438 0
    26545 0
    26651 0
    26756 0
    26861 0
    26965 0
    27069 0
    27171 0
    27274 0
    27375 0
    27476 0
    27576 0
    27675 0
    27773 0
    27871 0
    27968 0
    28064 0
    28160 0
    28254 0
    28348 0
    28441 0
    28534 0
    28625 0
    28716 0
    28805 0
    28894 0
    28983 0
    29070 0
    29156 0
    29242 0
    29327 0
    29410 0
    29493 0
    29575 0
    29656 0
    29737 0
    29816 0
    29894 0
    29972 0
    30048 0
    30124 0
    30198 0
    30272 0
    30345 0
    30416 0
    30487 0
    30557 0
    30626 0
    30694 0
    30760 0
    30826 0
    30891 0
    30955 0
    31017 0
    31079 0
    31140 0
    31199 0
    31258 0
    31316 0
    31372 0
    31427 0
    31482 0
    31535 0
    31587 0
    31638 0
    31689 0
    31737 0
    31785 0
    31832 0
    31878 0
    31922 0
    31966 0
    32008 0
    32049 0
    32090 0
    32129 0
    32166 0
    32203 0
    32239 0
    32273 0
    32307 0
    32339 0
    32370 0
    32400 0
    32429 0
    32456 0
    32483 0
    32508 0
    32532 0
    32555 0
    32577 0
    32597 0
    32617 0
    32635 0
    32652 0
    32668 0
    32683 0
    32696 0
    32709 0
    32720 0
    32730 0
    32739 0
    32747 0
    32753 0
    32759 0
    32763 0
    32766 0
    32767 0
    

    Kindly check whether the Correction pulse is correct or not, and provide the further debug steps required.

    Regards, 

    Satyam

  • Please share your CFR configuration? What is the CFR interpolation rate used and is it aligned with the CFR pulse generated?

    Please set Adi_adrv9025_CfrCtrlConfig_t as part of the API, adi_adrv9025_ CfrCtrlConfigSet to 2,2,5 for Engine1, Engine2, Engine3 respectively (Default is 5,5,5).

Before You Switch


Switching languages will make ADI Explorer unavailable. Resume your session by switching back to English and reopening ADI Explorer.