Подготовка FreeSRP к работе
Общая схема
После каждого включения питания FreeSRP необходимо заново загрузить прошивки:
- С ПК загрузить прошивку микроконтроллера в оперативную память МК.
- Через прошитый микроконтроллер загрузить прошивку в FPGA. Обычно оба шага выполняются одной командой.
- После успешной загрузки прошивок плата готова к работе.
Файлы для работы
Для выполнения приведённых ниже команд понадобятся прошивки и пример скрипта для проверки работы через UHD, их можно скачать здесь.
В архиве находятся следующие файлы:
fx3.img— прошивка микроконтроллера, поставлявшаяся вместе сlibfreesrpиз PPA. Версия прошивки:v0.1.1;fpga.bin— прошивка FPGAXC7A50T-1FTG256C, также поставлявшаяся вместе сlibfreesrpиз PPA;uhd_loopback_tone.py— пример проверки передачи и приёма сигнала через UHD.
После скачивания распакуйте архив в удобную директорию. В примерах ниже предполагается, что команды с указанными файлами выполняются из директории, в которую распакован архив. Если файлы находятся в другом месте, необходимо указать полный путь к ним.
Необходимое ПО
Описанная ниже последовательность работает на Ubuntu вплоть до версии 25.10 включительно.
Для работы с FreeSRP требуется библиотека libfreesrp. В её состав входят инструменты для прошивки платы и интерактивной работы с ней.
Установить libfreesrp можно двумя способами:
- из старого PPA-репозитория;
- собрать из исходников.
Установка libfreesrp из PPA
-
Добавить репозиторий
sudo add-apt-repository ppa:llb/freesrp -
Исправить версию 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 -
Установить пакет
sudo apt updatesudo apt install libfreesrpПосле установки в системе будут доступны утилиты
libfreesrp. Кроме того, прошивки микроконтроллера и FPGA будут находиться в/usr/share/freesrp.
Для дальнейшей работы можно использовать как файлы из этой директории, так и прошивки из скачанного архива.
Сборка libfreesrp из исходников
Общая последовательность сборки:
-
Установить пакеты, необходимые для сборки:
sudo apt-get install libboost-all-dev cmake build-essential -
Скачать, собрать и установить библиотеку по инструкции из github репозитория проекта.
-
После установки обновить кэш динамического загрузчика:
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 работает.
-
Для сборки SoapyOsmo и работы через UHD установите следующие пакеты:
sudo apt updatesudo apt install git cmake g++ make libboost-all-dev libsoapysdr-dev soapysdr-tools uhd-host uhd-soapysdr python3-uhd python3-numpy -
Клонируйте исходники:
mkdir -p ~/srccd ~/srcgit clone https://github.com/FreeSRP/SoapyOsmo.git SoapyOsmo-FreeSRPcd SoapyOsmo-FreeSRP -
Соберите только поддержку 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=OFFcmake --build build -j"$(nproc)"sudo cmake --install buildsudo 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
Скрипт выполняет следующие действия:
- Открывает FreeSRP через UHD. При этом UHD использует
uhd-soapysdrи SoapyOsmo. - Настраивает RX и TX на одну частоту — по умолчанию
915 МГц. - Устанавливает частоту дискретизации — по умолчанию
1 MSps. - Формирует комплексный тон
100 кГцв baseband. - Передаёт этот тон через TX.
- Принимает сигнал обратно через RX, поскольку TX и RX соединены через аттенюатор.
- Выводит количество переданных и принятых отсчётов, а также 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"