当尝试在 GNU Radio 中使用我的 USRP 时,我得到一个“No devices found for ----->”错误
When trying to use my USRP in GNU Radio, I get a " No devices found for ----->" error
当我试图执行一个使用 USRP 的 GNU Radio 程序时,我得到一个错误回溯,它(在 Python 中)通常以:
结尾
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 ----->
USRP 是 运行。
您应该始终首先使用 uhd_find_devices
工具测试原始 UHD 功能:
uhd_find_devices
如果它没有找到你的设备,虽然它已经启动,但我的经验是你很有可能根本无法与设备通信:
- 如果您没有使用来自 Ettus 的 own repositories 的 UHD 版本,尤其是在非全新的 Ubuntu 上,您的 UHD 可能只是比设备,无法与之交谈。
uhd_find_devices
的第一行输出将包含版本信息。在撰写本文时(2014 年 10 月),3.9 是最新版本。如果可能,请始终使用最新版本。
- B200/B210 至少需要 3.6.0,但 3.8.4
的功能得到了显着改善
- X300/X310 至少需要 3.7.0
- B200mini需要3.9
- USRP1/2/B100/N200/N210 应该直接支持,但您会在野外找到最旧的版本。对于所有可以与它们一起使用的子板来说并不是那么多——如前所述,尝试使用最新版本。
- 如果您使用的是 USB 连接设备(USRP B200、B210、B200mini、B100、USRP1),您可能
- 在 Linux 上:没有 udev rules installed 允许 "normal" 用户与 USRP 通信所必需的;检查
/etc/udev/rules.d/
是否包含类似 uhd-usrp.rules
. 的内容
- 在 Windows 上:您可能没有 Windows USB drivers installed。
- 如果您自己构建了 UHD(另外,如果您通过
build-gnuradio.sh
或 pybombs
安装了 GNU Radio),则可能缺少 USB 库。确保您的 UHD cmake 日志包含 "Enabling USB".
- USB3:某些 USB3 主机控制器的行为不符合标准,无法实现连接。如果在插入 USB2 端口时检测到您的 USRP(通常不是蓝色的任何端口),您应该没问题。
- 如果您使用的是 联网 设备(USRP X300/X310 具有 1Gbit/10Gbit 以太网、USRP N200/N210、USRP2)
- 确保您的网络接口是
- 1Gbit 能力(或 10GE,如果适用); "Fast Ethernet" (10/100Mbit) NICs 不能与 USRPs 一起工作。
- 不是 Intel 82579LM 网络控制器(唯一已知偶尔会在不告知操作系统的情况下丢弃数据包的 PCIe 网络控制器 IC
- 不是 USB3 转千兆适配器(它们往往会对数据包进行有趣的重新排序,使它们不适合高速实时采样)
- 确保您的计算机在同一 IP 网络上。默认情况下,USRP 具有
192.168.10.XXX
范围内的地址(出厂设置为 XXX=2
)。确保您的计算机具有同一范围内的 IP 地址,但 不相同 地址。
- 确保基本通信正常(
ping <ip address of USRP>
)。如果不是,请重新检查您自己的 IP 地址,并尝试确保 USRP 配置为正确的地址。
- 要找出你的 USRP 的当前 IP 地址,最简单的方法通常是正确安装
wireshark
(这是一个网络数据包嗅探器软件),有一个专用的网络接口连接到(关闭 USRP),在该接口上开始捕获,然后打开 USRP 电源。
- 如果地址错误,可以重新编程USRP X300/X310的IP地址:
cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=addr=<current IP address> --values="ip-addr0=<new ip address>"
- 如果地址错误,可以重新编程USRP N200/N210/USRP2的IP地址:
cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=<optional device args> --values="ip-addr=192.168.10.3"
- 确保你的 firewall configured to permit traffic 来自 USRP 的端口 49152。在 linux 上,以下
iptables
命令通常可以解决问题¹:sudo iptables -A INPUT -p udp --sport 49152 -j ACCEPT
。请注意,这 确实 在您的防火墙中打了一个洞。您所在机构的安全政策可能适用。
- 如果您尝试使用 USRP E100、E110、E310 或 E312 连接到您的 PC:
- E 系列设备是独立的嵌入式 Linux SDR 设备;它们不会作为外围设备连接到 PC。您必须在 E 系列设备 本身 上使用 cross-compiler 和 运行 软件编译您的软件(如果适用),而不是在您的主机 PC 上。
作为快速测试您的 PC、USRP 和电缆以及设备 IP 配置是否正确,请下载当前的 GNU Radio Live DVD²(顺便说一下,其中还包含大量很酷的示例),启动它,然后在那里尝试 uhd_find_devices
。
¹ 您的情况可能会有所不同,因为每个发行版对如何管理防火墙都有自己的想法
² 如果可能,请使用 torrent 文件——Amazon AWS 流量对 GNU Radio 项目的维护者来说不是免费的。 torrent 文件也使用 AWS 服务器作为源,但试图从其他用户那里获取部分图像。
运行 下面的命令:
sudo gedit /usr/lib/python2.7/dist-packages/gnuradio/uhd/uhd_swig.py
在包含 device_addr
的行中添加 B210
作为它的值。
Args:
device_addr : B210
当我试图执行一个使用 USRP 的 GNU Radio 程序时,我得到一个错误回溯,它(在 Python 中)通常以:
结尾 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 ----->
USRP 是 运行。
您应该始终首先使用 uhd_find_devices
工具测试原始 UHD 功能:
uhd_find_devices
如果它没有找到你的设备,虽然它已经启动,但我的经验是你很有可能根本无法与设备通信:
- 如果您没有使用来自 Ettus 的 own repositories 的 UHD 版本,尤其是在非全新的 Ubuntu 上,您的 UHD 可能只是比设备,无法与之交谈。
uhd_find_devices
的第一行输出将包含版本信息。在撰写本文时(2014 年 10 月),3.9 是最新版本。如果可能,请始终使用最新版本。- B200/B210 至少需要 3.6.0,但 3.8.4 的功能得到了显着改善
- X300/X310 至少需要 3.7.0
- B200mini需要3.9
- USRP1/2/B100/N200/N210 应该直接支持,但您会在野外找到最旧的版本。对于所有可以与它们一起使用的子板来说并不是那么多——如前所述,尝试使用最新版本。
- 如果您使用的是 USB 连接设备(USRP B200、B210、B200mini、B100、USRP1),您可能
- 在 Linux 上:没有 udev rules installed 允许 "normal" 用户与 USRP 通信所必需的;检查
/etc/udev/rules.d/
是否包含类似uhd-usrp.rules
. 的内容
- 在 Windows 上:您可能没有 Windows USB drivers installed。
- 如果您自己构建了 UHD(另外,如果您通过
build-gnuradio.sh
或pybombs
安装了 GNU Radio),则可能缺少 USB 库。确保您的 UHD cmake 日志包含 "Enabling USB". - USB3:某些 USB3 主机控制器的行为不符合标准,无法实现连接。如果在插入 USB2 端口时检测到您的 USRP(通常不是蓝色的任何端口),您应该没问题。
- 在 Linux 上:没有 udev rules installed 允许 "normal" 用户与 USRP 通信所必需的;检查
- 如果您使用的是 联网 设备(USRP X300/X310 具有 1Gbit/10Gbit 以太网、USRP N200/N210、USRP2)
- 确保您的网络接口是
- 1Gbit 能力(或 10GE,如果适用); "Fast Ethernet" (10/100Mbit) NICs 不能与 USRPs 一起工作。
- 不是 Intel 82579LM 网络控制器(唯一已知偶尔会在不告知操作系统的情况下丢弃数据包的 PCIe 网络控制器 IC
- 不是 USB3 转千兆适配器(它们往往会对数据包进行有趣的重新排序,使它们不适合高速实时采样)
- 确保您的计算机在同一 IP 网络上。默认情况下,USRP 具有
192.168.10.XXX
范围内的地址(出厂设置为XXX=2
)。确保您的计算机具有同一范围内的 IP 地址,但 不相同 地址。 - 确保基本通信正常(
ping <ip address of USRP>
)。如果不是,请重新检查您自己的 IP 地址,并尝试确保 USRP 配置为正确的地址。- 要找出你的 USRP 的当前 IP 地址,最简单的方法通常是正确安装
wireshark
(这是一个网络数据包嗅探器软件),有一个专用的网络接口连接到(关闭 USRP),在该接口上开始捕获,然后打开 USRP 电源。 - 如果地址错误,可以重新编程USRP X300/X310的IP地址:
cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=addr=<current IP address> --values="ip-addr0=<new ip address>"
- 如果地址错误,可以重新编程USRP N200/N210/USRP2的IP地址:
cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=<optional device args> --values="ip-addr=192.168.10.3"
- 要找出你的 USRP 的当前 IP 地址,最简单的方法通常是正确安装
- 确保你的 firewall configured to permit traffic 来自 USRP 的端口 49152。在 linux 上,以下
iptables
命令通常可以解决问题¹:sudo iptables -A INPUT -p udp --sport 49152 -j ACCEPT
。请注意,这 确实 在您的防火墙中打了一个洞。您所在机构的安全政策可能适用。
- 确保您的网络接口是
- 如果您尝试使用 USRP E100、E110、E310 或 E312 连接到您的 PC:
- E 系列设备是独立的嵌入式 Linux SDR 设备;它们不会作为外围设备连接到 PC。您必须在 E 系列设备 本身 上使用 cross-compiler 和 运行 软件编译您的软件(如果适用),而不是在您的主机 PC 上。
作为快速测试您的 PC、USRP 和电缆以及设备 IP 配置是否正确,请下载当前的 GNU Radio Live DVD²(顺便说一下,其中还包含大量很酷的示例),启动它,然后在那里尝试 uhd_find_devices
。
¹ 您的情况可能会有所不同,因为每个发行版对如何管理防火墙都有自己的想法
² 如果可能,请使用 torrent 文件——Amazon AWS 流量对 GNU Radio 项目的维护者来说不是免费的。 torrent 文件也使用 AWS 服务器作为源,但试图从其他用户那里获取部分图像。
运行 下面的命令:
sudo gedit /usr/lib/python2.7/dist-packages/gnuradio/uhd/uhd_swig.py
在包含 device_addr
的行中添加 B210
作为它的值。
Args:
device_addr : B210