Hi,

I am trying to test my RFNoC gain block, the one from the ‘Getting Started
with RFNoC Development’ guide, through the UHD C++ API on an E310 (I'm
using UHD-3.15.LTS, I know that UHD 4.0 has just been released but I would
appreciate it if someone could help me with this version).

I'm quite sure that the bitstream I generated is correct, when loading the
image and then running uhd_usrp_probe, the name I used in the gain.xml file
shows up among the other RFNoC blocks. Also, when doing
*gain_block_ctrl->sr_write()* and then checking the value through the
readback register with *gain_block_ctrl->user_reg_read32()* everything
seems to work fine.

What I'm trying to figure out is how to transmit and receive samples from
the block, I've tried a couple of ways and I'm still not getting a good
result.

First, I tried to send a packet with 200 samples to the block
(*tx_stream->send(&tx_buff,
tx_buff.size(), tx_md,0.5)*, with tx_stream obtained through a device3 usrp
object, including *tx_stream_args.args["block_id"] = "gain"* and
*tx_stream_args.args["block_port"]
= "0"* in the tx stream arguments, the *tx_md* (metadata) set up with
*tx_md.start_of_burst
= false, tx_md.end_of_burst = false* and *tx_md.has_time_spec = false*, and
I didn't use the radio at all this way. When trying to receive
(*rx_stream->recv(&rx_buff,
rx_buff.size(), rx_md, 5.0, true)*, including the *"block_id"* and
*"block_port"
*arguments in the rx stream like in the tx, and in mode
*STREAM_MODE_NUM_SAMPS_AND_DONE*), and I got an *ERROR_CODE_TIMEOUT*.

Then, I tried this time connecting the RFNoC Radio block to the gain block
with an *rfnoc::graph* and setting the radio and gain *"block_id"* and
*"block_port"
*arguments in the tx stream. When doing *recv()*, I got an unknown error:
"Receiver error: Unknown error code: 0x30" (does someone know what this
means?) when checking the *rx_md.error_code*. However, *recv()* returned
200, like if it had received the samples I sent, but the rx buffer was
empty.

I also tried using the RFNoC Replay block, but didn't get anywhere either.
Does anyone know if this block is supported in the E310? (this was asked in
the mailing list a while ago in
http://ettus.80997.x6.nabble.com/USRP-users-RFNoC-Replay-block-for-E310-td11156.html,
but I'd like to know if someone has tested it since then).

Lastly, I tried using threads, one with the *recv()* waiting for samples
and the main program thread doing the *send()*, but I wasn't lucky again. I
got this other unknown error: "Receiver error: Unknown error code:
0x3ce8e2b0".

So, which would be the best way to test my block? Again, I only want to see
that samples enter and exit multiplied by the gain value to understand how
I can work with RFNoC blocks from C++.

Also, I'm confused about this, when sending samples to the block its result
should be kept in the FIFO that then UHD reads from, so I understand that
there should be no reason for an active tx streamer to be streaming while
doing the *recv()*, because the *recv() *should just read the result from
the FIFO, or am I getting something wrong?

Any help would be appreciated.

Thanks in advance,

Jorge
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to