AnsweredAssumed Answered

Arria10 AD9371: Error pushing Ch0/1 Tx buffers after several iterations

Question asked by dglee on May 22, 2018
Latest reply on May 23, 2018 by DragosB

This behavior i am experiencing is on the 2017/2018 Image:

http://swdownloads.analog.com/cse/2017_R1-2018_01_29.tar.xz

 

On the Arria10 + AD9371  I am trying to push buffers out to the transmitter using libIIO API calls. It seems after several buffer-pushes for both Channel 1 and 2 (this is voltage0,1,2,3 for Ch1/2 I/Q on device axi-ad9371-tx-hpc ) I get an error. However, if i just push Channel 1 (I and Q - voltage0/voltage1 on device axi-ad9371-tx-hpc ) there are no issues.

 

Attached is the modified AD9371 example taken from ADI's git page

libiio/ad9371-iiostream.c at master · analogdevicesinc/libiio · GitHub 

 

Here is the program output:

 

* Acquiring IIO context
* Acquiring AD9371 streaming devices
* Configuring AD9371 for streaming
* Acquiring AD9371 phy RX channel 0
rf_bandwidth: 100000000
sampling_frequency: 122880000
* Acquiring AD9371 RX lo channel
* Acquiring AD9371 phy TX channel 0
rf_bandwidth: 75000000
sampling_frequency: 245760000
* Acquiring AD9371 TX lo channel
* Initializing AD9371 IIO streaming channels
* Enabling IIO streaming channels
TX buffer create: Enabling non-cyclic mode. Transmit iterations = 1000000
* Starting IO streaming (press CTRL+C to cancel)
Buffer stride pinc = 8
iterationCount = 0 TX 0.01 MSmp
iterationCount = 1 TX 0.02 MSmp
iterationCount = 2 TX 0.03 MSmp
iterationCount = 3 TX 0.04 MSmp
iterationCount = 4 TX 0.05 MSmp
iterationCount = 5 TX 0.06 MSmp
Error pushing buf -110
* Destroying buffers
* Disabling streaming channels
* Destroying context

 

Buffer-stride (pinc) reports 4 if only two channels are enabled and 8 if both channels are enabled. This seems correct and similar to the AD9361 which led me to believe that I could write to the additional channels using this approach:

 


//channel0
((int16_t*)p_dat)[0] = I_Value_Read; // Real (I)
((int16_t*)p_dat)[1] = Q_Value_Read; // Imag (Q)

//channel1
((int16_t*)p_dat)[2] = I_Value_Read/2; // Imag (Q)
((int16_t*)p_dat)[3] = Q_Value_Read/2; // Imag (Q)

 

 

Please let me know if this is not correct and if there is a different methodology for writing to both DAC channels.

 

Thanks

Attachments

Outcomes