Clockwork PicoCalc · Volume 12
PicoCalc Volume 12 — Cheatsheet & Quick Reference
One-page references — laminate, slip into the lab notebook, leave on the bench
Contents
1. About this Volume
This is the quick-reference companion to the other eleven volumes. Everything here is also documented in depth elsewhere in the series; this volume puts the most-frequently-needed steps in one place. Designed to be printed and laminated.
2. BIOS Update Cheatsheet
(Full deep-dive: Volume 4 §5.)
2.1 Quick decision
| Situation | Path |
|---|---|
| Working BIOS, want to upgrade | DFU (§2.2) |
| Working BIOS, want to upgrade with no host PC | UF2-forwarding (§2.3) |
| Building custom keymap or BIOS | Arduino IDE (§2.4) |
| Bricked, keyboard unresponsive | SWD recovery (§2.5) |
2.2 DFU update steps
- Power off (long-press 3 s).
- Open rear shell (4× hex bolts).
- Flip SW107 position 1 to ON.
- Connect USB-C.
- Hold BOOT, press RESET, release RESET, release BOOT.
- Launch STM32CubeProgrammer; connect via USB.
- Open
.binfile, address0x08000000, Download. - Verify “File download complete.” If “Operation Exceeds Memory Limits” → STOP. Recover via SWD.
- Disconnect, flip SW107 back to OFF, press RESET.
- Re-attach rear shell, power on, verify keyboard.
2.3 UF2-forwarding update
- Drop
picocalc-bios-updater-vX.Y.uf2onto the Pico via BOOTSEL. - Power on; the updater runs and pushes new BIOS via I²C.
- Power-cycle.
(Requires existing BIOS to be functional.)
2.4 Arduino IDE rebuild
- Install STM32duino board package:
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json. - Open
Code/picocalc_keyboard/picocalc_keyboard.inofrom https://github.com/clockworkpi/PicoCalc. - Tools → Board → Generic STM32F1 → BluePill F103R8.
- Modify keymap, build.
- Upload via DFU (steps §2.2 above).
2.5 SWD recovery
- Wire Pico Probe SWDIO/SWCLK/GND to carrier test points.
- STM32CubeProgrammer → ST-LINK → Connect.
- Erasing → Full chip erase.
- Open known-good
.bin, Download to0x08000000. - Power-cycle.
3. BOOTSEL Procedure
3.1 Standard BOOTSEL
- Hold BOOTSEL on the Pico module while plugging USB-C.
- Host sees
RPI-RP2(Pico 1) orRP2350(Pico 2) as a removable drive. - Drag UF2 onto drive; Pico reboots automatically.
3.2 BOOTSEL through the case
The kit’s rear grill has a small cutout aligned with the BOOTSEL button. Use a toothpick or thin card. Press while plugging USB-C; release after the host enumerates the drive.
3.3 Forcing BOOTSEL on a flashed Pico
- From software (running):
picotool reboot -u -f(Pico must be reachable via USB CDC). - From UF2 Loader menu: hold Down or F3 during power-on.
- Hardware: short the RUN pin to GND while holding BOOTSEL, release RUN, release BOOTSEL.
3.4 Boot key combinations (reference)
| Key held at power-on | Effect |
|---|---|
| (none) | Boot current app directly |
| Up, F1, F5 | Open UF2 Loader menu |
| Down, F3 | Drop to BOOTSEL mode (Pico is mass-storage drive) |
| Esc (in menu) | Return to current app |
| M (in menu) | Activate USB Mass Storage for SD |
| R (in menu) | Reboot Pico to BOOTSEL |
4. SD Card Layout Reference
/ ← FAT32 root
├── BOOT2040.UF2 ← UF2 Loader UI for RP2040 (Pico 1, Pico W)
├── BOOT2350.UF2 ← UF2 Loader UI for RP2350 (Pico 2, Pico 2 W)
├── pico1-apps/
│ ├── picomite_basic.uf2
│ ├── micropython.uf2
│ ├── ulisp.uf2
│ ├── nes_emu.uf2
│ └── …
└── pico2-apps/
├── picomite_rp2350.uf2
├── micropython_rp2350.uf2
├── peanutgb.uf2
├── picoware.uf2
└── …
Format: FAT32 only (exFAT does not mount). Cards 64+ GB ship pre-formatted exFAT — reformat before first use.
Tail partition: factory layout has a 32 MB raw partition at the end of the card for FUZIX root. Don’t blow it away unless you don’t need FUZIX.
5. Side-Header Pinout (verified rev 2.0r3)
| Pin | Function | Pico GPIO |
|---|---|---|
| 1 | 3V3 | (DCDC1) |
| 2 | GND | — |
| 3 | UART0 TX / I²C0 SDA | GP0 |
| 4 | UART0 RX / I²C0 SCL | GP1 |
| 5 | SPI0 SCK | GP2 |
| 6 | SPI0 TX | GP3 |
| 7 | I²C0 SDA (alt) | GP4 |
| 8 | I²C0 SCL (alt) | GP5 |
| 9 | GPIO | GP12 |
| 10 | GPIO | GP13 |
| 11 | GPIO | GP14 |
| 12 | GPIO | GP15 |
| 13 | I²S DIN | GP20 |
| 14 | I²S BCLK | GP21 |
| 15 | I²S LRCK | GP22 |
| 16 | ADC2 | GP28 |
| 17 | VBUS (USB 5 V passthrough) | (USB) |
| 18 | RUN (active-low reset) | (Pico RUN) |
3V3 budget: ~200 mA continuous, ~400 mA peak. ESP-class loads need separate power.
6. Pico Pinout — All Variants
The Pico-shaped socket follows the standard Raspberry Pi Pico pinout. Pin 1 is on the silkscreened end opposite USB.
| Pin | Pico Function | Carrier Use |
|---|---|---|
| 1 | GP0 / UART0 TX | Side-header pin 3 |
| 2 | GP1 / UART0 RX | Side-header pin 4 |
| 3 | GND | Common ground |
| 4 | GP2 / SPI0 SCK | Side-header pin 5 |
| 5 | GP3 / SPI0 TX | Side-header pin 6 |
| 6 | GP4 / I²C0 SDA | KBD I²C SDA (to STM32 0x1F) |
| 7 | GP5 / I²C0 SCL | KBD I²C SCL |
| 8 | GND | — |
| 9 | GP6 | Sometimes KBD I²C alt SDA |
| 10 | GP7 | Sometimes KBD I²C alt SCL |
| 11 | GP8 | (free) |
| 12 | GP9 | SD CS |
| 13 | GND | — |
| 14 | GP10 / SPI1 SCK | LCD SCK |
| 15 | GP11 / SPI1 TX | LCD MOSI |
| 16 | GP12 | LCD D/C |
| 17 | GP13 | LCD CS |
| 18 | GND | — |
| 19 | GP14 | LCD RST |
| 20 | GP15 | (free) |
| 21 | GP16 / SPI0 RX | SD MISO |
| 22 | GP17 | (free) |
| 23 | GND | — |
| 24 | GP18 | (free) |
| 25 | GP19 | (free) |
| 26 | GP20 | I²S DIN |
| 27 | GP21 | I²S BCLK |
| 28 | GND | — |
| 29 | GP22 | I²S LRCK |
| 30 | RUN | Carrier reset / side-header pin 18 |
| 31 | GP26 / ADC0 | Audio L PWM |
| 32 | GP27 / ADC1 | Audio R PWM |
| 33 | AGND | Analog ground |
| 34 | GP28 / ADC2 | Side-header pin 16 |
| 35 | ADC_VREF | Pico’s internal Vref |
| 36 | 3V3 OUT | (Pico’s regulator output) |
| 37 | 3V3_EN | Tie to 3V3 to enable |
| 38 | GND | — |
| 39 | VSYS | Powered from carrier 3V3 |
| 40 | VBUS | USB 5 V from carrier |
(Pico W / Pico 2 W: GP23-GP25 are CYW43439-internal, not exposed at the connector.)
7. Common Error Codes
| Error | What it means | Fix |
|---|---|---|
| STM32CubeProgrammer: “Operation Exceeds Memory Limits” | Binary larger than chip flash region | Wrong binary; stop and revert |
| BOOTSEL drive doesn’t appear | USB cable charge-only OR Pico unflashed | Try data cable; verify BOOTSEL button held |
RPI-RP2 flashes but Pico won’t boot | Bootloader corrupted | Re-flash UF2 Loader bootloader binary |
| Keyboard misses fast typing | I²C clock too high or BIOS too old | Drop I²C to 10 kHz; upgrade BIOS to 1.2+ |
| FUZIX hangs at boot | 32 MB tail partition missing/corrupt | Recreate with dd (Vol 4 §6.3) |
| LCD blank, backlight on | LCD ribbon not seated | Open case, re-seat FFC |
| Pico 2 W: WiFi associates but no traffic | Region not set in cyw43_arch_init | Pass CYW43_COUNTRY_USA (or your region) |
| Cannot connect via SWD | SW107 in DFU mode OR cables swapped | Set SW107 pos 1 OFF; verify SWDIO/SWCLK |
| Pi Zero rainbow screen forever | Kernel panic, missing modules | Reflash; check SD integrity |
| Lyra reboots randomly | Cell voltage low / brownout | Charge or use external supply |
apt upgrade runs out of space | SD too small for full Debian | Use 32 GB+ card |
| BME280 reads constant 0xFFFF | Wrong I²C address (0x76 vs 0x77) | Check SDO pin tie |
| RFM95 SPI bus inactive | Reset line never deasserted | Pulse RST low ~10 ms then high before init |
8. Command Reference
8.1 picotool (Pico-side flashing)
picotool info # board info; BOOTSEL must be held
picotool load my_app.uf2 -fx # flash and execute
picotool reboot # reboot Pico
picotool reboot -u -f # force into BOOTSEL from a running Pico
picotool save -t bin all my_dump.bin # dump flash to file
picotool version # picotool version
8.2 mpremote (MicroPython REPL + filesystem)
mpremote # land at REPL (Ctrl-X to exit)
mpremote ls # list filesystem
mpremote cp host.py :remote.py # upload
mpremote cp :remote.py host.py # download
mpremote run script.py # run without copying
mpremote soft-reset # equivalent to Ctrl-D
mpremote reset # hardware reset
mpremote mount . # mount host cwd as /remote
8.3 OpenOCD + GDB (SWD via Pico Probe)
# Terminal 1 (server)
openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg
# (or rp2350.cfg for Pico 2)
# Terminal 2 (client)
arm-none-eabi-gdb my_app.elf
(gdb) target extended-remote :3333
(gdb) load
(gdb) monitor reset init
(gdb) b main
(gdb) c
8.4 STM32CubeProgrammer CLI (DFU/SWD)
# DFU connection
STM32_Programmer_CLI -c port=usb1 -d firmware.bin 0x08000000 -v -hardRst
# ST-LINK connection
STM32_Programmer_CLI -c port=SWD -d firmware.bin 0x08000000 -v -hardRst
# Full chip erase
STM32_Programmer_CLI -c port=SWD -e all
8.5 rpi-imager (headless flash for Pi Zero / RetroPie / etc.)
rpi-imager --cli ImageName /dev/sdX
Pre-configure SSH, WiFi, hostname via the GUI’s “Advanced options” gear icon (SSH keys, WiFi credentials, hostname, locale, keyboard). These land in /boot/firstrun.sh and execute on first boot.
8.6 rkdeveloptool (Lyra maskrom flashing)
# Hold BOOT button, plug USB-C, release BOOT — Lyra in maskrom
rkdeveloptool ld # list devices, expect "Maskrom Mode"
rkdeveloptool db MiniLoaderAll.bin
rkdeveloptool wl 0x0 update.img
rkdeveloptool rd # reboot
9. “Which UF2 Do I Need?” Decision Flowchart
What's your Pico module?
│
├─ Pico (RP2040) / Pico H / Pico W / Pico WH
│ ├─ Stack = PicoMite → PicoMiteRP2040USBV6.02.01.uf2
│ ├─ Stack = MicroPython → LofiFren build for Pico W (or generic for non-W)
│ ├─ Stack = uLisp → ulisp-picocalc-rp2040.uf2 (BIOS 1.2 only)
│ ├─ Stack = picolua → picolua-rp2040.uf2
│ ├─ Stack = NES emulator → infonesplus-pico1.uf2
│ └─ Stack = bootloader → bootloader_pico.uf2 + BOOT2040.UF2 on SD
│
└─ Pico 2 / Pico 2 H / Pico 2 W / Pico 2 WH / Pimoroni Plus 2
├─ Stack = PicoMite → PicoMiteRP2350USBV6.02.01.uf2
├─ Stack = MicroPython → LofiFren build for Pico 2 / Pico 2 W
├─ Stack = uLisp → not yet (RP2040 only as of v1.1)
├─ Stack = picolua → picolua-rp2350.uf2
├─ Stack = NES emulator → infonesplus-pico2.uf2
├─ Stack = Game Boy → peanutgb-pico2.uf2 (RP2350 only)
├─ Stack = Picoware → picoware-pico2w.uf2
└─ Stack = bootloader → bootloader_pico2.uf2 + BOOT2350.UF2 on SD
10. Pico SDK CMakeLists Boilerplate
Drop into a fresh project directory:
cmake_minimum_required(VERSION 3.13)
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)
project(picocalc_app C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(picocalc_app
main.c
picocalc_lcd.c
picocalc_keyboard.c
)
target_link_libraries(picocalc_app
pico_stdlib
hardware_spi
hardware_i2c
hardware_pwm
hardware_pio
hardware_dma
)
pico_enable_stdio_usb(picocalc_app 1)
pico_enable_stdio_uart(picocalc_app 0)
pico_add_extra_outputs(picocalc_app)
Build:
mkdir build && cd build
cmake -DPICO_BOARD=pico .. && ninja # for Pico 1
cmake -DPICO_BOARD=pico2 .. && ninja # for Pico 2 (Arm)
cmake -DPICO_BOARD=pico2 -DPICO_PLATFORM=rp2350-riscv .. && ninja # Pico 2 RISC-V
11. MicroPython picocalc Module Quick Reference
from picocalc import display, keyboard, audio, sd, battery
# DISPLAY
display.fill(0)
display.pixel(160, 160, 0xFFFF)
display.rect(0, 0, 320, 30, 0xF800)
display.line(0, 0, 320, 320, 0x07E0)
display.text("Hello", 10, 10, 0xFFFF)
display.show()
# KEYBOARD
key = keyboard.read()
key = keyboard.wait()
keyboard.set_repeat(initial=300, rate=50)
# AUDIO
audio.tone(440, 100)
audio.play("song.wav")
# SD CARD
sd.mount()
sd.umount()
files = sd.listdir("/sd/programs")
# BATTERY (via STM32 → AXP2101)
pct = battery.percent()
mv = battery.voltage_mv()
ch = battery.charging()
# BACKLIGHT
display.backlight(200)
keyboard.backlight(100)
12. PicoMite Useful Commands
' Display
CLS
COLOUR RGB(WHITE), RGB(BLACK)
TEXT 10, 10, "Hello", "LB", 4, 1
LINE 0,0 TO 319,319
CIRCLE 160, 160, 50, 1, 1, RGB(BLUE)
' Sound
PLAY TONE 440, 200, 50
PLAY MOD "song.mod"
' Files
SAVE "myprog.bas"
LOAD "myprog.bas"
RUN "myprog"
EDIT
' Multitasking
DIM SHARED counter = 0
INTERRUPT ON 1000, MyTimer
SUB MyTimer
counter = counter + 1
END SUB
' GPIO / I²C / SPI
SETPIN GP12, OUT
PIN(12) = 1
I2C OPEN 100, 1000
I2C WRITE 0x76, 0, 1, &H20
I2C READ 0x76, 0, 1, b%
I2C CLOSE
13. AT Command Quick-Reference (ESP-01S)
AT → OK (sanity check)
AT+RST → ready (reset)
AT+GMR → version dump
AT+CWMODE=1 → station mode
AT+CWLAP → list APs
AT+CWJAP="ssid","pass" → join
AT+CIFSR → my IP
AT+CIPSTART="TCP","host",80 → open socket
AT+CIPSEND=N → send N bytes (then send the bytes)
AT+CIPCLOSE → close socket
AT+RESTORE → factory reset
AT+CIOBAUD=460800 → change baud (only effective on AT-1.7+)
14. Hamlib Rig Model Codes (most common)
| Model code | Rig | Notes |
|---|---|---|
| 1 | Hamlib Dummy | for testing |
| 2 | Hamlib NetRigctl | TCP rigctld client |
| 234 | Yaesu FT-991 / FT-991A | both share this code |
| 230 | Yaesu FT-857 | |
| 235 | Yaesu FT-DX10 | |
| 240 | Icom IC-7300 | CI-V address 0x94 default |
| 241 | Icom IC-7610 | |
| 245 | Icom IC-9700 | |
| 211 | Elecraft KX2 | |
| 212 | Elecraft KX3 | |
| 213 | Elecraft K3 | |
| 121 | Kenwood TS-2000 | |
| 168 | Kenwood TS-590S/SG | |
| 170 | Kenwood TS-890S |
rigctl -l on the Pi Zero / Lyra prints the full list (~400 entries).
15. I²C Address Quick-Reference (PicoCalc bus + side-header devices)
| Address | Device | Notes |
|---|---|---|
| 0x1F | STM32 keyboard MCU | the carrier’s KBD I²C slave |
| 0x24 | PN532 NFC | dev shield |
| 0x29 | TSL2591 light sensor | optional |
| 0x39 | TCS34725 RGB sensor | optional |
| 0x3C | SSD1306 OLED 0.96” | optional aux display |
| 0x3D | SSD1306 OLED alternate | jumper-selectable |
| 0x40 | INA219 current sensor | optional |
| 0x48 | ADS1115 16-bit ADC | optional |
| 0x68 | DS3231 RTC | dev shield |
| 0x68 | MPU6050 / MPU9250 IMU | conflicts with DS3231 — use bus mux |
| 0x76 | BME280 / BMP280 | dev shield (SDO pulled GND) |
| 0x77 | BME280 / BMP280 alt | (SDO pulled 3V3) |
Use i2cdetect -y 1 on Linux (Pi Zero / Lyra) or PicoMite’s I2C SCAN to enumerate.
16. Build-and-Flash Recipes Per Stack
16.1 PicoMite (no build — just flash)
- Download zip from https://geoffg.net/picomite.html.
- Pick
PicoMiteRP2040USBV6.02.01.uf2(orRP2350USBfor Pico 2). - BOOTSEL + drag-and-drop OR copy to
pico*-apps/on SD.
16.2 MicroPython (LofiFren, no build)
- Download UF2 from https://github.com/LofiFren/PicoCalc/releases.
- BOOTSEL + drag-and-drop. REPL on USB CDC at 115200.
16.3 Pico SDK app (build from source)
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk && git submodule update --init && export PICO_SDK_PATH=$PWD
cd ../my_app && mkdir build && cd build
cmake -DPICO_BOARD=pico .. && ninja
16.4 Pico SDK + Rust (embassy-rp)
rustup target add thumbv6m-none-eabi
rustup target add thumbv8m.main-none-eabihf
cargo install elf2uf2-rs
cargo new --bin my_app && cd my_app
cargo build --release --target thumbv8m.main-none-eabihf
elf2uf2-rs target/thumbv8m.main-none-eabihf/release/my_app
16.5 picolua
Pre-built UF2 from https://github.com/dreamcat4/picolua/releases. Drop on BOOTSEL.
16.6 Pi Zero kernel module rebuild
git clone https://github.com/clockworkpi/picocalc-linux-modules.git
cd picocalc-linux-modules
make
sudo make install
sudo modprobe picocalc-display picocalc-keyboard
16.7 Lyra Buildroot full-image rebuild
git clone https://github.com/LuckfoxTECH/luckfox-pico.git
cd luckfox-pico
./build.sh lunch
./build.sh
17. Connector Keying Cheatsheet
| Connector | Keying | Mating notes |
|---|---|---|
| Battery JST (carrier) | 2-pin polarized JST-SM | red = +, black = − (verify silkscreen!) |
| Speaker JST × 2 | 2-pin JST-PH | not polarity-sensitive |
| LCD FFC (24-pin) | flat flex; latch lifts upward | contacts face DOWN when seated |
| Keyboard FFC | flat flex; latch lifts upward | contacts face DOWN |
| SD slot | push-push, contacts face UP when card inserted | label-side down |
| USB-C | symmetrical, no orientation | data + 5 V through polyfuse |
| Side-header | 2×9 2.54 mm; pin 1 marked on silkscreen | accessories should orient header on left |
| Pico debug (Pico H/WH) | SM03B-SRSS-TB 3-pin keyed | matches official Pico Probe cable |
18. BOM Quick-Pick (one-pager)
For a working PicoCalc + a flexible accessory loadout:
| Item | Source | Price |
|---|---|---|
| PicoCalc kit | ClockworkPi | $75 |
| Pico 2 WH | Mouser | $7 |
| Pico H (spare for low-power use) | Mouser | $5 |
| 2× Samsung 35E 18650 | 18650batterystore | $14 |
| 32 GB SanDisk Ultra microSD | Amazon | $7 |
| Raspberry Pi Debug Probe | Mouser | $12 |
| PCM5102A I²S DAC breakout | AliExpress | $3 |
| ESP-01S WiFi module | AliExpress | $3 |
| RFM95W (915 MHz) | LCSC | $9 |
| CC1101 module | AliExpress | $3 |
| Subtotal — full kit | $138 |
19. Minimum Useful Setup Steps (first 30 minutes with the kit)
- Insert cells with correct polarity. Verify silkscreen
+and−. - Insert factory SD card. Don’t reformat yet.
- Press power button (~1 s). Splash should appear.
- Hold Up while powering on. Multi-boot menu appears.
- Select PicoMite. Land at the
>prompt. - Type
PRINT "Hello"to verify keyboard. - Type
EDITto enter the program editor; type a small program; F1 to save and exit; typeRUN. - Press Esc to interrupt; type
OPTION LCD CALIBRATEto tune the gamma. - Power off, swap to a different module if you have one to verify the socket and the multi-boot system work.
- Now read Volume 1 to plan your project direction.
20. Gotcha-and-Fix Matrix
| Gotcha | Why it bites | Quick fix |
|---|---|---|
| Charge-only USB cable | No data lines → no BOOTSEL drive | Use a known-data cable |
| BOOTSEL held after USB-C plug | Pico already enumerated normally | Power-cycle, hold BOOTSEL before plug |
| 64 GB+ SD pre-formatted exFAT | UF2 Loader can’t mount | Reformat FAT32 with Rufus / fat32format |
Pico W with PICO_BOARD=pico | CYW43 driver not linked | -DPICO_BOARD=pico_w in cmake |
| Cells reversed even briefly | AXP2101 ESD diodes degrade | Always verify silkscreen before installing |
| Big-flash app overwriting bootloader (Pico 1) | App ignored magic-number flash limit | Use PicoCalc-aware build of the stack |
| I²C bus stuck at 100 kHz | STM32 can’t keep up | Drop I²C clock to 10 kHz |
boot/config.txt missing dtoverlay (Pi) | Hardware not detected | Add dtoverlay=hifiberry-dac etc. |
| WSJT-X audio device mismatch | Linux ALSA renamed devices | Check arecord -l, point WSJT-X at right card |
| WiFi config in headless image | /boot/wpa_supplicant.conf unsupported in Bookworm | Use rpi-imager’s “Advanced options” |
| CAT cable cross-connected | RX/TX swapped | Try the other cable, or rewire RX↔TX |
| RFM95 silent on receive | RST pulled low at boot | Drive RST high in init |
21. Essential URLs
22. Volume-by-Volume Quick Index
| Need | Volume | Section |
|---|---|---|
| Why pick Pico 2 vs Pi Zero vs Lyra? | Vol 1 | §3 |
| Schematic of carrier board | Vol 2 | Chapter 13 |
| AXP2101 power tree details | Vol 2 | Chapter 3 |
| STM32 BIOS I²C protocol | Vol 2 | Chapter 4 |
| Which Pico variant to buy | Vol 3 | §3 |
| 3D-printable backs | Vol 3 | §3.5 |
| BIOS update procedures | Vol 4 | Chapter 5 |
| UF2 Loader setup | Vol 4 | Chapter 7 |
| SD card layout | Vol 4 | Chapter 6 |
| PicoMite first program | Vol 5 | §11.1 |
| MicroPython first program | Vol 5 | §11.2 |
| Display and keyboard from C | Vol 6 | Chapter 13 |
| PIO worked example | Vol 6 | §14.2 |
| Audio fix (I²S DAC) | Vol 6 | §15.3 |
| Wire up an ESP-01S | Vol 7 | Chapter 3 |
| Build a custom adapter PCB | Vol 7 | Chapter 9 / 10 |
| Pi Zero bring-up | Vol 8 | Chapter 5 |
| WSJT-X / fldigi setup | Vol 8 | §10.2 / §10.3 |
| Lyra installation | Vol 9 | Chapter 6 |
| M0 co-processor + rpmsg | Vol 9 | Chapter 7 |
| PicoCalc as graphing calculator | Vol 10 | §10.1 |
| Game emulation per platform | Vol 10 | §10.2 |
| Sub-GHz with CC1101 | Vol 11 | §11.3.2 |
| Ham audio interface schematic | Vol 11 | §2.4 (this volume Fig 2.4) |
| PICO-8 install + first cart | Vol 13 | Chapter 9 |