ADRV9009
Recommended for New Designs
The ADRV9009 is a highly integrated, radio frequency (RF), agile transceiver offering dual transmitters and receivers, integrated synthesizers, and digital...
Datasheet
ADRV9009 on Analog.com
ADRV9026
Recommended for New Designs
The ADRV9026 is a highly integrated, radio frequency (RF) agile transceiver offering four independently controlled transmitters, dedicated observation...
Datasheet
ADRV9026 on Analog.com
I have a ZCU102 with ADRV9025 libiio subsystem device loaded, and am trying to interface with the following API to set parameters on the RF transceiver. I was hoping to do this with pyadi-iio; however, I do not see ADRV9025 (or ADRV9026/ADRV9029) available as supported devices. I do see ADRV9009 as a supported device, and my understanding is that the ADRV9009 is the two-channel version of the four-channel ADRV9025. Can I use the adrv9009.py ADI API to begin interfacing with my subsystem, or would the names need to match? I was thinking of creating my own adrv9025.py based on the adrv9009.py, but wanted to ask to see if this device might already be in the works of being supported.
Subsystem screenshot:
You should be able to use the majority of the ADRV9009 class and rename the devices as you mentioned. If you can submit a PR for the system we would be happy to review.
-Travis
Thanks Travis. I was able to use some of the ADRV9009 example functions to receive data; however, I was not able to successfully transmit. I was attempting to utilize some of the DDS functions (dds_single_tone) as well as using the ADRV9002 class to enable transmit out of TX1 (tx0_en), with no joy. Do you have any suggestions on how to generate just a simple CW tone using pyadi-iio for the ADRV9025 to transmit out of TX1, for example?
Can you provide a context file from the board? See here https://analogdevicesinc.github.io/pyadi-iio/dev/index.html#emulation The referenced python package (pytest-libiio) will include the necessary CLI tool to generate it.
-Travis
I attempted to provide a context file via the pytest CLI; yet I don't see any collected items.
pytest --uri="ip:192.168.0.14"
=========================================== test session starts ============================================
platform linux -- Python 3.10.12, pytest-8.1.1, pluggy-1.5.0
rootdir: /home/user
plugins: libiio-0.0.18
collected 0 items
I also tried 'pytest --scan-verbose' and simply 'pytest', with the same result.
You use the gen-xml command to create it ttps://tfcollins.github.io/pytest-libiio/master/cli_tools/ like:
gen-xml -u ip:192.168.0.14 -x adrv9025.xml
Thanks for the guidance, Travis, I've attached the context file.
Can you try this branch: https://github.com/analogdevicesinc/pyadi-iio/tree/tfcollins/adrv9025
-Travis
Thanks for the updated API for the ADRV9025. Do you have an example script to execute a transmit of a CW tone? It appears I am able to see effects using "sdr.dds_single_tone(100000000, 1, channel=1)", but I'm not sure I understand the output frequency on my spectrum analyzer (around 3.563 GHz). I am monitoring TX1. The energy goes away when I set channel=0 in the above dds_signal_tone call.
I don't have an ADRV9025 myself but these are probably just the en properties since ADRV9025 can work in FDD mode.
A simple script would be:
dev = adi.adrv9025('ip:analog')
dev.lo1 = 1e9
dev.lo2 = 1e9
# Enable all channels
for c in range(4):
for e in [True, False]:
chan = dev._ctrl.find_channel(f'voltage{c}', e)
chan.attrs['en'].value = '1'
dev.dds_single_tone(1000000, 0.8)
data = dev.rx()
Much appreciated Travis! The above works, somewhat. I can toggle on/off some of the TX channels, but doesn't seem that all of the channels are transmitting. The output RF frequency is not at the same frequency as what I set above either (described in my comment above). I will keep investigating.