On 05/29/2019 12:18 PM, Jason Roehm via USRP-users wrote:
Some time back, I had an exchange on this list regarding how to
configure an X300 to stream data from a TwinRX and LFRX daughterboard
simultaneously. The previous thread is archived here:
http://lists.ettus.com/pipermail/usrp-users_lists.ettus.com/2017-February/051672.html
Specifically, I would like to synchronously stream both TwinRX
channels at 100 MSPS complex, while streaming both LFRX channels as a
single 100 MSPS complex stream as well. To do that, I am:
- Creating three multi_usrp objects initialized with identical
arguments, with the subdev specification "A:0 A:1 B:AB".
- Obtaining one rx_streamer object from each multi_usrp (passing a
different channel number 0, 1, or 2 to each), then calling
issue_stream_cmd() with stream_now = false and time_spec some time in
the future (say 2 seconds away to ensure much more than enough time to
finish setting up the stream). This should ensure that they all start
streaming simultaneously so I get time-coincident samples
- Using the rx_streamer objects to receive data on each channel, use
recv() to stream data in.
I have run this setup for over a year with no issues under UHD
v3.10.3.0. I updated my application to use UHD v3.14.0.0 in order to
get access to TwinRX bugfixes and more Ettus hardware support.
After the UHD upgrade, the above setup does not work. I do get data
streaming from the 2 TwinRX channels at the desired rate, but I never
get data from the LFRX. Instead, the first call to recv() in the
thread that is reading the LFRX data returns ERROR_CODE_LATE_COMMAND,
then the subsequent calls time out (I have the timeout set to 5 seconds).
Notably, if I set stream_now = true in the stream command, then I get
data from all of the channels as expected at the desired rate.
However, this method is incompatible with time alignment across
channels, so it is not an option.
How can I get time-aligned streaming from TwinRX/LFRX working under
UHD v3.14?
Thank you.
Jason
I'm a little bit surprised this worked AT ALL--you have 3 independent
multi-usrp objects all pointing at the same hardware.
Time alignment is something that is done WITHIN A SINGLE multi_usrp object.
The right way to do this is to use a single multi_usrp object, with a
multi-channel stream--that way the time-aligner within multi_usrp
will take care of time alignment.
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com