Hi all,
I have been experimenting with sending IQ data via a libiio buffer, and I'd like to enable the IQ transmission on one channel only (i.e. TX1 only). Simultaneously, I'd like to enable the remaining channels axis-adrv9025-tx-hpc DAC enable outputs (out_voltage[0, 1, 2, 3]_q_en,out_voltage[0, 1, 2, 3]_i_en), but in doing so, the IQ data in the buffer object is sent to all DAC channels. I did see over 4 years ago, there seems to be a single DMA buffer queue for all channels: https://ez.analog.com/linux-software-drivers/f/q-a/539615/iio-oscilloscope-load-separate-dac-buffers-with-different-iq-files-adrv9009-zu11eg
Has this changed for the ADRV9026/9, i.e. are there separate DMA buffers for each DAC channel? In the suggested answer above, using the Python bindings, how could I use vectors of all the same length to queue up simultaneously on the different DAC channels?
Simple control software example below:
import iio import numpy as np import time from pathlib import Path import scipy.io adi9026 = iio.Context("ip:192.168.0.14") tx_iq_xmit = 1 # Get Tx/Rx AXI Streaming Devices phy_control = adi9026.find_device("adrv9025-phy") phy_control.find_channel("LO1", True).attrs["frequency"].value = str(1 * (10**9)) phy_control.find_channel("LO2", True).attrs["frequency"].value = str(1 * (10**9)) #Device tx_control = adi9026.find_device("axi-adrv9025-tx-hpc") rx_control = adi9026.find_device("axi-adrv9025-rx-hpc") # enable TX channels for Tx i_chan1_tx = tx_control.find_channel("voltage0_i", True) q_chan1_tx = tx_control.find_channel("voltage0_q", True) data = (scipy.io.loadmat("test_files/t1.mat")['iq'][0]) * 2 ** 12 tx_buffer_size = len(data) // 2 rx_buffer_size = tx_buffer_size * 2 if tx_iq_xmit == 1: # Create the TX buffer, write IQ data, push txbuf = iio.Buffer(tx_control, tx_buffer_size, True) txbuf.write(bytearray(data)) txbuf.push() for i in range(1, 4): tx_control.find_channel("voltage"+str(i)+"_i", False).enabled = True tx_control.find_channel("voltage"+str(i)+"_q", False).enabled = True