При попытке использовать мой USRP в GNU Radio я получаю сообщение об ошибке "Устройства не найдены для ----->".
При попытке выполнить программу GNU Radio, которая использует USRP, я получаю обратную трассировку ошибки, которая (в 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 работает.
2 ответа
Вы всегда должны сначала тестировать необработанную UHD-функциональность с помощью uhd_find_devices
Инструмент первый:
uhd_find_devices
Если оно не находит ваше устройство, хотя оно загружено, то, по моему опыту, у вас есть высокая вероятность просто не иметь возможности общаться с устройством:
- Если вы не используете UHD-версию из собственных репозиториев Ettus, особенно в не совсем новом Ubuntus, ваш UHD может просто быть старше устройства и не может с ним общаться. Первая строка вывода
uhd_find_devices
будет содержать информацию о версии. На момент написания статьи (октябрь 2014 г.) 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, необходимые для того, чтобы "обычные" пользователи могли общаться с USRP; проверить,
/etc/udev/rules.d/
содержит что-то вродеuhd-usrp.rules
, - в Windows: возможно, у вас не установлены драйверы USB для Windows.
- если вы создали UHD самостоятельно (также, если вы установили GNU Radio через
build-gnuradio.sh
или жеpybombs
), возможно, отсутствовали библиотеки USB. Убедитесь, что ваши журналы UHD cmake содержат "Включение USB". - USB3: некоторые хост-контроллеры USB3 не соответствуют стандартам и не могут быть подключены. Если ваш USRP обнаружен, когда он подключен к порту USB2 (обычно любой, кто не синий), у вас все будет в порядке.
- в Linux: не нужно устанавливать правила udev, необходимые для того, чтобы "обычные" пользователи могли общаться с USRP; проверить,
- Если вы используете сетевое устройство (USRP X300/X310 с 1 Гбит /10 Гбит Ethernet, USRP N200/N210, USRP2)
- убедитесь, что ваш сетевой интерфейс
- С поддержкой 1Gbit (или 10GE, если применяется); Сетевые адаптеры Fast Ethernet (10/100 Мбит) не работают с USRP.
- Не сетевой контроллер Intel 82579LM (единственная ИС сетевого контроллера PCIe, о которой известно, что она иногда отбрасывает пакеты, не сообщая об этом операционной системе
- не адаптер USB3-Gigabit (они имеют тенденцию делать интересное переупорядочение пакетов, делая их непригодными для высокоскоростных выборок в реальном времени)
- убедитесь, что ваш компьютер подключен к той же IP-сети. По умолчанию USRP имеют адреса из
192.168.10.XXX
спектр (XXX=2
в заводских настройках). Убедитесь, что ваш компьютер имеет IP-адрес из того же диапазона, но не тот же адрес. - убедитесь, что базовая связь работает (по
ping <ip address of USRP>
). Если нет, перепроверьте свой собственный IP-адрес и попытайтесь убедиться, что USRP настроен на правильный адрес.- Чтобы узнать текущий IP-адрес вашего USRP, часто проще всего правильно установить
wireshark
(это программное обеспечение для анализа сетевых пакетов), имейте выделенный сетевой интерфейс, подключенный к (отключенный USRP), запустите захват на этом интерфейсе и включите USRP. - Если адрес неправильный, вы можете перепрограммировать IP-адрес USRP X300 / X310:
cd <install-path>/lib/uhd/utils ; ./usrp_burn_mb_eeprom --args=addr=<current IP address> --values="ip-addr0=<new ip address>"
- Если адрес неправильный, вы можете перепрограммировать IP-адрес 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"
- Чтобы узнать текущий IP-адрес вашего USRP, часто проще всего правильно установить
- убедитесь, что ваш брандмауэр настроен на разрешение трафика, поступающего из порта USRP 49152. В linux:
iptables
Команда, как правило, добивается цели:sudo iptables -A INPUT -p udp --sport 49152 -j ACCEPT
, Обратите внимание, что это пробивает дыру в вашем брандмауэре. Могут применяться политики безопасности вашего учреждения.
- убедитесь, что ваш сетевой интерфейс
- Если вы пытаетесь использовать USRP E100, E110, E310 или E312, подключенные к вашему ПК:
- Устройства серии E являются автономными встроенными устройствами Linux SDR; они не подключаются к компьютеру как периферийное устройство. Вам придется скомпилировать свое программное обеспечение (если применимо) с помощью кросс-компилятора и запустить программное обеспечение на самом устройстве серии E, а не на вашем хост-компьютере.
В качестве быстрой проверки правильности конфигурации вашего ПК, USRP, IP-адреса кабелей и устройств загрузите текущий GNU Radio Live DVD ² (который, кстати, также содержит множество интересных примеров), загрузите его и попробуйте uhd_find_devices
там.
¹ ваш пробег может отличаться, так как у каждого дистрибутива есть свое представление о том, как управлять брандмауэром
² Пожалуйста, используйте торрент-файлы, если это возможно - трафик Amazon AWS не является бесплатным для тех, кто сопровождает проект GNU Radio. Файл торрента также использует серверы AWS в качестве источника, но пытается получить часть изображения от других пользователей.
Запустите команду ниже:
sudo gedit /usr/lib/python2.7/dist-packages/gnuradio/uhd/uhd_swig.py
В строке содержит device_addr
добавлять B210
как это значение.
Args:
device_addr : B210