Недавно соблазнился возможностями LibreSDR работать в полнодуплексном режиме, захотелось использовать такой трансивер для связи с низкоорбитальными радиолюбительскими спутниками. Очень удобно, когда можешь одновременно передавать свой сигнал на спутник и сразу слышать, как он ретранслируется. Для этих целей решил попробовать использовать LibreSDR как один из самых бюджетных вариантов. В ходе проекта пришлось поглубже познакомится с устройством LibreSDR и немного усовершенствовать его.

LibreSDR является широкополосным трансивером, он способен работать от 70 МГц до 6 ГГц. По радиолюбительскому опыту знаю, что такие широкополосные приёмники работают не очень хорошо, на входе и выходе обязательно должны быть достаточно узкополосные фильтры для подавления внеполосных помех и гармоник сигнала. Иначе в виду недостаточного динамического диапазона приёмник легко перегрузить. Да еще есть неприятная возможность принимать внеполосные сигналы. На самом деле, мне для работы со спутниками нужно всего два узких диапазона в районе 145.900 МГц и 436 МГц. Поэтому потребуются отдельные фильтры и усилители на каждый диапазон.

Другой особенностью связи с радиолюбительскими спутниками является то, что они, как правило, принимают и ретранслируют сигнал в разных диапазонах. Т.е. если я передаю на спутник свой сигнал в диапазоне 2 м, то ретранслируемый сигнал услышу в диапазоне 70 см. Бывает и наоборот. Все зависит от спутника. Сейчас разве что МКС принимает и передаёт всё на диапазоне 2 м.

Низкоорбитальные спутники пролетают быстро и приходится часто перестраивать частоты приёма и передачи и переключать диапазоны. Я использую для связи замечательную программу SDR Console v3. Она удобна для работы со спутниками, сама подстраивает частоты приёма и передачи с учётом эффекта доплера и т.д. Но вот сама переключать диапазоны и антенны она не умеет. Это неудобство я и решил исправить, доработав LibreSDR.

Обычно у любительских трансиверов есть специальный выход. Его называют band data. На него трансивер в закодированном виде выводит информацию о том, на каком диапазоне сейчас работает трансивер. Радиолюбители используют данные с этого выхода для автоматической настройки внешних тюнеров, коммутаторов антенн, усилителей. В LibreSDR, понятное дело, такого порта нет, и я задумал сделать его самостоятельно.

Для реализации идеи пришлось разобраться как с железом, так и софтом, с которым ранее не работал.

Разбор железа

Я не буду подробно описывать устройство LibreSDR. По сути, это продвинутый клон ADALM PLUTO SDR. В основе все тот же чип трансивера AD9363, он и определяет ключевые возможности устройства. Но вот далее идут разные приятные усовершенствования: ПЛИС Zynq 7020 с большим объемом ячеек, 1 Гб ОЗУ, 32 МБ флеш, слот для карты SD, 2 USB разъёма на чипе FTDI, гигабитный порт Ethernet, высокостабильный генератор, порты синхронизации тактового генератора, по два порта приёма и передачи, прочный алюминиевый корпус. Просто восторг!  И за много меньшие деньги, чем оригинальный Pluto. Где подвох?

Дальше я расскажу про обнаруженные минусы. Сразу оговорюсь, что за вложенные деньги (на 11.11.2024 SDR обошелся мне в 15000 руб.) минусы можно считать несущественными и, в большинстве случаев, устранимыми. Для радиолюбителя хорошее поле для доработок и творчества. Итак, по порядку:

  • На плате выведено всего 4 GPIO порта, доступных для использования. Маловато будет для реализации разных идей. Все порты подключены к блоку программной логики и являются 3.3V CMOS совместимыми. Для моего проекта достаточно и одного порта, так что не проблема.

  • Вместо оригинальных балунов TCM1-63AX+ на плате распаяно неизвестно что. Как следствие, не стоит ожидать ровной АЧХ во всём заявленном диапазоне частот. Если вам нужно использовать частоты выше 1 ГГц – первым делом надо заменить эти балуны. Мои измерения показали, что заводские балуны нормально работают до 500 МГц, поэтому я их менять не стал.

  • Измерения АЧХ SDR показали провал где-то на 20Дб в районе 2 ГГц. Как пишут на форумах, причиной этому являются установленные у SMA разъемов диоды-подавители ESD. Если эти диоды выпаять, то АЧХ сразу улучшается. Но я не рекомендую это делать не поменяв сначала балуны, поскольку оригинальные балуны являются короткозамкнутыми, а установленные с завода балуны – нет.

  • Осмотр платы показал, что вокруг полосковых линий передачи на плате нет переходных отверстий. Вообще при работе на частотах в несколько ГГц и импульсном режиме это может быть проблемой. Я не профессиональный разработчик СВЧ, но насколько я знаю, для нормальной работы полосковой линии на таких частотах переходные отверстия должны быть вдоль всех линий на расстоянии максимум в несколько миллиметров друг от друга. По отзывам на форумах существуют версии LibreSDR с такими отверстиями и без оных. Так что это вопрос удачи, что получится купить. При наличии проблем можно попробовать вместо линии подключить к балуну коаксиальный кабель напрямую.

  • Для стабилизации частоты в LibreSDR применён генератор VCXO, управляемый напряжением с 8-битного ЦАП DAC5311. Так написано на схеме. В реальности в моём экземпляре установлен 12-битный ЦАП DAC7311. Ни тот, ни другой не являются прецизионными и малошумящими. Да и в схеме не предусмотрена какая-то особая стабилизация напряжения ЦАП и фильтрации шумов. Как следствие, не стоит ожидать высоких показателей фазового шума от применённой системы стабилизации частоты. Кроме того, захват частоты иногда срывается. Но, к счастью, он реализован в ПЛИС на Verilog. Так что радиолюбительская доработка генератора на 40 МГц возможна и целесообразна. Опять же, если это станет для вашего проекта проблемой.

  • Прошивка флеша не удалась с первого раза. Есть подозрение, что недостаточно питания при подключении только одного USB кабеля. При подключении двух кабелей питания USB одновременно флеш нормально прошивается. Не уверен, что это всеобщая проблема, но у меня такой глюк был.

  • Элементная SMD база очень мелкая и припаяна бессвинцовым припоем. Мне паять сложно, приходится пользоваться микроскопом.

Не могу утверждать, что это исчерпывающий список проблем, лишь те, с которыми пришлось лично столкнуться. Главное, что возможности конструкции LibreSDR позволяют мне реализовать задуманное. Как я уже выше писал, мне достаточно одного пина для реализации проекта. Как такое возможно? Я решил сделать на ПЛИС дополнительный UART и вывести его выход TX на этот пин. Внутри SDR на чипе Zynq работает линукс. Я сделаю шелл скрипт, который будет отправлять в этот tty-UART порт информацию о настройке частот приёма и передачи. Далее, любое устройство может быть подключено к этому порту, распознать на каком диапазоне частот идёт работа и подключить нужные фильтры, усилители и антенны. Задача решена! Осталось только это все реализовать. Но вот тут начинается самое интересное.

Разбор софта

Начну с того, что LibreSDR пришел ко мне без какого-либо софта вообще. Не был прошит флеш, не было карты SD. Вообще ничего не работало. При подключении по USB к компьютеру появлялись 4 COM порта, которые ни на что не реагировали. Продавец заявил, что он продаёт только железо и софт предложил искать в интернете, чем я и занялся.

Довольно быстро на гитхабе нашлась совместимая с Pluto рабочая прошивка от hz12opensource. Вот за нее большое спасибо автору, наличие исходников вдохновило меня на то, что удастся реализовать задуманное. Первым делом нужно было собрать прошивку самому. На гитхабе есть достаточные инструкции, но очень короткие. Расскажу немного больше про свой опыт сборки для тех, кто решится повторить это упражнение.

Начнем с того, что нужна машина с линуксом и Vivado 2022.2. Посмотрев на системные требования, быстро приходишь к выводу, что нужно не меньше 16 ГБ памяти и 512 ГБ SSD для начала работы с проектом. Я не хотел ставить отдельную машину с линукс, работаю обычно под Windows. Поэтому решил попробовать все сделать с помощью WSL. Забегая вперед скажу, всё получилось. Но есть несколько нюансов:

  • Я выбрал для установки последнюю версию Ubuntu. Это оказалось ошибкой. Ничего не собиралось, падало на разных этапах – то библиотеки нужной нет, то сборка падает. В результате снес последнюю версию и установил WSL Ubuntu 2204. На ней сборка идёт без проблем.

  • WSL подтягивает в линукс пути поиска исполнимых файлов в PATH. Там есть пробелы. При запуске make ругается и падает. С помощью настройки WSL нужно отключить передачу PATH из Windows в линукс.

Весьма трепетно нужно отнестись к требованию использования Vivado именно версии 2022.2. Ранее я не работал с этой системой, поэтому думал, что версия 2024 лучше и современнее. Не делайте так, эти версии местами недостаточно совместимы, может быть много ошибок, с которыми на начальном этапе работы не стоит сталкиваться. И да, перед установкой Vivado сначала нужно несколько дополнительных пакетов в линукс установить. Смотрите документацию по установке Vivado внимательно.

После установки Vivado можно приступать к сборке. Как выяснилось, в процессе сборки очень много всего скачивается из интернета. Нужен хороший канал и желательно VPN. Я думал, что сделав git clone проекта, больше ничего скачиваться не будет, но это не так.

В проекте используются Buildroot, U-Boot, собирается ядро линукс и т.д. Место на SSD тает на глазах. Некоторая опасность получить неправильную сборку есть при неправильной установке переменных окружения. Если неправильно указать путь к Vivado, то скрипт make вместо сборки кода ПЛИС просто скачивает якобы готовый вариант bitstream из интернета. Понятно, что полученный результат работать не будет.

Но вот все скачалось и собралось. Записываем полученный образ на SD карту и запускаем LibreSDR. Наконец я убеждаюсь, что мне прислали не кирпич, а рабочий SDR. Однако анализ исходников прошивки показал ряд проблем:

  • Прошивка делалась на основе исходников Pluto SDR и во многих местах имя Pluto было заменено на libre. Но не везде и не всегда. Так что иногда это приводит к некорректной работе.

  • Порты кнопки DFU и светодиода вообще не разведены в HDL, в device tree указаны неверно.

  • Соответственно все скрипты, где используются кнопка и LED работают некорректно. А они есть и в линуксе и в u-boot.

  • Самое печальное – в HDL вообще нет схемотехники синхронизации генератора от 10 МГц и PPS. Оно и понятно, у Pluto ведь такого нет. Поэтому управляющий вход VCXO всегда притянут к земле. Очевидно, что при таком включении частота генератора 40МГц будет всегда занижена.

У меня самого опыта разработки на Verilog нет, поэтому я не стал пробовать самостоятельно разработать схему синхронизации. Решил поискать готовые решения. Довольно быстро обнаружил один из клонов Pluto с открытыми кодами HDL и похожей на LibreSDR схемотехникой. Это проект AntSDR. В модели e200 схема синхронизации очень похожа на используемую в LibreSDR. Правда там используется более качественный прецизионный и малошумящий ЦАП. Но и стоит e200 гораздо дороже. Я перенес схему синхронизации в свой проект. В e200 она оформлена в отдельный IP блок, да еще с возможностью управления по шине AXI. Очень удобно сделано. Единственной проблемой было переделать управление ЦАП по протоколу SPI. Они разные у разных ЦАП, пришлось, наконец, включить мозг, разобраться в верилоге и самому доработать программу связи с ЦАП.

К моей радости схема синхронизации довольно быстро заработала. Все было бы замечательно, но в какой-то момент перестала работать программа SDR Console. При попытке подключения к LibreSDR возникала ошибка и связь прерывалась. При этом никаких изменений в HDL, отвечающим за работу с SDR, я не вносил, да и никаких ошибок генерации bitstream не было. Возможно, там была какая-то элементарная загвоздка, но отсутствие знаний и опыта работы с Vivado не позволили мне решить эту проблему.

Но на этом мои попытки реализовать задуманное не прекратились. Знакомые владельцы LibreSDR прислали мне довольно большой архив с программами и описанием, который получили от продавцов из Китая (не все продавцы бестолковы). В архиве были загрузочные образы SD карт, драйверы, реклама и т.п. На английском и китайском. Как оказалось, документация на китайском и английском отличались. Учите китайский! В доках на китайском удалось обнаружить ссылки на доступность для LibreSDR эталонного дизайна HDL и Petalinux для Vivado 2019.1. Обнаружив эту информацию я попросил запросить у продавцов диск с этими проектами. К моей радости, продавец прислал ссылку на скачивание архива на 20 гигабайт с нужными мне проектами.

Использование оригинального дизайна помогло решить все проблемы. Во-первых, там был задуманный разработчиками код синхронизации генератора 40МГц. Анализ кода показал некоторые отличия от того, что сделал я на основе кода e200. Разработчики везде использовали буферизацию тактовых сигналов, не сделали интерфейс с шиной AXI, добавили код, который должен был бороться со срывом захвата синхронизации. Видимо, эта проблема не была решена до конца, поскольку бывают срывы.

Я решил в своем проекте использовать эталонный вариант HDL резонно полагая, что он точно будет работать как надо. А всю софтовую часть оставить как есть. Осталось только собрать bitstream. Это оказалось не так просто сделать. Весь код, как я уже писал, сделан для Vivado 2019.1, а я использую 2022.2. Эти версии не полностью совместимы. При открытии проекта, созданного в старой версии, Vivado предлагает его сконвертировать и обновить IP блоки. Деваться было некуда, я согласился. Сборка после обновления не пошла. Vivadо выдал тысячи предупреждений и несколько ошибок. Большинство из них касались доработки так называемых constraints. По большей части это описание настроек пинов чипа. Напряжения, скорость работы, тайминги генераторов и пр. Постепенно, используя поиск и форумы, я убрал большинство ошибок и предупреждений. Удобная штука есть в Vivado – Constraints Wizard. Многие проблемы были устранены с его помощью.

Но это была еще половина пути. Когда удалось преодолеть все ошибки и предупреждения, настигла новая напасть – созданный дизайн показывал какие-то чудовищные нарушения по таймингам сигналов. Опять поиск по форумам, безуспешные попытки настройки стратегий генерации дизайна. Проблему удалось решить, обновив все IP блоки (библиотеки) AD на свежие версии. Т.е. те библиотеки, что были в эталонном дизайне, я заменил на более свежие из проекта hz12opensource. Не знаю насколько это корректно было делать, не внося изменения в схемотехнику, но в таком варианте удалось создать bitstream без ошибок с таймингами.

Вообще обнаружилось важное отличие эталонного дизайна и HDL от hz12opensource. В последнем присутствуют IP блоки аппаратной децимации и интерполяции. При этом рабочими являются оба варианта. Однако, при описании параметров ad9361-phy в файле device tree нужно явно в параметрах для драйвера указывать наличие этой аппаратной возможности. Я пока детально не разбирался в работе ad9361 и не знаю какие варианты возможны и на что это влияет. Мне важно, что опытным путем проверено - SDR Console штатно работает как с первым, так и со вторым вариантом HDL.

Сборка bitstream это практически финальный шаг к получению готового загрузочного образа. Но требуется последняя доработка. Для корректной работы линукса нужно создать правильный файл с описанием аппаратных устройств (device tree). На основании данных из этого файла линукс будет включать нужные драйверы. В нашем варианте нет динамической подгрузки драйверов, все должны быть заранее включены в ядро линукс.

В эталонном дизайне есть готовый файл dts, нужно просто аккуратно перенести настройки оттуда в конфигурацию собираемого линукса. Важно проверить в Vivado, что совпадают и не съехали диапазоны адресов устройств, а также номера портов ввода-вывода и прерываний. Разбивка qspi флеша на партиции при этом должна остаться как у Pluto. В эталонном дизайне используется Petalinux, там разделы не совместимые с Pluto.

Проделав все эти манипуляции, мне удалось из эталонного проекта и hz12opensource собрать рабочую прошивку, которая работала как Pluto, но при этом поддерживала все железо LibreSDR. К слову, в LibreSDR есть еще зачем-то чип EEPROM и АЦП на шине I2C. АЦП позволяет измерять все напряжения питания ПЛИС, а вот зачем инженеры добавили чип EEPROM остается для меня загадкой. Но софт Pluto все эти нововведения не поддерживает и, вообще говоря, эти устройства можно не включать в device tree.

Попутно выяснил как сделать рабочим интерфейс JTAG. В отличие от Pluto, здесь JTAG подключен к чипу FTDI FT4232H. Но Vivado JTAG не видит, поскольку требуется специальная прошивка чипа FTDI EEPROM. Ее можно сделать самостоятельно. Нужно скачать с сайта FTDI утилиту FT_PROG. С её помощью сгенерировать и прошить серийный номер в чип. В Vivado есть специальная утилита program_ftdi. Нужно её запустить с указанием сгенерированного и прошитого серийного номера. Она прошьёт EEPROM FTDI настройками Xilinx. После этого в Vivado можно подключиться к LibreSDR по JTAG через USB.

Я заметил, что в рабочей прошивке остались разные мелкие проблемы, которые теоретически можно решить, но и с ними можно жить:

  • Нет DHCP сервера. Нужно настраивать статические адреса как на LibreSDR для обоих доступных интерфейсов (usb0, eth0), так и на хост компьютере. Поначалу эта проблема обескураживает тех, кто работал с Pluto. Там сразу обращаешься по адресу 192.168.2.1 и все работает. Здесь не так. Нужно руками прописать адреса в файле настроек LibreSDR, а потом еще на usb и Ethernet интерфейсах компьютера, к которому подключен LibreSDR.

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

  • Демон Avahi иногда броадкастит неправильное имя. Когда все работает правильно, можно обращаться к устройству по адресу libre.local. Если же в настройках указать имя хоста pluto, то имя изменится на pluto.local. С этим тоже можно жить. Я всегда обращаюсь явно по ip адресу и также забыл про эту проблему.

Основные доработки

Получив работающую прошивку, я приступил к её модернизации. Сначала решил немного убрать лишнее. В эталонном HDL обнаружились некоторые блоки, которые никак не использовались Pluto и мне они показались лишними. Там есть блок системного ID, его дополнял блок ROM, заполняемый из файла. Еще я обнаружил блок GPIO, который толком ни к чему не был подключен. Эти три блока я просто удалил, что никак не сказалось на работоспособности системы. Поскольку блоки были подключены к шине AXI, то потребовалось ещё изменить количество связей в блоке интерконнекта. Примерно в это время Vivado решил, что у остальных блоков надо поменять адреса. Пришлось восстановить старые адреса вручную.

Настройка адресов
Настройка адресов

После этого я добавил в схему блок AXI UART Lite. Это стандартный блок работы с последовательным портом. Кликаем на блоке и устанавливаем в настройках скорость порта. При добавлении блока Vivado предлагает запустить автоматизацию подключения, с чем я согласился. Происходит автоматическое подключение к шине AXI, настройка адресов, сигнала тактирования и сброса. Вручную нужно лишь протянуть провод соединения сигнала прерывания и соединить его с блоком объединения сигналов прерываний. Тут запоминаем куда подключили, номер прерывания потом указывается в device tree вместе с адресами памяти UART Lite. Последний штрих – делаем вывод TX внешним портом. На этом доработка блочного дизайна закончена. Осталось соединить порт с нужным нам выводом GPIO.

Соединения UART Lite
Соединения UART Lite

Тут пара слов об архитектуре устройств в Vivado. В файле system_top.v указываются все логические сигнальные вход-выходы системы, настраивается тактирование и пр. Для блочного же дизайна еще есть файл system_wrapper.v, где описаны интерфейсы конкретного блочного дизайна. Этот файл можно попросить Vivado создавать и обновлять автоматически, что б он изменялся синхронно с тем, как вы рисуете схему устройства в блочном дизайне. В проект так же можно добавлять прочие файлы под system_top. Но вручную в system_top.v нужно прописать все связи с блочным дизайном и прочими Verilog файлами. (Если что, это радиолюбительский взгляд на систему, который может отличаться от мнения профессиональных разработчиков). Готовую систему нужно привязать к конкретному чипу ПЛИС. Для этого в проекте есть минимум один файл constraints, где указываются номера ножек чипа и как эти ножки связаны с сигналами внутри спроектированной системы. Все логично и не сильно сложно. Если нигде не ошиблись и правильно указали как связаны ножки чипа с логическими сигналами, то в представлении Vivado Elaborated design можно вывести таблицу подключенных пинов и проверить всё ли правильно подключено.

В моем случае я выбрал контакт GPIO1 на плате LibreSDR, он подключен к пину K14. Для такого подключения строки файла constraints выглядят следующим образом:

set_property -dict {PACKAGE_PIN K14 IOSTANDARD LVCMOS33} [get_ports tx_0]

Теперь можно сгенерировать bitstream и экспортировать дизайн в виде файла system_top.xsa. Это делается через меню экспорта Vivado. При экспорте обязательно включаем в файл bitstream.

Следующим шагом дорабатываем device tree, поскольку у нас появилось новое устройство. В моем случае я добавил следующие строки в файл:

axi_uartlite_0:	serial@42C00000 {
			compatible = "xlnx,xps-uartlite-1.00.a";
			reg = <0x42C00000 0x10000>;
			interrupt-parent = <&intc>;
			interrupts = <0 59 4>;
			clock = <100000000>;
		};

Финальным шагом перед сборкой является конфигурирования ядра линукс. Нам нужно, что в ядро влинковался драйвер XILINX UARTLite. Это можно сделать либо через меню конфигурации ядра, либо просто в конфиг файл добавить строки:

# integrate into the kernel
CONFIG_SERIAL_UARTLITE=y
# build as loadable module
CONFIG_SERIAL_UARTLITE=m

Предварительные настройки завершены, можно собирать проект. После запуска новой версии на LibreSDR в линуксе появляется новое устройство /dev/ttyUL0. Его я и буду использовать для передачи информации о настройках частот приема и передачи.

Драйвер iio ad9361 устроен таким образом, что ко всем параметрам чипа возможен доступ из шелл скриптов линукс. Я решил воспользоваться этой возможностью. Например, для получения частоты передачи нужно сделать такой запрос:

cat /sys/bus/iio/devices/iio:device0/out_altvoltage1_TX_LO_frequency

Тут есть один нюанс. Я получаю не частоту, на которую настроился в SDR Console, а частоту LO передатчика. Они могут отличаться вплоть до нескольких мегагерц. В SDR Console частота LO отображается посередине водопада. И настроиться на неё можно нажав кнопку центрирования по частоте. Только в этом случае частота в SDR Console соответствует частоте LO. Но в моем проекте это не так важно, поскольку мне нужна точность до диапазона передачи. 2м и 70см сильно отличаются по частоте и проблем с определением диапазона нет.

Написал в итоге себе такой скрипт:

#!/bin/bash

outport="/dev/ttyUL0"
# infinite loop to send RX and TX LO freqs
while true
do
#    echo "Loop again..."
    rxlo=$(cat /sys/bus/iio/devices/iio:device0/out_altvoltage0_RX_LO_frequency)
    txlo=$(cat /sys/bus/iio/devices/iio:device0/out_altvoltage1_TX_LO_frequency)
    echo -n "T" > $outport
    echo -n $txlo > $outport
    echo -n "R" > $outport
    echo $rxlo > $outport
    sleep 1
done

Последним штрихом является обеспечение автозапуска скрипта при включении питания LibreSDR. Вообще для всяких пользовательских файлов в системе предусмотрена небольшая файловая система /mnt/jffs2. В обычном Pluto есть даже сервис, который ищет скрипт автозапуска на этой файловой системе и стартует его. В проекте hz12opensource по какой-то причине его удалил. Я все вернул обратно и добавил в проект buildroot файлы своих скриптов. Размещение вот такого скрипта на jffs2 обеспечивает мне желаемую функциональность.

Подключение

Софт работает, осталось подключить провода. По схеме LibreSDR должен быть разъем GPIO и рядом микросхема защиты контактов от статики. В моем экземпляре не распаяно ни то, ни другое. Дабы не искушать судьбу и поберечь контакты я решил установить в качестве буфера микросхему цифрового изолятора ADUM1200. У неё два питания отдельно для входов и выходов. Она обеспечивает не только гальваническую развязку выхода, но и позволяет согласовать логические уровни. Напомню, что выход ПЛИС это 3.3В CMOS. При этом ADUM можно запитать снаружи и 3 и 5 вольтами. Удобно. Но только внутри микросхему нужно обеспечить питанием 3.3В. Поиск удобной точки подключения питания занял некоторое время. Конструкция LibreSDR такова, что основные источники питания находятся на верхней части платы, а разъем GPIO – на нижней. Провод питания просто так без вандализма не протянуть. В итоге я нашел одну достаточно крупную микросхему на нижней стороне платы, у которой питание 3.3В. Крупная, это значит точка пайки почти 1х1 миллиметр и у меня хватит навыков туда припаять проводок.  Припаял провода, все заизолировал каптоном. Жгут вывел наружу рядом со слотом SD карты. Для этого немного расширил отверстие, получилось довольно удобно и внешний вид устройства не пострадал.

Подключение GPIO и питания
Подключение GPIO и питания

На этом пока доработки закончены. Если разберусь как, то выведу еще сигнал включения передачи для управления усилителем мощности.

Спасибо за прочтение!

Комментарии (6)


  1. j_aleks
    10.02.2025 00:45

    хорошооо, результаты выложишь?

    ибо ученье-свет...


    1. lesha108 Автор
      10.02.2025 00:45

      Там объемы большие, если что-конкретное интересует - пишите в ЛС


  1. mozg37
    10.02.2025 00:45

    Какая модуляция используется?


    1. lesha108 Автор
      10.02.2025 00:45

      Для RS44 SSB. Спутники с FM редко слушаю


  1. tunelix
    10.02.2025 00:45

    чем LibreSDR лучше hackrf?


    1. lesha108 Автор
      10.02.2025 00:45

      Для меня принципиально что Libre полнодуплексный, т.е. приём и передача идёт одновременно