Как пощупать радиоэфир от 1 МГц до 6 ГГц с помощью open-source проектов

Большинство веб-разработчиков привыкли думать о сети в терминах сокетов и HTTP-запросов. Но как только данные улетают в воздух через Wi-Fi, Bluetooth или брелок от ворот, они становятся обыкновенной электромагнитной волной. Долгое время исследование радиоэфира оставалось уделом специалистов с железками за тысячи долларов.
Ситуация изменилась, когда Майкл Оссманн и команда Great Scott Gadgets выпустили HackRF. Они сделали доступную SDR-платформу (Software Defined Radio) и полностью открыли её схемы, прошивку и исходный код.
Что находится в репозитории
Репозиторий greatscottgadgets/hackrf объединяет все наработки проекта. Это единая точка входа для работы с железом и софтом.
Внутри исходников находятся:
- Чертежи печатных плат и схемы компоновки компонентов
- Исходный код прошивки микроконтроллера LPC43xx и плагинов FPGA
- Системная C-библиотека
libhackrf - Набор консольных утилит для управления устройством
- Исходные файлы документации на Sphinx
Проект написан на C. Документация собирается локально с помощью Sphinx или LaTeX, если нужен готовый PDF-файл.
Погружение в код и утилиты
Софтовая часть проекта делится на два уровня. Первый уровень — библиотека libhackrf. Она берет на себя низкоуровневый обмен данными с USB-контроллером и выдает понятный C API для приема и передачи сэмплов. Второй уровень — консольные утилиты, с которых обычно и начинают работу.
Например, для захвата радиосигнала на частоте 433.92 МГц используется утилита hackrf_transfer:
hackrf_transfer -r capture.raw -f 433920000 -s 8000000
Эта команда записывает эфир с частотой дискретизации 8 мегасэмплов в секунду и сохраняет отсчеты quadrature (I/Q) в бинарный файл. Дальше этот файл можно открыть в программном пакете GNU Radio или Universal Radio Hacker для анализа протокола.
Если нужно просканировать частоты и узнать, какие каналы заняты, пригодится утилита hackrf_sweep:
hackrf_sweep -f 2400:2500 -l 32 -g 20
Она быстро перестраивает частоту синтезатора и выводит данные о мощности сигнала. С ее помощью легко построить спектрограмму помещения за считанные секунды.
Практическая польза для программиста
Зачем программисту без образования радиотехника изучать репозиторий HackRF?
Во-первых, это практический пример того, как строить архитектуру ПО для работы с железом через USB. В коде библиотеки libhackrf видно, как обрабатывать потоки данных в реальном времени без потерь сэмплов.
Во-вторых, репозиторий открывает дорогу к реверс-инжинирингу. С помощью этой платформы разбирают работу радиопультов, датчиков давления в шинах, меток RFID и сигналов спутниковой навигации.
В-третьих, устройство дает возможность писать свои протоколы связи с нуля, используя готовые блоки в GNU Radio или собственный C-код.
Железо и его особенности
У платы есть понятные технические ограничения. Режим работы — полудуплексный. Это означает, что трансивер умеет либо принимать, либо передавать сигнал в конкретный момент времени. Одновременно делать и то и другое плата не умеет.
Разрядность АЦП составляет 8 бит. Для глубокого анализа сложных помех этого мало, но для большинства инженерных задач вполне достаточно. Зато диапазон рабочих частот перекрывает отрезок от 1 МГц до 6 ГГц без необходимости менять модули.
С чего начать изучение
Если хочется погрузиться в проект, стоит начать с официальной документации на Read the Docs. При желании её легко собрать локально из папки docs:
cd docs
make html
Для сборки PDF-версии на Ubuntu понадобится установить пакеты LaTeX:
sudo apt install latexmk texlive-latex-extra
cd docs
make latexpdf
Сообщество проекта живет в Discord и почтовых рассылках. Разработчики честно отмечают в README, что разбор тикетов с меткой технической поддержки занимает до двух недель. Если вы нашли баг или хотите внести вклад в код, заводите Issue на GitHub.
HackRF остается одной из самых понятных и открытых баз для тех, кто хочет выйти за пределы привычного софта и поработать с радиоэфиром напрямую.
