Перейти к основному содержимому

Подготовка FreeSRP к работе

Общая схема​

После каждого включения питания FreeSRP необходимо заново загрузить прошивки:

  1. С ПК загрузить прошивку микроконтроллера в оперативную память МК.
  2. Через прошитый микроконтроллер загрузить прошивку в FPGA. Обычно оба шага выполняются одной командой.
  3. После успешной загрузки прошивок плата готова к работе.

Файлы для работы​

Для выполнения приведённых ниже команд понадобятся прошивки и пример скрипта для проверки работы через UHD, их можно скачать здесь.

В архиве находятся следующие файлы:

  • fx3.img — прошивка микроконтроллера, поставлявшаяся вместе с libfreesrp из PPA. Версия прошивки: v0.1.1;
  • fpga.bin — прошивка FPGA XC7A50T-1FTG256C, также поставлявшаяся вместе с libfreesrp из PPA;
  • uhd_loopback_tone.py — пример проверки передачи и приёма сигнала через UHD.

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

Необходимое ПО​

Описанная ниже последовательность работает на Ubuntu вплоть до версии 25.10 включительно.
Для работы с FreeSRP требуется библиотека libfreesrp. В её состав входят инструменты для прошивки платы и интерактивной работы с ней.
Установить libfreesrp можно двумя способами:

  • из старого PPA-репозитория;
  • собрать из исходников.

Установка libfreesrp из PPA​

  1. Добавить репозиторий

    sudo add-apt-repository ppa:llb/freesrp
  2. Исправить версию Ubuntu в настройках репозитория В PPA нет пакетов для Ubuntu новее 16.04 (xenial), поэтому на современных версиях Ubuntu команда apt update завершится ошибкой. Необходимо открыть файл репозитория и заменить текущий Suite на xenial. Например, для Ubuntu 25.10 нужно заменить:

    Suites: questing

    на:

    Suites: xenial

    Файл можно открыть командой:

    nano /etc/apt/sources.list.d/llb-ubuntu-freesrp-questing.sources
  3. Установить пакет

    sudo apt update
    sudo apt install libfreesrp

    После установки в системе будут доступны утилиты libfreesrp. Кроме того, прошивки микроконтроллера и FPGA будут находиться в /usr/share/freesrp.

Для дальнейшей работы можно использовать как файлы из этой директории, так и прошивки из скачанного архива.

Сборка libfreesrp из исходников​

Общая последовательность сборки:

  1. Установить пакеты, необходимые для сборки:

    sudo apt-get install libboost-all-dev cmake build-essential
  2. Скачать, собрать и установить библиотеку по инструкции из github репозитория проекта.

  3. После установки обновить кэш динамического загрузчика:

    sudo ldconfig

    Это нужно для того, чтобы система увидела установленную библиотеку и программы могли корректно её находить.

После установки собранная из исходников версия используется так же, как версия из PPA.

Подготовка устройства​

При необходимости добавьте udev-правила для доступа к устройству FreeSRP:

sudo tee /etc/udev/rules.d/60-freesrp.rules >/dev/null <<'EOF'
# FreeSRP / electronics.kitchen
SUBSYSTEM=="usb", ATTR{idVendor}=="e1ec", ATTR{idProduct}=="f5d0", MODE="0666", GROUP="plugdev"
EOF

sudo usermod -aG plugdev "$USER"
sudo udevadm control --reload-rules
sudo udevadm trigger

После подачи питания перед началом работы с устройством необходимо загрузить прошивки командой:

freesrp-ctl --fx3=fx3.img --fpga=fpga.bin

Если файлы прошивок находятся не в директории, из которой выполняется команда, укажите полный путь после =.

Например:

freesrp-ctl --fx3=/path/to/fx3.img --fpga=/path/to/fpga.bin

Пример вывода при успешной загрузке:

Sucessfully uploaded FreeSRP firmware to FX3
Found FreeSRP
Found FreeSRP
Loading FPGA with 'fpga.bin'
FPGA configured successfully
Connected to FreeSRP
Version: FX3 v0.1.1, FPGA v0.1.0

После этого в системе появится USB SuperSpeed-устройство FreeSRP. Плату можно использовать в привычных программах, например gqrx, GNU Radio или с утилитой freesrp-io.


Поддержка UHD​

UHD не работает с FreeSRP напрямую. Для доступа к плате через UHD используется промежуточный слой SoapySDR:

FreeSRP -> libfreesrp -> SoapyOsmo -> uhd-soapysdr -> UHD

Компоненты этой цепочки выполняют следующие функции:

  • libfreesrp работает непосредственно с платой;
  • SoapyOsmo добавляет в SoapySDR драйвер driver=freesrp;
  • uhd-soapysdr представляет устройства SoapySDR как UHD-устройства.

Сборка и установка SoapyOsmo с поддержкой FreeSRP​

Предполагается, что libfreesrp уже установлена и команда freesrp-ctl работает.

  1. Для сборки SoapyOsmo и работы через UHD установите следующие пакеты:

    sudo apt update
    sudo apt install git cmake g++ make libboost-all-dev libsoapysdr-dev soapysdr-tools uhd-host uhd-soapysdr python3-uhd python3-numpy
  2. Клонируйте исходники:

    mkdir -p ~/src
    cd ~/src
    git clone https://github.com/FreeSRP/SoapyOsmo.git SoapyOsmo-FreeSRP
    cd SoapyOsmo-FreeSRP
  3. Соберите только поддержку FreeSRP:

    cmake -S . -B build \
    -DUSE_OSMO_FREESRP=ON \
    -DENABLE_RFSPACE=OFF \
    -DENABLE_OSMOSDR=OFF \
    -DENABLE_RTL=OFF \
    -DENABLE_MIRI=OFF \
    -DENABLE_HACKRF=OFF \
    -DENABLE_BLADERF=OFF \
    -DENABLE_AIRSPY=OFF \
    -DENABLE_REDPITAYA=OFF

    cmake --build build -j"$(nproc)"
    sudo cmake --install build
    sudo ldconfig

Проверка SoapySDR и UHD​

Перед проверкой необходимо загрузить прошивки в FreeSRP:

freesrp-ctl --fx3=fx3.img --fpga=fpga.bin

Убедитесь, что SoapySDR видит драйвер FreeSRP:

SoapySDRUtil --check=freesrp
SoapySDRUtil --find=driver=freesrp

Ожидаемый вывод:

Checking driver 'freesrp'... PRESENT

Found device 0
driver = freesrp
freesrp = 0
label = FreeSRP

Убедитесь, что UHD видит FreeSRP через uhd-soapysdr:

uhd_find_devices --args "type=soapy,driver=freesrp"
uhd_usrp_probe --args "type=soapy,driver=freesrp"

Ожидаемый вывод uhd_find_devices:

--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
driver: freesrp
freesrp: 0
label: FreeSRP
type: soapy

После этого FreeSRP можно открывать из UHD-программ с аргументами:

type=soapy,driver=freesrp

Если FreeSRP перестала определяться, переподключите или переинициализируйте плату, а затем снова загрузите прошивки:

freesrp-ctl --fx3=fx3.img --fpga=fpga.bin

Пример использования через UHD​

Для проверки работы через UHD можно использовать скрипт uhd_loopback_tone.py из скачанного архива.

Перед запуском вход и выход FreeSRP должны быть соединены через аттенюатор -30 dB.

Запуск:

python3 uhd_loopback_tone.py --args "type=soapy,driver=freesrp" --freq 915e6 --rate 1e6 --tone 100e3 --seconds 2

Скрипт выполняет следующие действия:

  1. Открывает FreeSRP через UHD. При этом UHD использует uhd-soapysdr и SoapyOsmo.
  2. Настраивает RX и TX на одну частоту — по умолчанию 915 МГц.
  3. Устанавливает частоту дискретизации — по умолчанию 1 MSps.
  4. Формирует комплексный тон 100 кГц в baseband.
  5. Передаёт этот тон через TX.
  6. Принимает сигнал обратно через RX, поскольку TX и RX соединены через аттенюатор.
  7. Выводит количество переданных и принятых отсчётов, а также RMS и peak значения принятого сигнала.

Пример успешного вывода:

Sent samples: 495616
Received samples: 495616
RX RMS: 0.001662
RX peak: 0.080862

Если Received samples равно нулю или UHD сообщает, что устройство не найдено, в первую очередь проверьте:

freesrp-ctl --list
SoapySDRUtil --find=driver=freesrp
uhd_find_devices --args "type=soapy,driver=freesrp"