What do you want to do?¶
Firmware, guides and measurements for the Fishball7020 / PlutoSky R1: a Zynq XC7Z020 and an AD9361 radio, rebuilt from source.
-
First-time setup: the card, the cables, finding the board, the safety rules.
9 articles
-
Capture IQ, SDR++, aircraft, a live sweep, MATLAB, your own code.
16 articles
-
This board has a power amplifier, and its receiver survives only +2.5 dBm.
4 rules
-
Ports, the JP5 header, GPIO, the USER LED, an external reference clock.
9 articles
-
Kernel, drivers and Debian with no Vivado; the FPGA with it.
12 articles
-
Known problems by symptom, each with its cause and fix.
14 problems
-
A course from what a radio is to your own logic in the AD9361 datapath. Assumes no Verilog, no Vivado and no signal processing.
54 lessons, 23 live calculators
-
What one board measures, with the conditions attached.
Reference
-
Ready-to-write SD-card files. Every release was booted on a board before it was published.
Releases on GitHub
Four commands¶
# run from: the repo root
./devkit doctor # can this machine build? answers in a second
./devkit setup # fetch the sources and apply the patches
./devkit build --xsa "$(./firmware-modern/fetch-pinned-xsa.sh)" # the first build takes the kernel
./devkit flash # onto the running board, backed up and md5-verified
./devkit verify --boardproves the board runs what you built.- Flashing goes over the network through the SD card's boot partition. Never use DFU: it has bricked units of this board.
./devkit ssh-keyfirst saves typing the published root password.- Transmitting? Read before you transmit: about +19 dBm out, a receiver that survives +2.5 dBm, at least 20 dB in any TX→RX loop.
Two firmware targets¶
| modern (the default) | factory (--target factory) |
|
|---|---|---|
| kernel | Linux 6.12 LTS, Analog Devices | 5.15, the vendor's fork |
| userspace | Debian 13 + systemd, on ext4 | Buildroot, in RAM |
| FPGA | taken from a built design (.xsa) |
built with Vivado: the bitstream source |
| release | v2.3 | v1.7 |
Rebuilding needs nothing from AMD: the boot loader compiles from AMD's public
embeddedsw with an ordinary gcc-arm-none-eabi, and bootgen builds from
AMD's Apache-2.0 source. Vivado is needed only to synthesise a new bitstream.
What one board measures¶
| Transmit power, flat out | about +19 dBm (estimated, never metered) |
| Image rejection, after TX quadrature calibration | 44–60 dBc |
| TX mute depth | at least 75 dB (every reading hit the noise floor) |
| Gain slopes, 56 of them | within 1.7% of 1.000 dB/dB |
| FPGA, default build | 94/220 DSP48s, 12 521 LUTs, WNS +0.215 ns |
Measured on one unit, with conditions attached: indicative, not a specification. Details: measured performance.
The repository has the code; its README gets a board running.