Is ADRV9002 supported by SoapySDR?
assaf7 opened this issue · comments
Hello community,
I'm working on a project involving srsRAN 5G and using the ADRV9002 transceiver connected via FMC to a custom Zynq-based board (AX7350).
The ADRV9002 is up and running with Analog Devices' kernel and device tree.
From my host PC, I can connect to the board using libiio:
iio_info -u ip:192.168.1.20 It correctly lists adrv9002-phy and all channels.
I want to use the ADRV9002 in srsRAN 5G via SoapySDR, similar to how I use the PlutoSDR. My understanding was that this would be possible using:
SoapySDRUtil --find="driver=iio,remote=ip:192.168.1.20" Or via SoapyRemote with: SoapySDRServer --device="driver=iio,remote=ip:192.168.1.20"
But no devices are detected, even though I can connect using iio_info.
Is ADRV9002 supported via SoapySDR at all?
If not, is there any plan to make it work via driver=iio like PlutoSDR?
Has anyone successfully used ADRV9002 via SoapySDR for custom stacks like srsRAN?
I don't think there is a driver=iio module, did you install one?
It might work with https://github.com/pothosware/SoapyPlutoSDR/ (driver=plutosdr).
But you will have to check if the channels and such are compatible with assumptions about ADALM-Pluto hardware.
Thanks for replying,
I did confirm that driver=plutosdr doesn’t work — ADRV9002 has different IIO channel names and structure than ADALM-Pluto.
Document the channel names and structure and we might add that if it's somewhat similar.
Out of interest, are you using some ready available evaluation board or it a custom solution?
I’m using a the solution that is based on:
Transceiver: [Analog Devices ADRV9002NP/W1/PCBZ] — the official ADRV9002 FMC module
FPGA carrier board: AX7350 (Zynq-7000 SoC)
Interface: FMC connection between the ADRV9002 and the AX7350
Software stack:
I built the HDL design based on Analog Devices’ hdl_2021_r2 repo and adapted it to the AX7350 platform.
Device Tree and kernel from meta-adi (2023_R2) Yocto layer and ADI kernel.
IIO access is working and confirmed over Ethernet using iio_info -u ip:192.168.1.20.
I’m aiming to use this setup as an RF frontend for srsRAN 5G, and ideally connect to it over Ethernet from the host using SoapySDR (just like PlutoSDR).
Let me know if you'd like more details.
Document the channel names and structure and we might add that if it's somewhat similar.
what I should document here? in the uploaded file the output of iio_info
That doesn't look so much different, voltage0 and voltage1 as presumably RX1, RX2 input and TX1, TX2 outnput.
Then for the freqs altvoltage0 RX1_LO, altvoltage1 RX2_LO, altvoltage3 TX2_LO, altvoltage2 TX1_LO.
Most of the used attributes are available on the voltage channels.
This means that RX0, the first receive channel should somewhat work.
Maybe go through the source and swap some find_channel and channel_attr strings to match your hardware.
At minimum you need to change the find_device of ad9361-phy (dev), cf-ad9361-lpc (rx), cf-ad9361-dds-core-lpc (tx) to presumably adrv9002-phy, axi-adrv9002-rx-lpc, axi-adrv9002-tx-lpc.
That doesn't look so much different,
voltage0andvoltage1as presumably RX1, RX2 input and TX1, TX2 outnput. Then for the freqsaltvoltage0RX1_LO,altvoltage1RX2_LO,altvoltage3TX2_LO,altvoltage2TX1_LO. Most of the used attributes are available on the voltage channels.This means that RX0, the first receive channel should somewhat work.
Maybe go through the source and swap some find_channel and channel_attr strings to match your hardware.
At minimum you need to change the find_device of
ad9361-phy(dev),cf-ad9361-lpc(rx),cf-ad9361-dds-core-lpc(tx) to presumablyadrv9002-phy,axi-adrv9002-rx-lpc,axi-adrv9002-tx-lpc.
Thanks for the guidance — that makes sense.
It might be a bit challenging for me to modify the internals of the driver deeply, but I’ll give it a try by adapting SoapyPlutoSDR to match my ADRV9002 setup. I’ll start by updating the device and channel names as you suggested, and focus on getting RX0 working first.
I’ll share my results once I make progress. Appreciate the help!