USRP2+WBX full duplex doesn't receive

I’m trying to simultaneously transmit and receive with a USRP2 and WBX
in a C++ command line tool. I’m using txrx_wbx_raw_eth_20100608.bin and
u2_rev3-20100603.bin on the USRP2 and have tried GNU Radio version 3.3.0
and 3.3.1 on the Ubuntu 10.04 host. I have a spectrum analyzer on TX/RX
and an antenna on RX2.

Transmitting without receiving works fine, as does receiving without
transmitting. If I attempt to do both at the same time, the receive
thread gets stuck – that is rx_samples doesn’t call the
rx_sample_handler so I never receive the data I’m after. The transmit
thread keeps running and I can see the transmitted signal on the
spectrum analyzer. I’ve set breakpoints in various places in the USRP2
host code and as near as I can tell, there are no packets being received
(poll times out each time it’s called in eth_buffer::rx_frames).

What am I missing? Is full duplex supported using raw ethernet with the
WBX?

-Marc

On Mon, Aug 23, 2010 at 1:41 PM, Marc E. [email protected] wrote:

can see the transmitted signal on the spectrum analyzer. I’ve set
breakpoints in various places in the USRP2 host code and as near as I can
tell, there are no packets being received (poll times out each time it’s
called in eth_buffer::rx_frames).

If you stop transmitting, does your RX sample stream then begin again?
If
so, it is because I think auto transmit switching is enabled by default
with
the WBX on the USRP2. I asked a question a while back as to whether or
not
the WBX has auto TR enabled or not by default, and how to change it, but
I
don’t think I got an answer.

Auto TR switching basically stops the RX stream while something is in
your
TX buffer.

  • George

On Aug 23, 2010, at 10:10 PM, George N. wrote:

If you stop transmitting, does your RX sample stream then begin again?

Alas, no. Once it stops receiving, it never starts again. Time to dig
into the firmware.

-Marc

On Aug 24, 2010, at 11:16 PM, George N. wrote:

I don’t think I’ve had this issue with my WBX and USRP2. I will check tomorrow for you

Thanks! I’d appreciate it.

I’ve now replicated the problem with a XCVR2450, so I don’t think it’s
WBX-specific.

I’ve altered my code to support separate USRP2s for transmit and
receive, switched to a host with two ethernet ports, and… it works!
I’m able to transmit on one and receive on the other simultaneously. The
same code (except for having a single usrp2 object instead of two)
cannot transmit and receive at the same time using just one USRP2 with
either a WGX or XCVR2450.

Back to my firmware/FPGA exploration…

-Marc

On Tue, Aug 24, 2010 at 7:11 AM, Marc E. [email protected] wrote:

On Aug 23, 2010, at 10:10 PM, George N. wrote:

If you stop transmitting, does your RX sample stream then begin again?

Alas, no. Once it stops receiving, it never starts again. Time to dig into
the firmware.

I don’t think I’ve had this issue with my WBX and USRP2. I will check
tomorrow for you

On Aug 24, 2010, at 11:16 PM, George N. wrote:

I don’t think I’ve had this issue with my WBX and USRP2. I will check tomorrow for you

Thanks! I’d appreciate it.

I’ve now replicated the problem with a XCVR2450, so I don’t think it’s WBX-specific.

Just to note that the XCVR2450 has only a single VFO, so full-duplex on
different frequencies can’t work–the hardware
isn’t capable of it. But full-duplex on the WBX should work provided
that you use the RX/RX port for transmit and the RX2
(secondary receive) antenna port for Rx.


Marcus L.
Principal Investigator
Shirleys Bay Radio Astronomy Consortium

Did you ever get this fixed? I’m seeing the same problem…

On Sep 23, 2010, at 1:42 AM, George N. wrote:

Did you ever get this fixed? I’m seeing the same problem…

And later:

However, I’m not using UHD. Do you know a fix for this outside of UHD?

Then:

I see the USRP2 send mac pause frames, and then no new data is sent over the interface for 5-10 seconds.

Since the USRP2 used pause frames even before UHD, it wouldn’t surprise
me if this is the same problem I encountered in UHD. Be sure to set the
rx gain, frequency, etc and call start_rx_streaming BEFORE spinning up
the tx thread. Try setting the system send buffer limit to something
small. To set it temporarily:

sudo sysctl -w net.core.wmem_max=10000

Then run your app.

HTH.

-Marc