I am trying to set "spp" parameter for rx stream to match some time period
but attached test program fails as following:

$ sudo ./test1
linux; GNU C++ version 4.8.4; Boost_105400; UHD_003.010.002.000-5-g4bbf0c20

-- X300 initialization sequence...
-- Connecting to niusrpriorpc at localhost:5444...
-- Using LVBITX bitfile
/usr/local/share/uhd/images/usrp_x310_fpga_HG.lvbitx...
-- Setup basic communication...
-- Loading values from EEPROM...
-- Setup RF frontend clocking...
-- Radio 1x clock:184.32
-- [DMA FIFO] Running BIST for FIFO 0... pass (Throughput: 1297.2MB/s)
-- [DMA FIFO] Running BIST for FIFO 1... pass (Throughput: 1302.0MB/s)
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- [RFNoC Radio] Performing register loopback test... pass
-- Performing timer loopback test... pass
-- Performing timer loopback test... pass
Receive frequency: 2630MHz
Streaming...
100us = 1536
Max samples per packet = 1020

UHD Error:
    The receive packet handler caught a value exception.
    ValueError: Bad CHDR or packet fragment

I use X310 device connected through PCIe.
If I do not set "spp" the program runs as expected.


thanks,
Dmitry
#include <iostream> 
#include <fstream> 
#include <csignal> 
#include <complex>
#include <uhd/usrp/multi_usrp.hpp> 

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    
    const double SR = 30.72e6/2;
    std::string args = "type=x300,master_clock_rate=184.32e6";
    uhd::device_addrs_t device_adds = uhd::device::find(args);

    if(device_adds.size() == 0) {
        std::cerr<<"No USRP Device Found. " << std::endl;
        return -1;
    }
    
    uhd::usrp::multi_usrp::sptr usrp = uhd::usrp::multi_usrp::make(args);
    usrp->set_clock_source("internal");
    usrp->set_rx_rate(SR, 0);
    usrp->set_rx_gain(0., 0);
    usrp->set_rx_freq(2.63e9);
    std::cout << "Receive frequency: " << usrp->get_rx_freq()/1e6 << "MHz" << std::endl;

    
    std::cout << "Streaming..." << std::endl;
    uhd::stream_args_t stream_args("sc16", "sc16");
    int samples = SR/10000;
    std::cout << std::dec << "100us = " << samples << std::endl;
    stream_args.args["spp"] = str(boost::format("%d") % samples );
    
    uhd::rx_streamer::sptr rx_stream = usrp->get_rx_stream(stream_args);
    std::cout << std::dec << "Max samples per packet = " << rx_stream->get_max_num_samps() << std::endl;
    
    uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
    stream_cmd.num_samps = 20000;
    stream_cmd.stream_now = true;
    rx_stream->issue_stream_cmd(stream_cmd);
    
    std::vector<std::complex<short>> buff(100);
    uhd::rx_metadata_t md;
    
    while (1) {
        size_t num_rx_samps = rx_stream->recv(&buff.front(), buff.size(), md);
        if (md.has_time_spec)
            std::cout << md.time_spec.get_tick_count(SR) << std::endl;
        if (!num_rx_samps)
            break;
    }
    
    return 0;
}

_______________________________________________
USRP-users mailing list
[email protected]
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to