Hi,

I had a similar issue earlier this year and posted to the list about it,
including a workaround:
http://lists.ettus.com/pipermail/usrp-users_lists.ettus.com/2020-February/061592.html

If you're not already doing this, you may want to try putting the code that
latches the time after the RX stream is created. For some reason creating
the RX stream with 2 channels on the B210 was changing the device time.

-Michael

On Thu, Sep 24, 2020 at 8:41 PM Marcus D. Leech via USRP-users <
usrp-users@lists.ettus.com> wrote:

> On 09/24/2020 08:21 PM, David Merit via USRP-users wrote:
>
> Hi, This seems to be a bug in Capturing timed samples.. Can anyone suggest
> ways around this?
> Im thinking of adding another 'set-time' before subsequent stream_cmds ,
> or maybe theres something else I can put in a stream cmd? can the meta-data
> structure sent to recv() do anything useful to resolve?
> Ive already tried different buffer sizes, rates. its really unusual.
> Read below for the details.. THanks for any thoughts!. Dave M.
>
> You should only EVER need to do 1 "set_time_unknown_pps()" call at the
> beginning of your code.  Constantly resetting the TOD register
>   on the USRP may have unintended consequences.
>
> Since my host computer is synced to NTP, I typically use that as the time
> I set in the "set_time_unknown_pps()" call, and I do it once
>   per session.
>
>
>
>
>
> Since my project code is similar, To explain the BUG, Ive modified ETTUS
> example code "rx_timed_samples", to
> - SYnc with an external 1PPS
> - retrieve and display the USRP time at start and during capture, from
> both time-now and time_last_pps functions
>
> Setup: SIngle B210, Ubuntu 18.04, UHD_4.0.0.0-804-gb2527716
> , PPS via extern SMA port.( NOTE this is NOT the  GPSDO, which is not
> populated )
>
> Outcome:
> - GOOD: With only one B210 channel capturing, the USRP stays aligned with
> 1PPS
> - BAD:  With both B210 channels capturing, the USRP always time-shifts
> from 1PPS after first buffer-fill
> ________________________________
>
> The essential additions to example code outputs are
>      t_now=usrp->get_time_now();
>      t_tmp=usrp->get_time_last_pps();
>      printf("Actual time:now %8.5f
> :AtPPS:%8.5f\n",t_now.get_real_secs(),t_tmp.get_real_secs());
>
> Here's my code output..capture at 5MSPS, 10 secs into future.
>
> WORKS WITH ONE CHANNEL (9.99999 is same at 10.0)
> ./rx_timed_samples --channels "0" --nsamps 20000 --rate 5000000 --secs 10
> --sync pps
> Begin streaming 20000 samples, 10.000000 seconds in the future...
> Actual time:now  1.00254 :AtPPS: 1.00000. Commence wait.
> Actual time:now 10.00083 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.000008 frac secs
> Actual time:now 10.00130 :AtPPS: 9.99999
>
> FAILS WITH TWO CHANNELS
> ./rx_timed_samples --channels "0,1" --nsamps 20000 --rate 5000000 --secs
> 10 --sync pps
> Begin streaming 20000 samples, 10.000000 seconds in the future...
> Actual time:now  2.74539 :AtPPS: 2.00000. Commence wait.
> Actual time:now 10.00092 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.000010 frac secs
> Actual time:now 10.00166 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.000418 frac secs
> Actual time:now 10.00202 :AtPPS: 9.27090
>
> Heres the full output...
>
> someone@breakfast:~/uhd/host/build/examples$ ./rx_timed_samples
> --channels "0" --nsamps 20000 --rate 5000000 --secs 10 --sync pps
> Creating the usrp device with: ...
> [INFO] [UHD] linux; GNU C++ version 7.5.0; Boost_106501;
> UHD_4.0.0.0-804-gb2527716
>
> <...snip initialization stuff...>
> Setting RX Rate: 5.000000 Msps...
> [INFO] [B200] Asking for clock rate 40.000000 MHz...
> [INFO] [B200] Actually got clock rate 40.000000 MHz.
> Actual RX Rate: 5.000000 Msps...
>
> Setting device timestamp to 0...
> [INFO] [MULTI_USRP]     1) catch time transition at pps edge
> [INFO] [MULTI_USRP]     2) set times next pps (synchronously)
>
> Begin streaming 20000 samples, 10.000000 seconds in the future...
> Actual time:now  1.00254 :AtPPS: 1.00000. Commence wait.
> Actual time:now 10.00083 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.000008 frac secs
> Actual time:now 10.00130 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.000416 frac secs
> Actual time:now 10.00164 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.000824 frac secs
> Actual time:now 10.00198 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.001232 frac secs
> Actual time:now 10.00231 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.001640 frac secs
> Actual time:now 10.00269 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.002048 frac secs
> Actual time:now 10.00308 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.002456 frac secs
> Actual time:now 10.00349 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.002864 frac secs
> Actual time:now 10.00391 :AtPPS: 9.99999
> Received packet: 2040 samples, 10 full secs, 0.003272 frac secs
> Actual time:now 10.00425 :AtPPS: 9.99999
> Received packet: 1640 samples, 10 full secs, 0.003680 frac secs
>
> Done!
>
> ______________________________________
> BAD:
> someone@breakfast:~/uhd/host/build/examples$ ./rx_timed_samples
> --channels "0,1" --nsamps 20000 --rate 5000000 --secs 10 --sync pps
> <...snip initialization stuff...>
> Setting RX Rate: 5.000000 Msps...
> [INFO] [B200] Asking for clock rate 40.000000 MHz...
> [INFO] [B200] Actually got clock rate 40.000000 MHz.
> Actual RX Rate: 5.000000 Msps...
>
> Setting device timestamp to 0...
> [INFO] [MULTI_USRP]     1) catch time transition at pps edge
> [INFO] [MULTI_USRP]     2) set times next pps (synchronously)
> [INFO] [B200] Asking for clock rate 20.000000 MHz...
> [INFO] [B200] Actually got clock rate 20.000000 MHz.
>
> Begin streaming 20000 samples, 10.000000 seconds in the future...
> Actual time:now  2.74539 :AtPPS: 2.00000. Commence wait.
> Actual time:now 10.00092 :AtPPS: 9.27090 <<<<<<<<<<<<< THIS SHOULD BE 10.0
> !!!!
> Received packet: 2040 samples, 10 full secs, 0.000010 frac secs
> Actual time:now 10.00166 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.000418 frac secs
> Actual time:now 10.00202 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.000826 frac secs
> Actual time:now 10.00236 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.001234 frac secs
> Actual time:now 10.00269 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.001642 frac secs
> Actual time:now 10.00301 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.002050 frac secs
> Actual time:now 10.00331 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.002458 frac secs
> Actual time:now 10.00365 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.002866 frac secs
> Actual time:now 10.00398 :AtPPS: 9.27090
> Received packet: 2040 samples, 10 full secs, 0.003274 frac secs
> Actual time:now 10.00430 :AtPPS: 9.27090
> Received packet: 1640 samples, 10 full secs, 0.003682 frac secs
>
> Done!
>
>
>
>
> _______________________________________________
> USRP-users mailing 
> listUSRP-users@lists.ettus.comhttp://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>
>
> _______________________________________________
> USRP-users mailing list
> USRP-users@lists.ettus.com
> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to