Dear USRP Support Team,
Greetings of the day!
I am currently working with a USRP N300 device with uhd 4.7 and gnu radio
v3.11. I have created a simple loopback configuration in which the data flows
through the following blocks:
Rx_Radio > DDC > DMAFifo > DUC > Tx_Radio.
However, I am encountering an issue where only the receiver is working, and the
transmitter is not starting. My objective is to receive data and transmit it
back without using host-side streamers, i.e., I intend to handle everything on
the RFNoC hardware blocks directly.
I have set the configuration for the transmitter using the RadioControl blocks
(as shown in the attached script), but I am unable to start the transmitter. It
seems that the transmitter is not getting activated or streaming, even though
the receiver works correctly.
Could you please guide me on how to start the transmitter without relying on
host-side streamers? Any assistance or clarification regarding the correct
method to achieve this will be greatly appreciated.
Thank you for your support, and I look forward to your guidance.
Regards,
Nidhi
import uhd
import time
# from gnuradio import uhd
# RFNoC Graph Initialization
graph = uhd.rfnoc.RfnocGraph('addr = 192.168.20.2')
# Transmitter Properties
radio_noc_block_tx = graph.get_block("0/Radio#0")
tx_radio_block = uhd.rfnoc.RadioControl(radio_noc_block_tx)
tx_radio_block.set_tx_frequency(400e6, 0)
tx_radio_block.set_tx_gain(45, 0)
tx_radio_block.set_tx_bandwidth(100e6, 0)
tx_radio_block.set_tx_antenna("TX/RX", 0)
tx_radio_block.set_rate(125e6)
# Receiver Properties
radio_noc_block_rx = graph.get_block("0/Radio#0")
rx_radio_block = uhd.rfnoc.RadioControl(radio_noc_block_rx)
rx_radio_block.set_rx_frequency(400e6, 0)
rx_radio_block.set_rx_gain(45, 0)
rx_radio_block.set_rx_bandwidth(100e6, 0)
rx_radio_block.set_rx_antenna("RX2", 0)
rx_radio_block.set_rate(125e6)
# DDC and DUC Properties (for downconversion and upconversion)
ddc_block = uhd.rfnoc.DdcBlockControl(graph.get_block("0/DDC#0"))
ddc_block.set_input_rate(125e6, 0)
ddc_block.set_output_rate(1e6, 0)
duc_block = uhd.rfnoc.DucBlockControl(graph.get_block("0/DUC#0"))
duc_block.set_input_rate(1e6, 0)
duc_block.set_output_rate(125e6, 0)
# DMA Block for handling the data between blocks
dma_block = graph.get_block("0/DmaFIFO#0")
# replay_block = graph.get_block("Replay#0")
# Connect blocks without host-side streamers
graph.connect("0/Radio#0", 0, "0/DDC#0", 0, True) # Radio -> DDC Block
graph.connect("0/DDC#0", 0, "0/DmaFIFO#0", 0, False) # DDC -> DMA FIFO
graph.connect("0/DmaFIFO#0", 0, "0/DUC#0", 0, False) # DMA FIFO -> DUC
graph.connect("0/DUC#0", 0, "0/Radio#0", 0, False) # DUC -> Radio
# Commit the graph after connecting all blocks
graph.commit()
# Create StreamCMD for RX and TX
rx_stream_cmd = uhd.types.StreamCMD(uhd.types.StreamMode.start_cont)
rx_stream_cmd.time_spec = uhd.types.TimeSpec(0.0) # Timestamp for start of RX
tx_stream_cmd = uhd.types.StreamCMD(uhd.types.StreamMode.start_cont)
tx_stream_cmd.time_spec = uhd.types.TimeSpec(0.0) # Timestamp for start of TX
# Start RX and TX streams directly (through RFNoC blocks, not streamers)
rx_radio_block.issue_stream_cmd(rx_stream_cmd, 0)
tx_radio_block.issue_stream_cmd(tx_stream_cmd, 0)
# Main loop to keep the program alive
counter = 0
while True:
if counter == 2:
break
counter += 1
time.sleep(5)
print("I am alive!")
# Stop streaming when done (by stopping the RX and TX blocks)
rx_radio_block.issue_stream_cmd(uhd.types.StreamCMD(uhd.types.StreamMode.stop_cont),
0)
tx_radio_block.issue_stream_cmd(uhd.types.StreamCMD(uhd.types.StreamMode.stop_cont),
0)
print("Streaming closed.")
_______________________________________________
USRP-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]