EttusResearch / uhd

The USRP™ Hardware Driver Repository
http://uhd.ettus.com
Other
1k stars 667 forks source link

Has anyone using Tx and Rx on the same RFNOC radio block with success on UHD 4.7 release? #798

Open tomwts opened 1 month ago

tomwts commented 1 month ago

I am having an issue using the same RFNOC radio block for Rx and Tx on X310 running UHD 4.7 release standard FPGA firmware.

My application has flow graph configured: Rx 0/Radio#1 ==> 0/DDC#1 ==> 0/DUC#1 ==> Tx 0/Radio#1

When it started, it always aborted with a "no route found" error message:

[ERROR] [RFNOC::GRAPH::DETAIL] Cannot create route from device:1/sep:2 and device:1/sep:2, no route was found! Error: RuntimeError: Cannot create route from device:1/sep:2 and device:1/sep:2, no route was found!

I already had the back edge property set to true in duc to Tx radio connect API call.

Anyhow, my app works as long as the Rx and Tx radio block is different: Rx 0/Radio#1 --> Tx 0/Radio#0 (worked) Rx 0/Radio#0 --> Tx 0/Radio#1 (worked)

From uhd_usrp_probe output, the FPGA does have a route between 0/DDC#1 ==> 0/SEP#2 and 0/SEP#2 ==> 0/DUC#1.

I am not quite sure why it used device:1 instead of device:0 as reported in the error message "Cannot create route from device:1/sep:2 and device:1/sep:2, no route was found!".

uhd_usrp_probe output:

_____ / Static connections on this device:
* 0/SEP#0:0==>0/DUC#0:0
* 0/DUC#0:0==>0/Radio#0:0
* 0/Radio#0:0==>0/DDC#0:0
* 0/DDC#0:0==>0/SEP#0:0
* 0/Radio#0:1==>0/DDC#0:1
* 0/DDC#0:1==>0/SEP#1:0
* 0/SEP#2:0==>0/DUC#1:0
* 0/DUC#1:0==>0/Radio#1:0
* 0/Radio#1:0==>0/DDC#1:0
* 0/DDC#1:0==>0/SEP#2:0
* 0/Radio#1:1==>0/DDC#1:1
* 0/DDC#1:1==>0/SEP#3:0
* 0/SEP#4:0==>0/Replay#0:0
* 0/Replay#0:0==>0/SEP#4:0
* 0/SEP#5:0==>0/Replay#0:1
* 0/Replay#0:1==>0/SEP#5:0

Does anyone have had any success configuring the same radio block for Rx and Tx in a graph flow?

tomwts commented 1 month ago

I believe one possible cause of the issue related to the WBX-120 radio daughter board, which has 2 receive ports selectable by specifying port :0 or :1. It has just 1 transmit port however.

My X310 has two WBX-120 boards. When my app configured to use the same radio for Rx and Tx. The Rx control needs to configure RX2 for the receive and TX/RX for the transmit. That is, configure "0/Radio#1:1" for receive and "0:/Radio#1:0" for transmit.

Unfortunately, there is no way to configure the radio block port ":1" for Rx operation as far as I can tell. Calling set_rx_antenna("RX2", 0) has no effect, calling set_rx_antenna("RX2", 1) rejected as invalid.

When rx_blockid set to "0/Radio#1", the following code works fine:

uhd::rfnoc::block_id_t rx_radio_ctrl_id(rx_blockid);
uhd::rfnoc::radio_control::sptr rx_radio_ctrl = graph->get_block<uhd::rfnoc::radio_control>(rx_radio_ctrl_id);

But when rx_blockid set to "0/Radio#1:1" including the port number, the code rejected the rx_blockid as invalid.

Does anyone know how to configure the RFNOC Radio to select "0/Radio#1:1" (radio 1, port 1) for receive operation?

Thanks,