之前做LimeSDR的GPS接收实验的时候我用到过Portapack,它可以发射GPS信号:
https://blog.csdn.net/shukebeta008/article/details/103270214
测试KerberosSDR测向功能时,我也使用Portapack来发射一个单音信号:
https://www.bilibili.com/video/av78385598?from=search&seid=9727676114121593493
Portapack体积小巧,虽然电脑+sdr也能发射测试信号,但是对于这类需要经常运动的发射要求,Portapack非常方便,不止如此,它还没有开机过程,也不需要输入命令,再室外使用相当方便。
Portapack本身还有好多功能,比如接收adsb信号,tpms信号,收听AM、FM广播,发射FM信号,扫频等:
https://www.bilibili.com/video/av75970840?from=search&seid=12318126195803131787
其它功能参考:
https://www.rtl-sdr.com/a-review-of-the-hackrf-portapack-with-havok-firmware/
它的原理是直接在hackrf的板载arm芯片上执行信号处理,这样对于一些运算量小的应用,就可以脱离电脑,直接在portapack+hackrf上实现了。
之前用的gridrf版本的固件带gps发射功能,但是它是不开源的,这个固件的其他部分其实都已经很老了,跟不上portapack固件的最新发展,所以打算自己写一个类似的程序。可以看到下面这个最新版本的主界面截图,现在都是方格的可以直接触摸点击了,以前的老版本(也就是gridrf用的版本)的主界面是上一张截图左上角那样一行一行的,不止如此,具体的一些收发模块也在不停更新中。
由于portapack的程序都在hackrf的arm芯片上运行,对于深入理解hackrf板载固件的开发也是有用的。后期我可能还会改造AM解调模块,用它来显示模拟视频,本来的AM解调只是解调音频,但是模拟视频也是AM信号,用AM的幅度值来表示每个像素点的亮度。
portapack固件由两个组织分别开发,一种是硬件设计者自己开发的,作者叫Jared Boone,另一种固件是furrtek开发的havoc固件,功能多很多。
前面说的gridrf版本其实也是在havoc固件上稍作修改得来的,它的这个gps发射功能其实跟havoc固件中的replay功能差不多。只不过replay发射的是采样率500kHz,16位的iq信号,而gps发射需要发射8位iq信号,采样率常用的是2.6MHz(我自己用的是2MHz)。
我们现在要做的相当于要给portapack写一个app。
先访问这个github地址
https://github.com/furrtek/portapack-havoc
这是portapack的项目文件夹,这里面有所有的代码,wiki里还有编译和烧录的步骤,照着步骤做没什么难度。
编译:https://github.com/furrtek/portapack-havoc/wiki/Building-from-source
烧录:https://github.com/furrtek/portapack-havoc/wiki/Flashing
我们要改的代码文件都在firmware下。
在加模块之前,你可以先尝试一下更改某个比较简单的界面上的代码,尝试一下开发流程。
打开如下文件
/firmware/application/apps/ui_about.hpp
里面有一部分这个代码。
const credits_t credits[25] = {
// 012345678901234567890123456789
{ 60, "PortaPack|HAVOC", 0 },
{ 4 * 8, "Version " VERSION_STRING, 16 },
{ 11 * 8, "Gurus J. Boone", 0 },
{ 18 * 8, "M. Ossmann", 16 },
{ 11 * 8, "HAVOC Furrtek", 16 },
{ 7 * 8, "POCSAG rx T. Sailer", 0 },
{ 18 * 8, "E. Oenal", 16 },
{ 0 * 8, "Radiosonde infos F4GMU", 0 },
{ 18 * 8, "RS1729", 16 },
{ 4 * 8, "RDS waveform C. Jacquet", 16 },
{ 7 * 8, "Xy. infos cLx", 16 },
{ 2 * 8, "OOK scan trick Samy Kamkar", 16 },
{ 7 * 8, "World map NASA", 16 },
{ 0 * 8, "TouchTunes infos Notpike", 16 },
{ 4 * 8, "Subaru infos Tom", 0 },
{ 18 * 8, "Wimmenhove", 24 },
{ 6 * 8, "Thanks & donators", 16 },
{ 1 * 8, "Rainer Matla Keld Norman", 0 },
{ 1 * 8, " Giorgio C. DC1RDB", 0 },
{ 1 * 8, " Sigmounte Waax", 0 },
{ 1 * 8, " Windyoona Channels", 0 },
{ 1 * 8, " F4GEV Pyr3x", 0 },
{ 1 * 8, " HB3YOE", 24 },
{ 11 * 8, "MMXVIII", -1 }
};
这些代码在你打开portapack里的about页面时会滚动显示出来,你可以更改里面的贡献者文字,改成任何你想显示的文字。
改完了以后就可以编译了,参考wiki里的编译和下载步骤:
#编译 先退到这个项目最上层文件夹
mkdir build
cd build
cmake ..
make firmware -j4
#下载
cd /build/firmware
hackrf_spiflash -w portapack-h1-havoc.bin #做这一步之前要把portpack切换为hackrf模式
下载完毕后,按hackrf上的reset按钮,重新进入portpack,你就可以在About页面看到更改的成果了。
下面是我改的效果,在倒数第二行加了我自己的签名。
附上portapack的软硬件原理参考:
固件结构:https://github.com/sharebrained/portapack-hackrf/wiki/Firmware-Architecture
启动过程:https://github.com/sharebrained/portapack-hackrf/wiki/Boot-Process
硬件:https://github.com/sharebrained/portapack-hackrf/wiki/Hardware