Post Go back to editing

Error during ARM System Programming

Category: Software
Product Number: ADRV9006
Software Version: TES v0.29.0

Hello, 

We are bringing up a custom bare-metal Zynq board using an ADRV9006 and the v0.29.0 SDK with the TES. Our initialization sequence consistently fails at adi_adrv9001_arm_System_Program with error code 0xD208.

If we attempt to ignore this and proceed to Initial Calibrations, we get error 0xE108.

By tracing the API's mailbox error handler and object_ids.h, we think 0xD208 maps to upper byte 0xD2 (OBJID_DRV_EFUSE), suggesting the ARM Efuse driver is throwing error 0x08 during System_Program execution. For the Calibrations error 0xE108, 0xE1 maps to OBJID_SYS_INIT_CAL, and 0x08 is likely the same as the above error.

The IC package reads ADRV9006, and an SPI read confirms Part = 0x1989, Major = 0xC, Minor = 0x0, so presumably C0. TES was used to generate a Channel-1-only config with Tx disabled for device "ADRV9006 2T2R Lite". Our external clock measures 50 MHz, verified stable with an oscilloscope.

Our bare-metal C code exactly mirrors the sequence in the TES-generated initialize.c. We have confirmed that all prerequisites (Carrier Configure, Rx/Tx Channel Enablement Delays, AdcSwitchEnable, Ssi PowerDown, PllLoopFilter_Set, MonitorMode setup, PortSwitch, and MCS delays) are executed in the exact same order as the TES output prior to calling arm_System_Program(device, 1).

The arm_binary.bin and stream_binary.bin loaded to the device are byte-for-byte identical to the STANDARD_BYTES_252 binaries exported by our TES v0.29.0 session.

The adi_adrv9001_arm_StartStatus_Check passes successfully, confirming that SPI loaded the binaries correctly and the internal checksums passed. The ARM mailbox is completely responsive. For example, adi_adrv9001_Temperature_Get works perfectly.

We probed the power rails directly at the ADRV9006 pins during System_Program execution. There are no voltage drops when the ARM attempts to read the Efuse.

Is there a known compatibility issue with the v0.29.0 firmware binary reading the Efuse of this specific ADRV9006 C0 silicon?

Any insight into what internal error 0x08 means for the Efuse driver would be greatly appreciated.

Thank you!

  • Hello, let's start by making sure this isn't an issue with the TES setup, can you attach your session file, and I'll try to recreate it on our eval board. 

  • After modifying various TES settings, we finally got both arm_System_Program and initial calibrations working by simply changing the Rx ADC Optimization from High Performance to Low Power. The corresponding TES setup line is:

    "Rx1.AdcOptimization": "ADRV9001_ADC_LP" (We are only using Rx1 for now)

    The corresponding fields in the code are:

    adcType = ADI_ADRV9001_ADC_LP
    adcTypeMonitor = ADI_ADRV9001_ADC_LP

    Nothing changed in either the ARM or Stream binaries.

    Can you help us better understand the implications of this Rx ADC Optimization feature?

    Also, while diagnosing the issue, we noticed that the device and pfir checksums both matched between Build and Run, but the FW Run checksum always reported 0 (Build checksum looked correct). Everything appears to work, just want to make sure this is not an issue.

    Thanks!

  • Hello,

    Sorry for the delay. I tried to download your taxid` file, but our system blocked the file-hosting website as malicious. Could you attach the profile another way, preferably directly to the thread?

    Regarding the Rx ADC optimization question: LP and HP use two different ADC paths, with different power and performance characteristics. Since switching from HP to LP allows the system to initialize and calibrate successfully, this may point to a marginal hardware condition that is exposed when using the HP ADC path.

    Could you attach a relevant schematic snippet around the ADRV9001/ADRV9002 Rx path, power supplies, and clocking? If the schematic is sensitive, I can follow up with you directly by email.

    This article may also be helpful: Transceiver with Scalable Power and Performance: A Solution to Mission Critical Communications | Analog Devices

    For the checksum issue, could you share the exact output you are seeing, including the Build and Run checksum values?

    Also, please send the output from running the following utilities:

    adi_adrv9001_Utilities_SystemDebugPreCalibrate()
    adi_adrv9001_Utilities_SystemDebugPostCalibrate()

    These outputs should help determine whether the issue is related to hardware margins, profile configuration, or calibration behavior.

    Best regards,

  • Unfortunately I cannot find how to uploading the `.taxidi` files to this forum page. I can email the `.taxidi` file and the schematics to you directly.

    Checksum issue:

    FW Build=0xEBCE097A Run=0x00000000
    Device Build/Run=0x79AF359E
    Pfir Build/Run=0x5B4A96F8


    I ran:

    adi_adrv9001_Utilities_SystemDebugPreCalibrate();
    adi_adrv9001_Utilities_SystemDebugPostCalibrate();


    Both Low Power and High Performance start with the following :

    *** ADRV9001 Pre-Calibrate System Debugging Started ***

    --> . Hardware Reset

    OK

    --> . API Version

    OK - API Version = 0.22.64

    --> . Configure SPI

    OK

    --> . Check SPI

    OK

    --> . Check Power Supplies

    OK

    --> . Load Stream Processor Image

    OK

    --> . Verify Stream Processor Image Load

    OK - Version = 0.7.18.0

    --> . Load ARM Image

    OK


    But then Low Power (`ADI_ADRV9001_ADC_LP`) produces:

    --> . Verify ARM Image Load

    OK - Version = 0.22.64.0

    --> . Check Dev_Clk

    OK

    *** ADRV9001 Pre-Calibrate System Debugging Completed ***

    ARM up, die temp=36 C

    Part=0x1989 SiRev major=0xc minor=0x0

    System_Program mask=0x01

    All enabled channels verified

    *** ADRV9001 Post-Calibrate System Debugging Started ***

    --> . Check RF PLLs

    OK

    *** ADRV9001 Post-Calibrate System Debugging Completed ***


    With High Performance (`ADI_ADRV9001_ADC_HP`):


    --> . Verify ARM Image Load

    Failed PreCal: ret=-2, Firmware version=0.22.64

    src=0x0 code=0x3 act=-2 lastAct=-2

    file=../src/ADRV_Driver/adi_adrv9001_utilities.c func=adi_adrv9001_Utilities_SystemDebugPreCalibrate line=401 var=NULL

    msg=ARM Start Status Check Error.

  • Following up on this: The 9006 Data sheet seems to only document performance specs for the low power ADCs (no mention of the high performance). Looking at the feature differences in UG1828 page 12, under "ADC Option" ADRV9006 is listed only as LP, rather than HP/LP.

    Should we take all of this to mean that High Performance is simply not an available option on the 9006, and that's why the ARM System Program is failing?