Hi Martin, Marcus & Rob,

Thank you for your previous responses.  Cy is working for me on this 
development. Let me jump in and explain what we are trying to accomplish.

We are using an x310 USRP to transmit samples from a custom C++ application 
over a 10Gb Ethernet interface.  The target sample rate is 200 MSps, with 
16-bit I/Q samples.   We have receive functions running running reliably over 
the 10Gb Ethernet interface at the 200 MSps rate.

We would like to stream the transmit samples continuously, and we want the 
sample timing to be synchronized to GPS time (our x310 is fitted with the 
internal GPSDO).

We understand that we may have occasional errors on the 10Gb Ethernet link, and 
that we will need to recover from them.  We are trying to understand the best 
combination of burst size and packet size to accomplish this.

We initially tried making the burst size and the packet size the same.  So each 
packet has 1996 samples, and the metadata in each packet has start_of_burst, 
end_of_burst, and has_timestamp all set true.  The time_spec in the metadata is 
updated by 1996 ticks for each packet, corresponding to the number of samples 
in each packet.  We have flow control enabled on the transmit stream:

    uhd::stream_args_t tx_stream_args("sc16", "sc16");

    tx_stream_args.args\["enable_fc"\] = "1"; // Enable flow control

    tx_stream_args.args\["stream_mode"\] = "full_packet"; // Required for 
handling flow control responses

    tx_stream = usrp->get_tx_stream(tx_stream_args);

Similar to the tx_timed_samples example, we set the time_spec of the first 
packet to be 1 second in the future, to be sure that we have enough samples 
queued up in the USRP before it actually begins transmitting.

This approach does not seem to work at all.  We observe that after sending 64 
packets, the call to tx_send() takes almost one second to return.  So we 
believe the flow control is working, and there are 64 packets queue in the 
USRP.  

Very soon after that, we get an async message with EVENT_CODE_BURST_ACK.  The 
time_spec in that message is one sample time after the end of the first packet. 
 Very soon after that, we receive a number of async messages with 
EVENT_CODE_TIME_ERROR.  The time_spec in each of these appears to be 2 samples 
after the end of the corresponding packet.

1\.  Is is possible to send adjacent bursts?  That is, with time_spec values 
that are exactly 1996 samples after the previous burst?  Or is some gap 
required between the bursts? Based on some experiments with the 
tx_timed_samples example, I think there must be a gap of at least one sample 
between the bursts.

2\.  Is there any limit to how long a burst can be?  Currently, we are thinking 
to send the samples in one continuous burst.  Then, if an error is detected, 
(e.g. EVENT_CODE_TIME_ERROR, EVENT_CODE_UNDERFLOW), we will end the burst and 
start a new burst.  Only the first packet in the burst will include the 
time_spec parameter.

Thanks for your help!

Neal Riedel

Serrano Systems, Inc.
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to