Post Go back to editing

ADRV9002 C0 — STREAM_CSUM_ERR persists with no-OS firmware blob (v0.7.15)

Category: Software
Product Number: ADRV9002

Hi there,

I am bringing up an ADRV9002 evaluation board interfaced to a Lattice FPGA host via the FMC connector. Custom RISC-V firmware on the FPGA drives the ADRV9002 over SPI using the ADI no-OS driver. SPI register access seems to works well, but facing challenges at the ARM bootloader stage as below.
 
Problem Statement:

Getting arm_StartStatus_Check returns bootStatus = 4 (STREAM_CSUM_ERR) within 1 ms of arm_Start. All prior steps (HwOpen, spi_Verify, profileutil_Parse, InitAnalog, AhbSpiBridge_Enable, Stream_Image_Write, arm_Image_Write, arm_Profile_Write, arm_PfirProfiles_Write) complete successfully. ARM image upload verified byte-perfect by read-back across PROG and DATA memory regions.

System Environment:

  • Chip: ADRV9002 silicon C0
    reg[0x0004] = 0xC0
    reg[0x000A] = 0x01
    reg[0x000B] = 0x56, reg[0x000C] = 0x04
  • Driver:
    no-OS, API 68.14.13
  • TES installed locally:
    20.12
  • ARM blob:
    Navassa_EvaluationFw_C0_0.22.64.22.64.bin (from TES install)
  • Stream blob:
    • Navassa_Stream.h from no-OS projects/adrv9001/src/firmware/
    • On-chip Stream_Version_Get returns v0.7.15.0 after upload.
  • Profile:
    • Navassa_LVDS_profile.h (canned no-OS, deviceClock_kHz = 38400)
  • Reference clock:
    • 38.4 MHz TCXO at chip pad (confirmed)
  • Pairing with Lattice FPGA, thus referring the no-OS github mainly due to the reference design are not directly applicable.

I have tried below Firmware Blob combination:
Same STREAM_CSUM_ERR for both:

  1. ARM = no-OS Navassa_EvaluationFw.h (from Github No-OS)+ Stream = no-OS Navassa_Stream.h (from Github No-OS)
  2. ARM = TES-extracted Navassa_EvaluationFw_C0_0.22.64.bin (310,272 bytes)+ Stream = no-OS Navassa_Stream.h (same as above)

Both produce identical bootloader failure at the same poll cycle.

Failure Detail

reg[0x010E] = 0x40
reg[0x010F] = 0x00
bootState = 4 (STREAM_CSUM_ERR)
0x00E0: 01 01 FF 4D E4 DB 7B 47 (objectId = 0x01, subErr = 0x01)

Referring to EngineerZone post #593128 ("Issue with ADRV9002 custom profile no-OS"), TES versions and no-OS API versions have a known coupling (TES 0.22 <-> API 68.0.6; TES 0.27 <-> API 68.14.10). The chip's ROM bootloader CRC table is silicon-revision-specific and only accepts the stream binary version that was current at silicon production.

Our blob is v0.7.15.0; C0 silicon ROM appears to expect v0.7.18 based on the declaration in TES top_level.txt.
I could not locate a pre-assembled stream binary in the TES installed, - only the .asm/.txt source for runtime assembly by AnalogDevices.Adrv9001.ProfileGen.dll.

Will loading the correct version of pre-assembled Navassa_Stream_C0_0.7.18.0.bin help?
Or is there any guide to overcome this roadblock?

Thanks in advance, and I will gladly capture and post any further data if required.

Thread Notes

  • Hello,

    I do not have sufficient expertise with the ADRV9002 and Lattice to provide a definitive answer at this time but I will make sure this question is seen by someone with the appropriate background to give you a proper response.

    Thank you for your patience.

  • Hi,

    Thanks for your response.
    A brief follow-up to add a few details that were missing from the original post. These may help narrow down the matching stream version on your side.

    Eval board identifiers:

    • Manufacturing number: ADRV9002NP/W1/PCBZ
    • Eval board designator: ADRV9001CE 02B
    • Frequency variant marking: NP/W1 = 0.03–3 GHz
    • Chip marking: ADRV9002BBCZ
    • Date code: 2232 (week 32, 2022)
    • Lot number: S22-0271
    • Serial number: 2022080200078

    Silicon registers read back from the part:

    • reg[0x0004] = 0xC0 (silicon C0)
    • reg[0x000A] = 0x01 (variant)
    • reg[0x000B] = 0x56, reg[0x000C] = 0x04 (ADRV9002)

    Toolchain in use:

    • ADI no-OS driver API 68.14.13
    • TES Server build Adrv9001Server_C0_68.20.12
    • ARM firmware Navassa_EvaluationFw_C0_0.22.64 (taken from the TES install)

    Additional notes since the original post:

    • The on-chip stream version read back via adi_adrv9001_Stream_Version_Get matches what was uploaded (v0.7.18.0), so the SPI write path appears faithful.
    • A multi-window read-back of the uploaded stream image at six PROG-memory offsets confirms the bytes on the chip match the source array exactly.
    • Three TES Setup presets have now been tried (DMR, LTE at 40 MHz device clock, LTE at 38.4 MHz device clock with 15.36 MSPS). All produce the same bootState = 4 within roughly one millisecond of arm_Start.
    • The mailbox bytes at 0x00E0 consistently start 0x01 0x00 (objectId, subErr), while bytes 2 through 7 vary between runs.

    If a pre-assembled stream binary matched to this date code / lot is available, that would be the quickest path forward for us. Equally, any guidance on how to assemble an older stream version offline from the TES tooling would be appreciated.


    Thank you for the help.

  • Hi  ,
    A gentle follow-up - May I ask whether there is any update on this?
    I fully understand the question may still be in the queue. Any pointer in the meantime would be much appreciated.

    Thank you for your time and support.

  • Hi ,

    Thanks for the extra details.

    I've escalated this to three engineers: two who previously worked on the ADRV9002 no-OS and one who usually works with Lattice platforms.

    One thing worth mentioning while you wait. The no-OS ADRV9001 project is built and tested on Xilinx boards (ZCU102, ZC706, ZedBoard). Lattice is not an officially supported platform for now, at least. Even once someone gets back to you, I'm not sure how much support we'll be able to offer for a platform we don't officially support for ADRV9002. We'll do our best but I just want to set the right expectations.

    We'll get back to you as soon as soon as possible.