Thanks Marcus,
for your fast reply.
On Sat, Apr 26, 2025 at 4:08 AM Marcus D. Leech
<patchvonbr...@gmail.com> wrote:
On 25/04/2025 20:50, Nikos Balkanas wrote:
Hello,
I need to buy a new NIC. What would you suggest?
The one I use is an old Mellanox 10 Gbs, before the Connect-4 series.
It can only do 1996 S/s, need 19960 (10x more) to work with
latest uhd.
Using Ubuntu 24.04 and uhd 4.6.0
So, 1.996ksps vs 19.960ksps? You hardly need a 10Gbit link to
support that. So, perhaps something
is being lost here in your requirements?
True. Can't explain it in terms of bandwidth. 16 * 1996 = 31.936 Kbps,
16 * 19960 = 319.360 Kbps well short of a 10 Gbps line:(
Does a complex pair count as 1 sample, or 2?
I have followed all the instructions in
https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks,
Even installed the DPDK drivers. My Mellanox is too old to use their
OFED drivers:(
On a related question. it seems that the streamer doesn't crash
anymore
when receiving less than MAXSPS samples, instead it reads 0:(
This was due to the sse2 code not aligned in convert.
I change my stream args to cpu_format=sc16, otw=sc16, so no
conversion required.
Streamer still doesn't read anything. Is there a reason for it?
You'd need to share more of your code. This should just work as
far as I can tell.
Thanks. these are just the usrp code:
int main()
{
uhd_stream_args_t stream_args =
{
.cpu_format = "sc16",
.otw_format = "sc16",
.args = "",
.n_channels = 1,
.channel_list = &channel
};
..uhd_stream_cmd_t stream_cmd =
{
.stream_mode = UHD_STREAM_MODE_NUM_SAMPS_AND_DONE,
.stream_now = true
};
if (uhd_init(0, 0, gain)) do_exit(20);
if ((err = uhd_usrp_get_rx_stream(dev[0], &stream_args,
rx_streamer[0])))
{
uhd_get_last_error(errmsg, 127);
error(log, "Failed to get streamer[0] (%d). %s.\n", 0, FL, LN, FN,
err, errmsg);
uhd_rx_streamer_free(&rx_streamer[0]);
rx_streamer[0] = NULL;
uhd_rx_metadata_free(&md[0]);
md[0] = NULL;
do_exit(30);
}
if ((err = uhd_rx_streamer_max_num_samps(rx_streamer[0], &maxsamps)))
{
uhd_get_last_error(errmsg, 127);
error(log, "Failed to get max samples/buffer[0] (%d). %s.\n", 0,
FL, LN, FN, err,
..errmsg);
do_exit(35);
}
if (maxsamps != MAXSMPS)
warn(log, "Incorrect maxsamples (%ld). Expected %d.\n", 0, FL, LN,
FN, maxsamps,
MAXSMPS);
info(log, "Max samples/buffer[0]: %ld\n", 0, maxsamps);
if ((err = uhd_rx_streamer_issue_stream_cmd(rx_streamer[0],
&stream_cmd)))
{
uhd_get_last_error(errmsg, 127);
error(log, "Failed to start streamer[0] (%d). %s.\n", 0, FL, LN,
FN, err, errmsg);
do_exit(40);
}
[...]
do_exit(0)
}
bool uhd_init(size_t channel, double srate, double gain)
{
double tmp;
uhd_rx_metadata_error_code_t err;
if ((err = uhd_set_thread_priority(uhd_default_thread_priority,
true)))
warn(log, "Unable to set main thread priority (%d). %s.\n", 0,
FL, LN, FN,
err, uhdError(err));
/* Create USRP */
f ((err = uhd_usrp_make(&dev[channel], "type=x300")))
{
error(log, "Failed to create USRP (%d). %s.\n", 0, FL, LN, FN, err,
uhdError(err));
dev[channel] = NULL;
return(FAIL);
}
info(stderr, "Created USRP with args\n", 0);
/* Create RX streamer */
if ((err = uhd_rx_streamer_make(&rx_streamer[channel])))
{
error(log, "Failed to create rx_streamer[%d] (%d). %s.\n", 0, FL,
LN, FN,
channel, err, uhdError(err));
return(FAIL);
}
/* Create RX metadata */
if ((err = uhd_rx_metadata_make(&md[channel])))
{
error(log, "Failed to create md[%d] (%d). %s.\n", 0, FL, LN, FN,
channel,
err, uhdError(err));
return(FAIL);
}
/* Get master clock rate */
if ((err = uhd_usrp_get_master_clock_rate(dev[channel], 0, &tmp)))
{
error(log, "Failed to set master clock to %.0lf Mhz (%d). %s.\n",
0, FL,
LN, FN, tmp/1000000, err, uhdError(err));
return(FAIL);
}
info(stderr, "Master clock is at %.0lf Mhz\n", 0, tmp/1000000);
/* Set the sample rate */
if (srate && !uhd_set_rx_rate_check(channel, srate)) return(FAIL);
/* Set the tuner gain SBX-120 is 0-31.5 in .5 db steps */
if ((err = uhd_usrp_set_rx_gain(dev[channel], gain, channel, "")))
{
error(log, "Failed to set tuner[%d] gain to %.0lf db (%d). %s.\n",
0, FL,
LN, FN, channel, gain, err, uhdError(err));
return(FAIL);
}
if (!(err = uhd_usrp_get_rx_gain(dev[channel], channel, "", &tmp)))
info(log, "Tuner[%d] gain set to %.0lf (%.0lf) dB\n", 0, channel,
tmp,gain);
./* Set channel bw to conserve tuner resources. Not needed, set by
srate */
uhd_usrp_set_rx_bandwidth(dev[channel], srate, channel);
./* Disable subtracting constant averaged background. Signal looks
cleaner */
if ((err = uhd_usrp_set_rx_dc_offset_enabled(dev[channel], false,
channel)))
{
warn(log, "Failed to disable FPGA DC offset on channel %d(%d). %s.\n", 0,
FL, LN, FN, channel, err, uhdError(err));
}
info(stderr, "Disabled FPGA DC offset on channel %d\n", 0, channel);
return(SUCCESS);
}
This is the generated output:
[INFO] [UHD] linux; GNU C++ version 13.2.0; Boost_108300;
UHD_4.6.0.0+ds1-5.1ubuntu0.24.04.1
[INFO] [X300] X300 initialization sequence...
[INFO] [X300] Maximum frame size: 8000 bytes.
[INFO] [X300] Radio 1x clock: 200 MHz
Sat Apr 26 03:33:48 2025 [00] [+] Created USRP with args
Sat Apr 26 03:33:48 2025 [00] [+] Master clock is at 200 Mhz
Sat Apr 26 03:33:48 2025 [00] [+] Tuner[0] gain set to 30 (30) dB
Sat Apr 26 03:33:48 2025 [00] [*] scanner.l:1446:main Incorrect
maxsamples (1996). Expected 19960.
Sat Apr 26 03:33:48 2025 [00] [+] Max samples/buffer[0]: 1996
[WARNING] [0/Radio#0] Ignoring stream command for finite acquisition
of zero samples
I hope this reads OK. Maybe next time I should attach the code:)
TIA
Nikos
_______________________________________________
USRP-users mailing list --usrp-users@lists.ettus.com
To unsubscribe send an email tousrp-users-le...@lists.ettus.com