ADALM-PLUTO:
«Основанный на AD9363, он предлагает один канал приёма и один канал передачи, которые могут работать в полнодуплексном режиме, способен генерировать или измерять аналоговые радиочастотные сигналы от 325 до 3800 МГц со скоростью до 61,44 мегавыборок в секунду…»
Способен — но недолго. Интерфейс связи USB 2.0 позволяет непрерывно получать (или передавать) только 7,5 мегавыборок в секунду, или 3,2 — при полнодуплексной работе.
Часть полосы занимает тяжеловесный промышленный интерфейс IIO.
Возникает идея обойти IIO, и это уже сделано:
https://github.com/pgreenland/pluto-sdr-usb-gadget
Предложенный метод добавляет новое устройство USB gadget и увеличивает скорость до 10 мегавыборок в секунду — это уже достойно внимания.Однако для этого требуется прошивка, отличная от оригинальной. При выходе новой версии официальной прошивки потребуется её повторная перекомпиляция.
В данной статье предлагается метод перезапуска USB gadget с помощью загружаемого модуля ядра, который можно применять непосредственно из создаваемой программы.
PlutoSDR — это автономная радиочастотная лаборатория в ваших руках.
То есть, устройство содержит ARM-процессор и ОС Linux.
Позволяет загружать программы по SSH и выполнять их непосредственно (хотя и ограниченно, из-за слабого CPU) на самом устройстве.
Обход IIO через libusb-1.0
Мы можем загрузить на устройство сценарии запуска модуля ядра и сам модуль из проекта выше, а затем использовать передачу данных через стандартную библиотеку libusb-1.0, в обход IIO.
Подготовка
-
Соберите модуль ядра из проекта:
https://github.com/pgreenland/pluto-sdr-usb-gadget -
Скачайте файл конфигурации USB gadget из прошивки:
https://github.com/pgreenland/plutosdr-buildroot/blob/…/S23udcВ этом файле уже указан нужный модуль ядра:
SDR_USB_GADGET_OPTS="/dev/sdr_gadget_ffs"Переименуйте этот скрипт в
S24udc.
Сценарий перезапуска USB gadget
#!/bin/bash rm /etc/init.d/S23udc /etc/init.d/rcK sleep 0.5 /etc/init.d/rcS
Назовите файл, например, runme.sh.
Скрипт удаляет S23udc, выполняет rcK (завершает все процессы USB gadget), затем запускает все S*udc, включая наш S24udc.
Загрузка на устройство по SSH
#!/bin/bash INPUT=$1 # create askpass.sh script cat > askpass.sh <<EOF echo -n analog EOF chmod 0755 askpass.sh # copy sdr_usb_gadget env SSH_ASKPASS=./askpass.sh SSH_ASKPASS_REQUIRE=force \ scp -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null \ ./sdr_usb_gadget root@$INPUT:/usr/sbin sleep 0.1 # copy S24udc env SSH_ASKPASS=./askpass.sh SSH_ASKPASS_REQUIRE=force \ scp -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null \ ./S24udc root@$INPUT:/etc/init.d sleep 0.1 # copy runme.sh env SSH_ASKPASS=./askpass.sh SSH_ASKPASS_REQUIRE=force \ scp -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null \ ./runme.sh root@$INPUT:/tmp sleep 0.1 # run script on device env SSH_ASKPASS=./askpass.sh SSH_ASKPASS_REQUIRE=force \ ssh -t root@$INPUT \ -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null \ /tmp/runme.sh
Сценарий создаёт askpass.sh, который возвращает пароль analog — он используется по умолчанию на устройстве.
Используются переменные SSH_ASKPASS и SSH_ASKPASS_REQUIRE=force для автоматического ввода пароля.
Файлы копируются в нужные каталоги устройства, а затем выполняется скрипт runme.sh.
Итог
Устройство готово к работе через libusb-1.0.
Сценарий запускается на ПК с Linux. Для Windows потребуется создать аналогичный .bat или .cmd файл.
При запуске программы все подготовленные файлы можно упаковать в её ресурсы. После распаковки вызывается последний скрипт как отдельный процесс, ожидается его завершение, затем выполняется очистка.
Использование libusb-1.0 совместно с IIO можно посмотреть в проекте:
https://github.com/pgreenland/SoapyPlutoSDR/tree/master
После выключения устройства при следующем включении будет загружена оригинальная прошивка. Её можно будет обновлять без дополнительных действий.
ссылка на оригинал статьи https://habr.com/ru/articles/909508/
Добавить комментарий