Hi all,
I’m trying to transmit timed, frequency-hopped bursts with a USRP X310/UBX. I wrote a custom python source block that reads in a IQ .bin files and then adds stream tags with appropriate time, packet length, and frequency data. Everything works has expected when I simply feed my tx_freq tune command tags the same frequency over and over – I can see the correct hop timing on my test equipment and am able to demodulate the signal from the USRP. However, when I try to randomly select two frequencies I see the following UHD error after only transmitting the first handful of hopped bursts:
thread[thread-per-block[1]: <block gr uhd usrp sink (2)>]: EnvironmentError: IOError: Block ctrl (CE_01_Port_40) no response packet - AssertionError: bool(buff)
in uint64_t ctrl_iface_impl<_endianness>::wait_for_ack(bool, double) [with uhd::endianness_t _endianness = (uhd::endianness_t)0u; uint64_t = long unsigned int]
at /home/lab/latestgnuradio/src/uhd/host/lib/rfnoc/ctrl_iface.cpp:142
Here’s a code snippet of how I’m adding the tags. I don’t think there is anything wrong here since everything works when I give the same tx_freq command. I’m able to play this custom source block into a tag stream debug sink and see the exact tags that I expect without any issues – seems like a USRP issue.
# Logic for state2 state
elif(self.sync_flag and self.state1_flag and not self.state2_flag):
out[i] = self.state2_iq[self.state2_sample_count]
if((self.state2_sample_count%self.samples_per_burst)==0):
# Get time for current hop, add state1_wait_time if first state1 burst
if(self.state2_count == 0):
self.time_count += self.state2_wait_time
else:
self.time_count += self.state2_hop_time
self.hop_count = (self.time_count - self.base_time)/self.radio_hop_time
time = pmt.cons(
pmt.from_uint64(int(self.time_count)),
pmt.from_double((self.time_count) % 1),
)
print("self.burst_count = " + str(self.burst_count))
print("state2 BURST")
# self.current_freq = 1800000000
self.current_freq = 1800000000 + 100000000*round(numpy.random.uniform(0,1,1))
print("Current frequency = " + str(self.current_freq))
print(" ")
# Frequency tune tag
tune_tag = gr.tag_t()
tune_tag.offset = self.sample_count
tune_tag.key = pmt.string_to_symbol('tx_command')
tune_tag.value = pmt.to_pmt({'freq': self.current_freq})
tune_tag.value = pmt.dict_add(tune_tag.value, pmt.intern('time'), time)
self.add_item_tag(0, tune_tag)
# Burst length tag
length_tag = gr.tag_t()
length_tag.offset = self.sample_count
length_tag.key = pmt.string_to_symbol('packet_len')
length_tag.value = pmt.from_long(self.samples_per_burst)
self.add_item_tag(0, length_tag)
# Time tag
time_tag = gr.tag_t()
time_tag.offset = self.sample_count
time_tag.key = pmt.string_to_symbol('tx_time')
time_tag.value = pmt.make_tuple(
pmt.car(time),
pmt.cdr(time)
)
self.add_item_tag(0, time_tag)
self.state2_count += 1
self.burst_count += 1
Thanks for any help!
-Mert
No comments:
Post a Comment