Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When trying to use my USRP in GNU Radio, I get a " No devices found for ----->" error

Tags:

gnuradio

usrp

uhd

When trying to execute a GNU Radio program that uses a USRP, I get an error backtrace, which (in Python) typically ends with:

    self.u = uhd.usrp_source(device_addr=args, stream_args=uhd.stream_args('fc32'))
  File "/home/marcus/.usrlocal/lib64/python2.7/site-packages/gnuradio/uhd/__init__.py", line 122, in constructor_interceptor
    return old_constructor(*args)
  File "/home/marcus/.usrlocal/lib64/python2.7/site-packages/gnuradio/uhd/uhd_swig.py", line 2351, in make
    return _uhd_swig.usrp_source_make(*args)
RuntimeError: LookupError: KeyError: No devices found for ----->

The USRP is running.

like image 707
Marcus Müller Avatar asked Oct 23 '15 14:10

Marcus Müller


People also ask

What is USRP for GNU Radio?

The Universal Software Radio Peripheral (USRP) products are commonly used with the GNU Radio software suite to create complex SDR systems. GNU Radio is a toolkit where digital signal processing blocks are written in C++, and connected to each other with Python.

What is USRP source?

The USRP Source Block is used to stream samples from a USRP device (i.e. act as the receiver). There is no need to use a Throttle block when a hardware source like a USRP Source is used, because the USRP acts as the throttle. There are two methods of setting parameters and adjusting them while running.

What is uhd GNU Radio?

This is the GNU Radio UHD package. It is the interface to the UHD library to connect to and send and receive data between the Ettus Research, LLC product line. To use the UHD blocks, the Python namespaces is in gnuradio.uhd, which would be normally imported as: from gnuradio import uhd.


1 Answers

You should always test raw UHD functionality first with the uhd_find_devices tool first:

uhd_find_devices

If it doesn't find your device, though it is booted, my experience is that you have a high chance of simply not being able to communicate with the device:

  • If you're not using a UHD version from Ettus' own repositories, especially on not-brand-new Ubuntus, your UHD might simply be older than the device and can't talk to it. The first line of output of uhd_find_devices will contain info on the version. At the time of writing (Oct 2014), 3.9 is the latest release. If possible, always use the latest release.
    • B200/B210 needs at least 3.6.0, but functionality improved significantly with 3.8.4
    • X300/X310 needs at least 3.7.0
    • B200mini needs 3.9
    • USRP1/2/B100/N200/N210 should be directly supported for but the oldest releases you'll find in the wild. Not so much for all daughterboards that you can use with them – as mentioned, try to use a recent version.
  • If you're using an USB connected device (USRP B200, B210, B200mini, B100, USRP1), chances are that you either
    • on Linux: don't have the udev rules installed necessary to allow "normal" users to communicate with the USRPs; check whether /etc/udev/rules.d/ contains something like uhd-usrp.rules.
    • on Windows: you might not have the Windows USB drivers installed.
    • if you've built UHD yourself (also, if you installed GNU Radio through build-gnuradio.sh or pybombs), there might have been USB libraries missing. Make sure your UHD cmake logs contain "Enabling USB".
    • USB3: Some USB3 host controllers don't behave standards-conforming, and connectivity cannot be achieved. If your USRP is detected when plugged into a USB2 port (anyone that isn't blue, usually), you should be fine.
  • If you're on a networked device (USRP X300/X310 with 1Gbit/10Gbit Ethernet, USRP N200/N210, USRP2)
    • make sure your network interface is
      • 1Gbit-capable (or 10GE, if applying); "Fast Ethernet" (10/100Mbit) NICs do not work with the USRPs.
      • Not the Intel 82579LM network controller (the only PCIe network controller IC known to occasionally drop packets without telling the operating system
      • not a USB3-to-Gigabit adapter (these tend to do interesting reordering on the packets, making them unsuitable for high-rate real time samples)
    • make sure your computer is on the same IP network. By default, USRPs have addresses from the 192.168.10.XXX range (XXX=2 in factory settings). Make sure your computer has an IP address from the same range, but not the same address.
    • make sure basic communication works (by ping <ip address of USRP>). If not, re-check your own IP address, and try to make sure the USRP is configured to the right address.
      • To find out the current IP address of your USRP, it's often easiest to properly install wireshark (that's a network packet sniffer software), have a dedicated network interface connect to the (powered off USRP), start the capture on that interface, and power on the USRP.
      • If the address is wrong, you can reprogram the IP address of the USRP X300/X310: cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=addr=<current IP address> --values="ip-addr0=<new ip address>"
      • If the address is wrong, you can reprogram the IP address of the USRP N200/N210/USRP2: cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=<optional device args> --values="ip-addr=192.168.10.3"
    • make sure you have your firewall configured to permit traffic coming from the USRP's port 49152. On linux, the following iptables command typically does the trick¹: sudo iptables -A INPUT -p udp --sport 49152 -j ACCEPT. Notice that this does punch a hole in your firewall. Your institution's security policies might apply.
  • If you're trying to use a USRP E100, E110, E310 or E312 connected to your PC:
    • The E-series devices are standalone embedded Linux SDR devices; they don't attach to a PC as a peripheral. You will have to compile your software (if applicable) with a cross-compiler and run the software on the E-series device itself, not on your host PC.

As a quick test whether your PC, USRP and cabling and device IP configuration are correct, download the current GNU Radio Live DVD² (which, by the way, also contains copious amounts of cool examples), boot it, and try uhd_find_devices there.


¹ your mileage might vary, as each distribution has its own idea of how to manage the firewall

² Please use the torrent files, if possible -- Amazon AWS traffic isn't free for the maintainers of the GNU Radio project. The torrent file also uses the AWS servers as source, but tries to get a part of the image from other users.

like image 186
Marcus Müller Avatar answered Sep 30 '22 18:09

Marcus Müller