Как стать автором
Обновить

Увеличиваем пропускную способность PlutoSDR (немного)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров810

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.

Подготовка

  1. Соберите модуль ядра из проекта:
    https://github.com/pgreenland/pluto-sdr-usb-gadget

  2. Скачайте файл конфигурации 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

После выключения устройства при следующем включении будет загружена оригинальная прошивка. Её можно будет обновлять без дополнительных действий.

Теги:
Хабы:
+7
Комментарии0

Публикации

Ближайшие события