SDR и HackRF для начинающих

Оглавление

1. Что такое SDR — Software-defined radio

2. Какое железо выбрать для SDR

3. HackRF

4. Меры предосторожности для HackRF

5. Значение кнопок и индикаторов HackRF

6. Как HackRF вывести из состояния «кирпича»

7. Кабель для HackRF — почему крайне желательно кабель с шумоподавлением

8. Антенны для HackRF

9. Программное обеспечение, поддерживающее HackRF

10. Инструменты HackRF

11. Как установить драйвер, инструменты HackRF и SDR утилиты

12. Как обновить прошивку HackRF

13. Быстрый старт с HackRF. Первый приём и передача данных в HackRF

14. Вопросы и ответы по HackRF

15. Справка по hackrf_transfer

16. Справка по hackrf_spiflash и hackrf_cpldjtag

17. Частота, децибелы и прочие физические термины в SDR

18. Материалы и видео по SDR и HackRF


Я решил попробовать что-то новое (сколько уже можно «теребить» Wi-Fi?!) и в качестве этого нового выбрал SDR и HackRF, то есть радио (FM, рации, сигналы от беспроводных клавиатур и мышей и прочее). Саму железяку (HackRF) я ещё не купил, но решил заранее подготовиться в плане документации. Я в плане SDR абсолютный новичок (у меня был давно Behold тюнер с FM и TV, но не думаю, что этот опыт мне пригодится в данной ситуации). То есть в этой теме я буду разбираться с самого-самого начала — если вам также это интересно и вы тоже начинаете с абсолютного нуля, то эта заметка должна стать для вас интересной.

Что такое SDR — Software-defined radio

Если коротко (как я себе это представляю): SDR (программно определяемая радиосистема) это когда все характеристики будущей радиоволны (например, её частота) создаются в компьютере, и затем такая «нарисованная» в компьютере волна отправляется на внешнюю железяку, чтобы быть отправленной как настоящая радиоволна. Благодаря такому подходу достигается большая гибкость в плане того, какие характеристики можно присвоить волне — понятное дело, что отправляющая железяка должна им соответствовать.

А вот определение и Википедии:

Программно определяемая радиосистема (англ. Software-defined radio, SDR) — радиопередатчик и/или радиоприёмник, использующий технологию, позволяющую с помощью программного обеспечения устанавливать или изменять рабочие радиочастотные параметры, включая, в частности, диапазон частот, тип модуляции или выходную мощность, за исключением изменения рабочих параметров, используемых в ходе обычной предварительно определённой работы с предварительными установками радиоустройства, согласно той или иной спецификации или системы.

ПОР выполняет значительную часть цифровой обработки сигналов на обычном персональном компьютере или на ПЛИС. Целью такой схемы является радиоприёмник или радиопередатчик произвольных радиосистем, изменяемый путём программной переконфигурации (отсюда происходит альтернативное наименование таких систем - программно конфигурируемые).

Ну, то есть, это такое радио, в котором для смены частоты не нужно крутить колёсико.

Какое железо выбрать для SDR

Бытовых (любительских) SDR, которые можно просто купить в магазине, очень много: Funcube Dongle, RTL-SDR, USRP, OsmoSDR, BladeRF, HackRF, AirSpy, устройства LimeSDR USB Type-A и другие. Вот здесь собран большой список с их характеристиками: https://en.wikipedia.org/wiki/List_of_software-defined_radios

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

HackRF не дешёвый, его цена вместе с доставкой примерно $150. Есть намного более дешёвые модели, но, понятно, и с более скромными характеристиками (меньше поддерживаемых частот). Есть более продвинутые чем HackRF модели, но их цена (для меня) слишком высокая. Возможно, если вас интересует не весь спектр частот, а какие-то определённые частоты, то вы сможете найти другое устройство, которое будет работать лучше с этими частотами или стоить дешевле чем HackRF. HackRF — это довольно универсальное устройство с доступной ценой.

HackRF

HackRF One — это дешёвая, с открытым исходным кодом платформа Software Defined Radio.

HackRF One имеет следующие характеристики:

  • Диапазон частот: 1 MHz – 6 GHz
  • Полоса пропускания: 20 MHz
  • RX ADC bits (биты на вход): 8
  • TX DAC bits (биты на выход): 8
  • TX кабель: Да
  • Гнездо антенны: SMA female
  • Дискретизация: 8 – 20 Msps
  • Панадаптеры / Приемники: 0/1
  • Полудуплексный ресивер
  • Увеличение модности приёма и передачи, а также фильтр частот настраивается программно
  • Программно-констролируемая мощность порта антенны: (50 mA на 3.3 V)
  • Штырьевой разъём для подключения дополнительных плат увеличивающих функциональность
  • Интерфейс хоста: USB 2.0
  • Поддерживаемые операционные системы: Windows, Linux, Mac.

Как можно увидеть, у устройства довольно медленный интерфейс USB 2.0, а также частота пропускания только 20 MHz, то есть это не самый «ТОП». Но для обучения этого хватит. К тому же, за последнее время на устройство сильно снизилась цена. И ещё, хотя в характеристиках указана поддерживаемая частота 1 MHz – 6 GHz, но можно выйти за этот диапазон чуть ниже и чуть выше.

У этого устройства прошивка с открытым исходным кодом. Оно совместимо с GNU Radio, SDR# и другими программами. Хорошая совместимость с Linux.

Меры предосторожности для HackRF

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

Либо вместо антенны используйте заглушку — имеется ввиду не пластиковые красные заглушки, которые защищают от пыли, а заглушку с функцией потребления нагрузки — золотистая «гайка», которая наворачивается на гнездо антенны

У прибора три одинаковых SMA female разъёма: два на одной стороне и один на другой стороне. Разъём для антенны это тот, который размещён один (другие два предназначены для синхронизации нескольких устройств HackRF).

Значение кнопок и индикаторов HackRF

При подключении к компьютеру HackRF на нём загораются индикаторы.

Первые три индикатора:

  • 3V3
  • 1V8
  • RF

Это индикаторы питания различных элементов. Они могут гаснуть при включении режима экономии энергии. 1V8 и RF могут гаснуть, если HackRF ничего не делает. Но при работе HackRF (приём и передача данных) все три должны гореть. Если какой-либо из них не горит, то это означает, что имеется проблема.

Следующий:

  • USB

Когда он горит, то это означает, что компьютер «общается» с HackRF как с USB устройством. Этот индикатор загорается чуть позднее первых трёх.

Последние два:

  • RX — означает операции приёма данных
  • TX — означает операции передачи данных

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

Что касается цветов, то они вообще ничего не означают: цвета разные только чтобы вы могли отличать светодиоды друг от друга.

Теперь рассмотрим кнопки.

Первая кнопка:

  • RESET — сбрасывает, перезагружает микроконтроллер. Аналог отключения и подключения USB шнура.

Следующая кнопка:

  • DFU — режим обновления прошивки. На самом деле при обновлении прошивки этот режим не нужен. HackRF может обновлять свою прошивку без перехода в этот режим. Главная функция этой кнопки — это раскирпичивание устройства.

Эта кнопка функционально только при включении устройства или нажатии кнопки RESET. Всё остальное время эта кнопка не выполняет никаких функций, поэтому при установлении пользовательской прошивки этой кнопке можно назначить какую-нибудь функцию ввода.

Как HackRF вывести из состояния «кирпича»

Если вы прошили устройство так, что оно больше не работает, то вам нужно загрузиться используя DFU загрузчик — он прописан в ROM, поэтому его невозможно испортить. Для перехода в режим DFU вам нужно зажать эту кнопку, всё ещё удерживая эту кнопку отключить USB кабель и, продолжая удерживать эту кнопку, вновь подключить USB кабель. Если загорится только индикатор 3V3, но не загорятся другие, это означает, что вы успешно вошли в DFU режим

Ещё один способ перейти в режим DFU, это зажать кнопку DFU и при нажатой кнопке нажать и отпустить кнопку RESET.

В этом режиме вы можете использовать соответствующую программу на вашем компьютере для перепрошивки HackRF.

Кабель для HackRF — почему крайне желательно кабель с шумоподавлением

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

Выбранный вами USB может иметь большое влияние на то, что вы видите используя ваш HackRF, особенно используя его на частотах в районе 120 и 480 MHz, на которых USB делает всю свою работу.

  1. Используйте экранированный USB кабель. Лучший способ гарантировать радиочастотные помехи от USB — использовать неэкранированный кабель. Вы можете проверить, что ваш кабель экранирован, используя тестер непрерывности, чтобы убедиться, что экран на одном разъёме имеет непрерывность с экраном на разъёме на другом конце кабеля.
  2. Используйте короткий USB-кабель. Использование чего-либо большего, чем 6-футовый кабель, может привести к плохим результатам. Чем длиннее кабель, тем больше потерь можно ожидать, и при создании этого поста был опробован 15-футовый кабель, и в результате HackRF работал только вполсилы.
  3. Для достижения наилучших результатов выберите кабель с ферритовым сердечником. Эти кабели обычно рекламируются как шумопоглощающие и распознаются по утолщению (пластиковому блоку) на одном из концов.

Снимок экрана до и после перехода на шумоподавляющий кабель:

Видео с тестами по данному вопросу:

Пример такого защищённого кабеля: 6ft USB 2.0 A Male to Micro 5pin Male 28/24AWG Cable w/ Ferrite Core Gold Plated

Его характеристики

  • Позолоченные разъёмы для коррозионной стойкости, обеспечивающие стабильную и надёжную проводимость
  • Ферритовый сердечник для фильтрации шумового сигнала и уменьшения ошибок при передаче
  • Рельефная конструкция для гибкого перемещения, долговечности и удобства
  • Уменьшает перекрёстные помехи и помехи с алюминиевыми контактами
  • Полностью экранированный для защиты от внешних помех
  • Длина 6 футов (то есть 1.83 метра).

Сам кабель недорогой, но дорогая доставка из США.

Аналогичные дешёвые варианты из Китая с бесплатной доставкой, правда без позолоченных коннекторов:

ИМХО, позолоченные контакты важны для недопущения коррозии, для защиты от помех это особо не влияет (пока не начнётся коррозия). То есть можно взять и китайские без позолоченных контактов — лишь бы другие характеристики об экранировании соответствовали действительности…

Дешёвый с позолоченными контактами и экранированием, но короткий: 1.5ft USB 2.0 A Male to Micro 5pin Male 28/24AWG Cable w/ Ferrite Core Gold 5456

Либо ищите по поисковому запросу «Micro USB gold ferrite shielded» или «Micro USB ferrite shielded».

Антенны для HackRF

В комплекте с HackRF идёт телескопическая антенна — она неплохая для начала. Но для определённых задач вы можете подобрать антенну получше.

У HackRF SMA гнездо, а не RP-SMA! То есть в гнезде антенны нет штырька — там есть дырочка. Пример распространённых RP-SMA антенн — это Wi-Fi антенны — у них тоже нет штырька — у их тоже дырочка. Поэтому если вы прикрутите Wi-Fi антенну к HackRF, то она действительно прикрутится и визуально будет казаться, что она подключена. НО: на самом деле она не будет подсоединена, поскольку отсутствует соединительный сердечник.

Таким образом — вам нужны антенны со штырьком. Либо используйте переходник с RP-SMA антенны — они имеются.

Пример телескопической антенны, которая подойдёт для HackRF One — это ANT500 (по техническим характеристикам она также подходит для HackRF).

Обратите внимание на сердечник:

Программное обеспечение, поддерживающее HackRF

Здесь список приложений, о которых известно, что они работают с HackRF. Приложения разделены на три секции:

  • программное обеспечение на основе GNU Radio;
  • те, которые имеют прямую поддержку
  • те, которые могут работать с данными от HackRF

Основывающиеся на GNU Radio

Прямая поддержка

Могут использовать данные HackRF

  • Inspectrum (Инструмент анализа захвата с расширенными функциями): https://github.com/miek/inspectrum
  • Baudline (может просматривать/обрабатывать данные HackRF, например, hackrf_transfer): http://www.baudline.com/

Обработка данных HackRF

  • Matlab
fid = open('samples.bin', 'r');
len = 1000; % 1000 samples
y = fread(fid, 2*len, 'int8');
y = y(1:2:end) + 1j*y(2:2:end);
fclose(fid)

Инструменты HackRF

В дополнении к сторонним инструментам, которые поддерживают HackRF, разработчики устройства предоставляют некоторые инструменты командной строки для взаимодействия с HackRF. Информацию о том, как пользоваться каждым инструментом, смотрите в справке соответствующей программы, например:

hackrf_transfer -h

или в страницах руководства.

Первые два инструмента (hackrf_info и hackrf_transfer) должны покрывать большинство задач. Оставшиеся инструменты представлены для отладки и общего интереса; будьте осторожны, при неправильном использовании они могут навредить HackRF.

  • hackrf_info

Считывает такую информацию об устройстве с HackRF как серийный номер и версию прошивки.

  • hackrf_transfer

Отправляет и получает сигналы используя HackRF. Ввод/вывод может быть 8-битным знаковым квадратурным файлом или файлом WAV.

  • hackrf_max2837

Чтение и запись регистров в микросхеме приемопередатчика Maxim 2837. Для большинства целей tx/rx (приёма-передачи) hackrf_transfer или другие инструменты позаботятся об этом за вас.

  • hackrf_rffc5071

Чтение и запись регистров в микросхеме RFFC5071. Как указано выше, это только для любопытства или отладки, большинство инструментов позаботятся об этих настройках автоматически.

  • hackrf_si5351c

Чтение и запись регистров в чипе тактового генератора Silicon Labs Si5351C. Это также должно быть ненужным для большинства операций.

  • hackrf_spiflash

Инструмент для записи в HackRF новой прошивки. Больше всего используется для обновления прошивки.

  • hackrf_cpldjtag

Инструмент для обновления CPLD на HackRF. Также иногда используется при обновлении прошивки.

Как установить драйвер, инструменты HackRF и SDR утилиты

В этом разделе подсказки по установке программного обеспечения для определённых операционных систем и дистрибутивов Linux.

Установка драйверов и утилит общего назначения

Большинству пользователей настоятельно рекомендуется, если вы не преследуете целей разработки или тестирования новых функций для HackRF, использовать собранные для вашей системы пакеты и устанавливать их с помощью менеджера пакетов, имеющегося для вашей операционной системы.

Linux

  • Kali Linux, Ubuntu, Debian, Linux Mint
sudo apt install hackrf gqrx-sdr
  • Fedora / Red Hat
sudo dnf install gnuradio gr-osmosdr hackrf gqrx -y
  • Gentoo Linux
emerge hackrf-tools
USE="hackrf" emerge gr-osmosdr
  • Arch Linux
sudo pacman -S hackrf gnuradio gnuradio-osmosdr gnuradio-companion

OS X (10.5+)

  • MacPorts
sudo port install gr-osmosdr
  • Homebrew
brew install gr-osmosdr

Windows

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

FreeBSD

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

pkg install hackrf

Вы можете собрать и установить с ports:

cd /usr/ports/comms/hackrf
make install

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

Linux / OS X / *BSD

  • Подготовка вашей системы

Вначале убедитесь, что ваша система обновлена используя метод обновления представленной в вашей операционной системе.

  • Установка используя PyBOMBS

Проект GNU Radio имеет сборочную систему, которая покрывает ключевые библиотеки, драйвера для SDR железа и многие из модулей дерева. PyBOMBs позаботиться для вас в установке зависимостей.

  • Сборка инструментов HackRF из исходников

Получите исходный код инструментов HackRF либо из архива выпуска, либо из git:

git clone https://github.com/mossmann/hackrf.git

После загрузки исходного кода, инструменты хоста могут быть собраны следующим образом:

cd hackrf/host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

Если у вас есть HackRF, то вам может понадобиться обновить прошивку, чтобы она соответствовала версии инструментов хоста.

Windows

Примечание для сборки Windows: Вам всегда следует выполнять hackrf-tools из командной строки Windows, а не из оболочки Cygwin или MinGW поскольку Cygwin/MinGW некорректно обрабатывают Ctrl+C и особенно для hackrf_transfer нажатие Ctrl+C (отмена) неправильно остановит программу и файл данных будет повреждён.

  • Для Visual Studio 2015 x64

Создайте определение библиотеки для MSVC ссылкой

C:\fftw-3.3.5-dll64> lib /machine:x64 /def:libfftw3f-3.def

Компиляция

c:\hackrf\host\build> cmake ../ -G "Visual Studio 14 2015 Win64" \
-DLIBUSB_INCLUDE_DIR=c:\libusb-1.0.21\libusb \
-DLIBUSB_LIBRARIES=c:\libusb-1.0.21\MS64\dll\lib\libusb-1.0.lib \
-DTHREADS_PTHREADS_INCLUDE_DIR=c:\pthreads-w32-2-9-1-release\Pre-built.2\include \
-DTHREADS_PTHREADS_WIN32_LIBRARY=c:\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64\pthreadVC2.lib \
-DFFTW_INCLUDES=C:\fftw-3.3.5-dll64 \
-DFFTW_LIBRARIES=C:\fftw-3.3.5-dll64\libfftw3f-3.lib

CMake создаст файл solution с именем HackRF.sln и ряд файлов проекта, которые могут быть собраны с помощью msbuild следующим образом:

c:\hackrf\host\build> msbuild HackRF.sln
  • Cygwin
mkdir host/build
cd host/build
cmake ../ -G "Unix Makefiles" -DCMAKE_LEGACY_CYGWIN_WIN32=1 -DLIBUSB_INCLUDE_DIR=/usr/local/include/libusb-1.0/
make
make install
  • MinGW
mkdir host/build
cd host/build
cmake ../ -G "MSYS Makefiles" -DLIBUSB_INCLUDE_DIR=/usr/local/include/libusb-1.0/
make
make install

Как обновить прошивку HackRF

Устройства HackRF поставляются с микропрограммой на флэш-памяти SPI и с битовым потоком, запрограммированным на CPLD. Прошивка может быть обновлена только с помощью USB-кабеля и хост-компьютера.

Эти инструкции позволяют обновить микропрограмму и поток битов CPLD, чтобы воспользоваться новыми функциями или исправлениями ошибок.

Если вам трудно заставить этот процесс работать из вашей родной операционной системы, вы можете использовать Pentoo или GNU Radio Live DVD для выполнения обновлений.

Шаг 1: Обновление прошивки SPI Flash

Чтобы обновить прошивку на работающем HackRF One, используйте программу hackrf_spiflash:

hackrf_spiflash -w hackrf_one_usb.bin

Вы можете найти двоичный файл прошивки (hackrf_one_usb.bin) в каталоге firmware-bin последней версии пакета или вы можете скомпилировать свой собственный из исходного кода. Для Jawbreaker используйте hackrf_jawbreaker_usb.bin. Если вы компилируете из исходного кода, файл будет называться hackrf_usb.bin.

Программа hackrf_spiflash является частью hackrf-tools.

При записи образа прошивки на SPI-флэш-память обязательно выберите прошивку с именем файла, оканчивающимся на «.bin».

После записи прошивки на SPI-флешку вам может понадобиться выполнить сброс устройства HackRF, нажав кнопку RESET или отключив и снова подключив его.

Если вы получили ошибку, в которой упоминается HACKRF_ERROR_NOT_FOUND, ознакомьтесь с FAQ. Часто это проблема разрешений, которая может быть быстро решена.

Шаг 2: Обновление CPLD

Для обновления до последней версии образа CPLD сначала обновите прошивку SPI flash, libhackrf и hackrf-tools. Затем:


hackrf_cpldjtag -x firmware/cpld/sgpio_if/default.xsvf

Через несколько секунд три светодиода должны начать мигать. Это указывает на то, что CPLD был запрограммирован успешно. Перезагрузите устройство HackRF, нажав кнопку RESET или отсоединив и снова подключив его.

Только при необходимости: загрузка DFU

Режим загрузки DFU обычно требуется только в том случае, если прошивка не работает должным образом или никогда не была установлена.

Микроконтроллер LPC4330 на HackRF способен загружаться из нескольких различных источников кода. По умолчанию HackRF загружается с флэш-памяти SPI (SPIFI). Он также может загружать HackRF в режиме загрузки DFU (USB). В режиме загрузки DFU HackRF будет ждать, пока код будет доставлен с использованием стандарта DFU (обновление прошивки устройства) через USB, а затем выполнит этот код из ОЗУ. SPIFI обычно не используется и не изменяется в режиме DFU.

Чтобы запустить HackRF One в режиме DFU, удерживайте нажатой кнопку DFU при включении или при нажатии и отпускании кнопки RESET. Отпустите кнопку DFU после того, как загорится светодиод 3V3. Светодиод 1V8 должен оставаться выключенным. На этом этапе HackRF One готов к приёму прошивки через USB.

В режиме DFU вам следует использовать только образ прошивки с именем файла, оканчивающимся на «.dfu», а не на прошивку, оканчивающуюся на «.bin».

Только при необходимости: восстановление прошивки SPI Flash

Если встроенное программное обеспечение во флэш-памяти SPI было повреждено или вы программируете самодельный HackRF в первый раз, вы не сможете сразу использовать программу hackrf_spiflash, как указано в приведённой выше процедуре. Выполните следующие шаги:

  1. Следуйте инструкциям по загрузке DFU, чтобы запустить HackRF в режиме загрузки DFU.
  2. Напечатайте:
dfu-util --device 1fc9:000c --alt 0 --download hackrf_one_usb.dfu

для загрузки прошивки из пакета релиза в оперативную память. Если у вас есть Jawbreaker, используйте вместо этого hackrf_jawbreaker_usb.dfu. В качестве альтернативы используйте

make -e BOARD=HACKRF_ONE RUN_FROM=RAM program
  • для загрузки прошивки в оперативную память и её запуска.
  1. Выполните процедуру обновления прошивки SPI флэш прошивки как показано выше, чтобы записать образ прошивки «.bin» во флэш-память SPI.

Получение DFU-Util

При новых установках вашей ОС вам может потребоваться получить копию DFU-Util. Для большинства дистрибутивов Linux он должен быть доступен в виде пакета, например, в Debian/Ubuntu

sudo apt install dfu-util

Для Arch Linux/BlackArch:

sudo pacman -S dfu-util

Если вы используете платформу без пакета dfu-util, инструкцию по сборке можно найти здесь на странице сборки исходного кода dfu-util:

cd ~
sudo apt build-dep dfu-util
sudo apt install libusb-1.0-0-dev
git clone git://git.code.sf.net/p/dfu-util/dfu-util
cd dfu-util
./autogen.sh
./configure
make
sudo make install

Теперь у вас будет установлена текущая версия DFU Util в вашей системе.

Быстрый старт с HackRF. Первый приём и передача данных в HackRF

Данные команды показаны для Linux.

Для просмотра информации о вашем устройстве, а также чтобы убедиться, что Linux правильно определяет HackRF и готов работать с ним, выполните команду:

hackrf_info

Для выполнения тестового получения данных запустим hackrf_transfer с опцией -r после которой укажем /dev/null, чтобы данные не сохранялись на компьютер:

hackrf_transfer -r /dev/null

Будет использоваться скорость по умолчанию — 10 миллионов бит в секунду. Максимальная скорость HackRF равна 20 мегабитам в секунду, чтобы проверить эту скорость запустите команду с опцией -s, после которой укажите скорость в битах в секунду:

hackrf_transfer -r /dev/null -s 20000000

Некоторые устройства HackRF на некоторых компьютерах могут показывать предельную скорость равную 21500000. Чтобы проверить, поддерживает ли ваш компьютер такую скорость, выполните команду:

hackrf_transfer -r /dev/null -s 21500000

Главное, от чего зависит скорость — это USB разъём. На одном и том же компьютере скорость в разных USB гнёздах может быть разная. Как минимум ваш компьютер должен поддерживать скорость по умолчанию, то есть 10 мегабит в секунду.

Для передачи данных используется опция -t:

hackrf_transfer -t /dev/zero

С hackrf_transfer вы обычно будете использовать опцию -f, после которой нужно указывать частоту в Герцах. Допустимые значения с 0MHz до 7250MHz.

Вопросы и ответы по HackRF

Я не могу получить доступ к моей HackRF под Linux

Вопрос:

При запуске hackrf_info или любой другой команды, которая пытается общаться с HackRF, я получаю следующее сообщение ошибки, хотя плата, кажется, правильно определена ядром Linux:

hackrf_open() failed: HACKRF_ERROR_NOT_FOUND (-5)

или:

hackrf_open() failed: HACKRF_ERROR_LIBUSB (-1000)

Ответ:

Используйте последние версии

Сначала убедитесь, что вы используете последнюю версию libhackrf и hackrf-tools. Например, HackRF One поддерживается только в версии 2014.04.1 или новее. Затем проверьте, успешно ли работает hackrf_info при запуске от имени пользователя root. Если это так, то вашему другому пользователю не хватает разрешения.

Проблема с разрешением

Обычный пользователь в Linux не имеет прав доступа к произвольным USB-устройствам из соображений безопасности. Первым решением было бы запустить каждую команду, которая пытается получить доступ к HackRF от имени пользователя root, что не рекомендуется для ежедневного использования, но, по крайней мере, это покажет, действительно ли работает ваш HackRF и проблема только в разрешениях.

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

(Следующие вещи были протестированы в Ubuntu и Gentoo и, возможно, требуют адаптации для других дистрибутивов Linux. В частности, для этой цели в вашем дистрибутиве может быть группа с именем, отличным от plugdev.)

Для этого вам нужно создать новый файл правил в папке /etc/udev/rules.d. Я проверил мой 52-hackrf.rules. Вот содержание:

ATTR{idVendor}=="1d50", ATTR{idProduct}=="604b", SYMLINK+="hackrf-jawbreaker-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="hackrf-dfu-%k", MODE="660", GROUP="plugdev"

Содержимое файла инструктирует udev искать устройства с идентификатором поставщика и идентификатором продукта, совпадающими с устройствами HackRF. Затем он устанавливает разрешения UNIX 660, а группе - plugdev и создаёт символическую ссылку в /dev на устройство.

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

sudo udevadm control --reload-rules

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

PyBOMBs

Если вы используете PyBOMBS, обратите внимание, что рецепт HackRF преднамеренно не устанавливает правила udev, чтобы избежать сбоев установки при запуске без полномочий root.

Энергосбережение и USB-автоподвеска

Распространённой проблемой для пользователей ноутбуков может быть управление питанием, включающее автоматическое отключение USB, что вероятно, если hackrf_info возвращает ошибку

hackrf_open() failed: Input/Output Error (-1000)

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

LIBUSB_DEBUG=3 hackrf_info

и убедиться, что причина ошибки это

broken pipe

Чтобы это исправить, вам нужно отключить USB AutoSuspend для HackRF. Если вы используете управление питанием TLP, вы можете добавить USB VID/PID HackRF в строку USB_BLACKLIST в /etc/default/tlp:

USB_BLACKLIST="1d50:604b 1d50:6089 1d50:cc15 1fc9:000c"

и перезапустите TLP с помощью

tlp restart

Модуль ядра hackrf

Если команда hackrf_info завершилась неудачно с сообщением об ошибке

hackrf_open() .. HACKRF_ERROR_NOT_FOUND

это также может быть проблемой драйвера ядра. В некоторых версиях Ubuntu, таких как Ubuntu 15.04 с установленным gnuradio, предварительно установлен драйвер ядра. В этом случае когда вы подключаете модуль HackRF то, вероятно, вы получите некоторые сообщения ядра системного журнала, такие как:

kernel: [ 8932.297074] hackrf 1-9.4:1.0: Board ID: 02
kernel: [ 8932.297076] hackrf 1-9.4:1.0: Firmware version: 2014.08.1
kernel: [ 8932.297261] hackrf 1-9.4:1.0: Registered as swradio0
kernel: [ 8932.297262] hackrf 1-9.4:1.0: SDR API is still slightly experimental and functionality changes may follow

Используйте команду

dmesg

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

kernel: [ 8967.263268] usb 1-9.4: usbfs: interface 0 claimed by hackrf while 'hackrf_info' sets config #1

То, чтобы решить эту проблему, проверьте под учётной записью root, есть ли загруженный модуль ядра hackrf:

lsmod | grep hackrf

Если есть модуль ядра hackrf, попробуйте выгрузить его с помощью

rmmod hackrf

Эту команду вы также должны выполнить как root. После этого команда hackrf_info (и все остальное, что связано с hackrf) должна сработать, а сообщения syslog usbfs должны исчезнуть.

После нажатия кнопки RESET или отключения и подключения USB кабеля этот модуль ядра снова загрузится и снова заблокирует доступ. Чтобы решить эту проблему, вы должны поместить в чёрный список модуль ядра hackrf в /etc/modprobe.d/blacklist(.conf). Текущее имя файла для чёрного списка может отличаться, это зависит от версии вашего дистрибутива Linux. В Ubuntu 15.04 он находится в /etc/modprobe.d/blacklist.conf. Откройте этот файл под учётной записью root с помощью текстового редактора и добавьте следующую строку в конце:

blacklist hackrf

После перезагрузки системы, чтобы заставить работать обновленный modprobe, hackrf работал под Ubuntu 15.04 с исходными пакетами (версия прошивки: 2014.08.1) из коробки.

hackrf_set_sample_rate fails (не удаётся установить частоту дискретизации)

Вопрос:

Я пытаюсь запустить hackrf_transfer и hackrf_set_sample_rate завершается неудачей (не удаётся установить частоту дискретизации). Вызов libusb_control_transfer в hackrf_set_sample_rate_manual возвращается с LIBUSB_ERROR_PIPE.

Ответ:

Следуйте инструкции, чтобы обновить прошивку.

Что это за большой пик в центре моего спектра?

Вопрос:

Я вижу большой всплеск в центре моего FFT-дисплея, независимо от частоты, на которую настроен мой HackRF. Что-то не так с моим HackRF?

Ответ:

Вы видите смещение DC (постоянного тока) (или компонент, или смещение). Это неизменный аспект сигнала, в отличие от «чередующейся» части сигнала AC (переменного тока), которая изменяется со временем. Взять, к примеру, сигнал, представленный цифровой последовательностью:

-2, -1, 1, 6, 8, 9, 8, 6, 1, -1, -2, -1, 1, 6, 8, 9, 8, 6, 1, -1, -2, -1, 1, 6, 8, 9, 8, 6, 1, -1

Этот периодический сигнал содержит сильный синусоидальный компонент, охватывающий от -2 до 9. Если бы вы построили спектр этого сигнала, вы бы увидели один пик на частоте этой синусоиды и второй пик на 0 Гц (постоянный ток). Если бы сигнал охватывал значения от -2 до 2 (с центром около нуля), смещения постоянного тока не было бы. Так как он сосредоточен около 3,5 (число на полпути между -2 и 9), есть компонент постоянного тока.

Сэмплы, произведённые HackRF, являются измерениями радио осциллограмм, но метод измерения склонен к смещению постоянного тока, введённому HackRF. Это артефакт измерительной системы, а не указание на принятый радиосигнал. Смещение постоянного тока не является уникальным для HackRF; это является общим для всех систем quadrature sampling.

В прошивке HackRF (до выпуска 2013.06.1) была ошибка, из-за которой смещение постоянного тока было хуже, чем должно было быть. В худшем случае некоторые Jawbreaker испытывали смещение постоянного тока, которое в течение нескольких секунд работы давало сильный экстремум. Эта ошибка была исправлена. Исправление уменьшает смещение постоянного тока, но не устраняет его полностью. Это то, с чем вам придётся жить при использовании любой системы quadrature sampling, например HackRF.

Высокое смещение постоянного тока также является одним из немногих признаков, которые могут быть вызваны несоответствием версии программного обеспечения. Общая проблема заключается в том, что люди запускают старую версию gr-osmosdr с более новой прошивкой.

Как мне справиться со смещением постоянного тока?

Вопрос:

Хорошо, теперь, когда я понимаю, что это за большой пик в середине моего спектра, как мне справиться с этим?

Ответ:

Есть несколько вариантов:

  1. Игнорируй это. Для многих приложений это не проблема. Вы научитесь игнорировать это.
  2. Избегай это. Лучший способ справиться со смещением постоянного тока для большинства приложений — использовать настройку смещения; вместо того, чтобы настраиваться на свою конкретную интересующую частоту, настройтесь на близлежащую частоту, чтобы весь интересующий вас сигнал был смещён от 0 Гц, но все ещё в пределах принятой полосы пропускания. Если ваш алгоритм лучше всего работает с вашим сигналом с центром в 0 Гц (многие это делают), вы можете сместить частоту в цифровой области, переместив интересующий вас сигнал в 0 Гц и смещение постоянного тока от 0 Гц. Высокая максимальная частота дискретизации HackRF может быть большой помощью, поскольку она позволяет использовать настройку смещения даже для относительно широкополосных сигналов.
  3. Исправь это. Существуют различные способы удаления смещения постоянного тока в программном обеспечении. Однако эти методы могут ухудшать части сигнала, близкие к 0 Гц. Это может выглядеть лучше, но это не обязательно означает, что это лучше, например, с точки зрения алгоритма демодулятора. Тем не менее исправление смещения постоянного тока часто является хорошим выбором.

Осмысление настроек усиления

Вопрос:

Какие регуляторы усиления предоставляются HackRF?

Ответ:

HackRF (как Jawbreaker, так и One) предоставляет три разных аналоговых регулятора на RX и два на TX. Три регулятора усиления RX это этапы: RF («amp», 0 или 14 дБ), IF («lna», от 0 до 40 дБ с шагом 8 дБ) и основная полоса («vga», от 0 до 62 дБ с шагом в 2 дБ). Два регулятора усиления TX находятся на этапе RF (ВЧ) (0 или 14 дБ) и IF (ПЧ) (от 0 до 47 дБ с шагом 1 дБ).

Вопросы:

Почему настройка ВЧ усиления ограничена двумя значениями?

Ответ:

HackRF имеет два RF усилителя рядом с антенным портом, один для TX и один для RX. Эти усилители имеют две настройки: вкл или выкл. В выключенном состоянии усилители полностью обойдены. При включении они номинально обеспечивают усиление 14 дБ, но фактическая величина усиления зависит от частоты. В общем, ожидайте меньшего усиления на более высоких частотах. Для точного управления усилением используйте параметры усиления IF (ПЧ) и/или основной полосы.

Вопрос:

Как мне установить регуляторы усиления для RX?

Ответ:

Хорошая настройка по умолчанию для начала: RF=0 (выкл.), IF=16, baseband=16. Увеличьте или уменьшите регуляторы ПЧ (IF) и усиления основной полосы (baseband) частот примерно одинаково, чтобы найти наилучшие настройки для вашей ситуации. Включите RF amp, если вам нужна помощь в обнаружении слабых сигналов. Если ваши настройки усиления слишком низкие, ваш сигнал может быть погружен в шум. Если одна или несколько ваших настроек усиления слишком высоки, вы можете увидеть искажения (ищите неожиданные частоты, которые появляются, когда вы увеличиваете усиление), или минимальный уровень шума может усиливаться больше, чем ваш сигнал.

Системные Требования

Вопрос:

Каковы минимальные системные требования для использования HackRF?

Ответ:

Наиболее важным требованием является подача 500 мА при 5 В постоянного тока на ваш HackRF через порт USB. Если ваш хост-компьютер испытывает трудности с выполнением этого требования, вам может потребоваться использовать USB-концентратор с питанием.

Большинство пользователей захотят передавать данные в или из HackRF с высокой скоростью. Для этого требуется, чтобы хост-компьютер поддерживал Hi-Speed USB. Некоторые высокоскоростные USB-хосты лучше других, и на вашем компьютере может быть несколько хост-контроллеров. Если вам трудно работать с HackRF с высокой частотой дискретизации (от 10 до 20 Мбит/с), попробуйте использовать другой порт USB на вашем компьютере. Если возможно, расположите все так, чтобы HackRF был единственным устройством в шине.

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

Вопрос:

Почему HackRF не работает должным образом с виртуальной машиной (VM)?

Ответ:

HackRF требует возможности передавать данные с очень высокой скоростью через USB. К сожалению, программное обеспечение VM обычно имеет проблемы с непрерывной высокоскоростной передачей данных по USB.

Есть некоторые известные ошибки с реализацией USB прошивки HackRF. Возможно, что исправление этих ошибок улучшит способность работать с HackRF с виртуальной машиной, но весьма вероятно, что работа с более высокой частотой дискретизации все ещё будет ограничена.

Светодиоды

Вопрос:

Какие светодиоды должны светиться?

Ответ:

Когда HackRF One подключён к USB-хосту, должны загореться четыре светодиода: 3V3, 1V8, RF и USB. Светодиоды 3V3, 1V8 и RF указывают на то, что внутренние источники питания работают правильно. Индикатор USB указывает, что HackRF One связывается с хостом через USB.

Светодиоды RX и TX указывают, что в данный момент выполняется операция приёма или передачи.

Вопрос:

Почему светодиоды разные цвета?

Ответ:

Каждый светодиод имеет один цвет. На HackRF One нет разноцветных светодиодов. Смежные светодиоды имеют разные цвета, чтобы их было легче отличить друг от друга. Цвета ничего не значат.

Полудуплекс, полный дуплекс

Вопрос:

Является ли HackRF One полудуплексным или дуплексным устройством?

Ответ:

HackRF One — полудуплексный трансивер. Это означает, что он может передавать или получать, но не способен выполнять обе операции одновременно.

Вопрос:

Почему HackRF One не дуплексное устройство?

Ответ:

HackRF One разработан для поддержки самого широкого диапазона приложений SDR в одном недорогом портативном устройстве. Многие приложения не требуют полнодуплексной работы. Полнодуплексная поддержка сделала бы HackRF больше и дороже, а для этого потребовался бы внешний источник питания. Поскольку потребности в дуплексном режиме можно удовлетворить, просто воспользовавшись вторым HackRF One, имеет смысл сохранить устройство небольшим, портативным и недорогим для всех, кто не требует работы в дуплексном режиме.

Вопрос:

Как изменить дизайн HackRF One, чтобы сделать его дуплексным?

Ответ:

Аппаратная конструкция HackRF One фактически дуплексная (с более низкой частотой дискретизации) от USB-соединения через ADC/DAC (АЦП/ЦАП). Раздел RF является единственной частью конструкции, которая не может поддерживать работу в дуплексном режиме. Самый простой способ сделать HackRF One full-duplex — создать дополнительную плату, которая дублирует радиочастотную секцию, а также обеспечивает внешний источник питания для требуемой дополнительной мощности. Это также потребует усилий программного обеспечения; прошивка, CPLD, libhackrf и другое программное обеспечение хоста должны работать для поддержки полнодуплексной работы.

Если вы попытаетесь перепроектировать секцию RF на HackRF One для поддержки полнодуплексного режима, основное внимание будет уделено MAX2837 (приемопередатчик промежуточной частоты). Эта часть является полудуплексной, поэтому вам потребуется либо две из них, либо вам придётся перепроектировать секцию RF, чтобы использовать что-то отличное от MAX2837, что может привести к радикально другому дизайну. Если вы использовали два MAX2837, вы можете использовать один RFFC5071 вместо двух RFFC5072.

Какова чувствительность приёма HackRF?

Вопрос:

Каков минимальный уровень мощности сигнала, который может быть обнаружен HackRF?

Ответ:

Это не вопрос, на который можно ответить для универсальной такой платформы SDR как HackRF. Конкретно можно ответить только для конкретного приложения. Например, вопрос, на который можно ответить: каков минимальный уровень мощности в дБм модуляции M на частоте F, который может быть обнаружен HackRF One с программным обеспечением S в конфигурации C с частотой ошибок по битам не более E%? Изменение любой из этих переменных (M, F, S, C или E) изменит ответ на вопрос. Даже, казалось бы, незначительное обновление программного обеспечения может привести к существенно другому ответу. Чтобы узнать точный ответ для конкретного приложения, вам придётся измерить его самостоятельно.

Конкретные спецификации HackRF включают диапазон рабочих частот, максимальную частоту дискретизации и динамический диапазон в битах. Эти спецификации могут быть использованы для приблизительного определения пригодности HackRF для данного применения. Тестирование необходимо для точного измерения производительности в приложении. Как правило, производительность можно значительно улучшить, выбрав подходящую антенну, внешний усилитель и/или внешний фильтр для приложения.

Решение проблем

Вопрос:

Почему известный сигнал имеет неправильную частоту, а регулировка центральной частоты смещает неправильную частоту ещё больше или меньше?

Ответ:

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

Справка по hackrf_transfer

Опции hackrf_transfer:

-h # справка
	[-d серийный_номер] # Серийный номер желаемого HackRF (если подключено несколько устройств).
	-r <имя_файла> # Получать данные в этот файл (используйте '-' для stdout (стандартного вывода)).
	-t <имя_файла> # Пересылать данные из этого файла (используйте '-' для stdin (стандартного ввода)).
	-w # Получать данные в файл с WAV заголовком и автоматическим именем.
	   # Это для совместимости с SDR# и может не работать с другим программным обеспечением.
	[-f freq_hz] # Частота Hz [от 0MHz до 7250MHz].
	[-i if_freq_hz] # Промежуточная частота (IF) в Hz [с 2150MHz до 2750MHz].
	[-o lo_freq_hz] # Частота внешнего интерфейса Локального Осцилятора (LO) в Hz [84MHz to 5400MHz].
	[-m image_reject] # Выбор фильтра отклонения изображения, 0=обход, 1=НЧ, 2=ВЧ.
	[-a amp_enable] # RF усилитель RX/TX  1=Включён, 0=Выключен.
	[-p antenna_enable] # Питание на порт антенны, 1=Включён, 0=Выключен.
	[-l gain_db] # Усиление RX LNA (IF), 0-40dB, шаг в 8dB
	[-g gain_db] # Усиление RX VGA (baseband), 0-62dB, шаг в 2dB
	[-x gain_db] # Усиление TX VGA (IF), 0-47dB, шаг 1dB
	[-s sample_rate_hz] # Частота дискретизации в Гц (4/8/10/12.5/16/20MHz, по умолчанию 10MHz).
	[-n num_samples] # Количество сэмплов для передачи (по умолчанию не ограничено).
	[-S buf_size] # Включить потоковую передачу с размером буфера buf_size
	[-c amplitude] # Режим источника сигнала CW, амплитуда 0-127 (значение постоянного тока для ЦАП).
	[-R] # Режим повторения TX (по умолчанию выключен) 
	[-b baseband_filter_bw_hz] # Установите полосу пропускания фильтра основной полосы в Гц.
	Возможные значения: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, по умолчанию <= 0.75 * sample_rate_hz.
	[-C ppm] # Установите внутреннюю ошибку кварцевых часов в ppm.
	[-H hw_sync_enable] # Синхронизируйте передачу USB с помощью контактов GPIO.

Справка по hackrf_spiflash и hackrf_cpldjtag

Опции hackrf_spiflash:

	-h, --help: справка
	-a, --address <n>: адрес начала (по умолчанию: 0)
	-l, --length <n>: количество байтов для чтения (по умолчанию: 1048576)
	-r, --read <имя_файла>: Прочитать данные в файл.
	-w, --write <имя_файла>: Записать данные из файла.
	-d, --device <серийный номер>: Серийный номер устройства если несколько устройств
	-R, --reset: Сбросить HackRF после операций.
	-v, --verbose: Вербальный вывод.

Опции hackrf_cpldjtag:        

	-h, --help: Справка
	-x, --xsvf <имя_файла>: XSVF файл для записи в CPLD.
	-d, --device <серийный номер>: Серийный номер устройства если несколько устройств

Частота, децибелы и прочие физические термины в SDR

[В ПРОЦЕССЕ НАПОЛНЕНИЯ]

Материалы и видео по SDR и HackRF

Официальная Вики HackRF (на английском): https://github.com/mossmann/hackrf/wiki

Интересные видео по SDR и HackRF: https://greatscottgadgets.com/sdr/

Эти же видео в переводе от Дмитрия (DesignerMix):

SDR с HackRF. Урок 1 - Добро пожаловать. Майкл Осман

SDR с HackRF. Урок 2 - Цифровая Обработка Сигналов. Майкл Осман

SDR с HackRF. Урок 3 - Что такое децибел? Майкл Осман

SDR с HackRF. Урок 4 - Тайны! Майкл Осман

Авторские материалы Дмитрия (DesignerMix):

HackRF One первое знакомство с устройством. Обзор и разборка SDR радио

HackRF One + SDRSharp настройка и описание программы

Декодируем цифровую радиосвязь с помощью DSD+ и SDRSharp

Защита SDR трансивера HackRF One от помех

Декодируем GSM с использованием SDR и GR-GSM

Прослушка радиотелефонов DECT не шифрующих трафик

Перехват изображения с монитора по радиоканалу с помощью TempestSDR (ПЭМИН)

Другие переводы Дмитрия (DesignerMix):

SDR на DefCon - Все ваши радиочастоты принадлежат мне. Часть 1

SDR на DefCon - Все ваши радиочастоты принадлежат мне. Часть 2

SDR на DefCon - Все ваши радиочастоты принадлежат мне. Часть 3

Рекомендуется Вам:

3 комментария to SDR и HackRF для начинающих

  1. ranon:

    Статья очень интересная. Ждусь продолжения, интрегует. Я слышал о таких штуках в наборах безопасников но я очень смутно представляю назначение сего девайса.

  2. Михаил:

    афтар пеши исчо

    сам подумываю о приобретении, но материала курить ОЧЕНЬ много особенно если предполагается работать на передачу…ждемс продолжения…

  3. APToni:

    Хорошая статья, интересно было узнать ещё больше про PortaPack, отличие от версий на Алике.

     

Добавить комментарий для ranon Отменить ответ

Ваш e-mail не будет опубликован.