Skip to content

Releases: jetpax/PiZZa

Arduino loader images v0.5.0

Choose a tag to compare

@jetpax jetpax released this 02 Jul 07:51

Ready-to-flash SD images for the PiZZa Arduino loader, one per board. Flash with Raspberry Pi Imager (Use custom) or balenaEtcher.

  • pizza-loader-rpi_zero_2w-v0.5.0.img.xz — Pi Zero 2 W
  • pizza-loader-rpi_zero_w-v0.5.0.img.xz — Pi Zero W (original); first image with working WiFi (brcmfmac + CLM regulatory blob, domain GB)

SHA-256:

  • c2e043305ea757a3657f2dcdd292a24a870f118b00002ce448689b11a0fa887f rpi_zero_2w
  • a164bd909d67bdbb53144eeb2513f7ce06a734c1eabe036253d41845c99fd207 rpi_zero_w

Pair with Boards Manager core 0.5.0 (arduino-core-v0.5.0).

Arduino core v0.5.0 — Zero W WiFi

Choose a tag to compare

@jetpax jetpax released this 02 Jul 07:51

PiZZa Arduino core 0.5.0.

  • Pi Zero W (original): WiFi is live — same WiFi library / brcmfmac driver as the Zero 2 W. The loader now downloads the CLM regulatory database that the on-module BCM43430A1 trim-on-build firmware ships without; without it the radio silently stays disabled. Regulatory domain defaults to GB in this build.
  • Loader exports NET_REQUEST_WIFI_SCAN (both boards).
  • Zero 2 W: no functional change; loader rebuilt from the same tree.

Both loaders hardware-verified with WPA2 join + DHCP + HTTP before publishing. Install via Boards Manager; flash the matching v0.5.0 loader image from the arduino-loader-v0.5.0 release.

arduino-loader v0.4.0 (Pi Zero 2 W + Pi Zero W SD images)

Choose a tag to compare

@jetpax jetpax released this 01 Jul 07:56

Pre-built SD-card images for the PiZZa Arduino loader — flash once, then upload sketches from the Arduino IDE.

  • pizza-loader-rpi_zero_2w-v0.4.0.img.xz — Raspberry Pi Zero 2 W (BCM2710, AArch64). SHA-256 6e97fbed3ef5d1ff0d1c005cdcb46cc149c82865a81db08898cc9a0683ea1c6d
  • pizza-loader-rpi_zero_w-v0.4.0.img.xz — original Raspberry Pi Zero W (BCM2835, AArch32 ARM1176). SHA-256 29d6c9af0bc81997784268371382c630caabdc4084666d02b29027c70e3bf65e

Flash with Raspberry Pi Imager (Choose OS → Use custom → pick the .img.xz) or balenaEtcher. Both read .img.xz directly, no unzip needed.

See the main README for the full workflow.

arduino-core v0.4.0 (Pi Zero W support)

Choose a tag to compare

@jetpax jetpax released this 01 Jul 07:55

PiZZa Arduino core v0.4.0 — adds original Pi Zero W (BCM2835/ARMv6) as a second board under the same Boards Manager entry.

New:

  • Second board pizza:zephyr:pizza_zero_w alongside the existing pizza:zephyr:pizza (Zero 2 W).
  • Blink + USB-CDC Serial hardware-verified end-to-end on real Pi Zero W silicon.

Zephyr upstream compiler-flag fixes shipped in the packaged loader:

  • -mno-unaligned-access for CPU_AARCH32_ARMV6 — ARM1176 silently returns misaligned LDR results rotated instead of faulting; GCC's optimisation of byte-shift load idioms into a single LDR corrupts data on misaligned pointers.
  • -mthumb no longer forced into LLEXT_APPEND_FLAGS on ARMv6-A — sketches now build in ARM mode to match the loader.

Install via Boards Manager using the URL in the README.

PiZZA Arduino loader — SD image v0.3.1 (Pi Zero 2 W)

Choose a tag to compare

@jetpax jetpax released this 29 Jun 07:17

Ready-to-flash SD image that boots the PiZZA Arduino loader on a Raspberry Pi Zero 2 W.

Flash with Raspberry Pi Imager (Use custom) or balenaEtcher → boot the Pi → install the PiZZA board in the Arduino IDE (Boards Manager) → upload sketches over USB-CDC. No Raspberry Pi OS install, no manual copying.

Built reproducibly by PiZZa/os/Arduino/loader-image/make-image.sh.

PiZZA Arduino core v0.3.2 — reset-on-swap + IDE Serial Monitor fix

Choose a tag to compare

@jetpax jetpax released this 29 Jun 17:21

What's new

Reset-on-swap loader architecture. Each sketch starts on a freshly-booted kernel — eliminates the whole class of loader-side state leaks across sketches (brcmfmac/netif, k_work/k_timer callbacks, GPIO ISRs, sockets, DMA). Replaces the previous in-process llext_unload+load swap.

BCM2710 sys_arch_reboot driver. New ~15-line strong override that uses the PM-block watchdog full-reset path (mirrors Linux drivers/watchdog/bcm2835_wdt.c). MMU-maps the PM block at 0x3f100000. CONFIG_REBOOT=y enabled in the variant.

IDE Serial Monitor echo fixed on macOS. SerialUSB::write/flush no longer gates on DTR — the Arduino IDE Serial Monitor doesn't always assert DTR on this platform, which previously made HelloSerial appear silent. operator bool() still reports DTR for sketches that explicitly while (!Serial);.

Flash the new loader

The packaged loader binary is at firmwares/zephyr-rpi_zero_2w_bcm2710.bin inside the tarball. Flash via:

cp .../firmwares/zephyr-rpi_zero_2w_bcm2710.bin /Volumes/PIZZA/zephyr.bin && diskutil eject /Volumes/PIZZA

Boards Manager URL (now self-hosted in PiZZA repo)

https://raw.githubusercontent.com/jetpax/PiZZa/dev/os/Arduino/package_pizza_index.json

PiZZa v0.4.1 — USB-CDC on the Pi Zero W

Choose a tag to compare

@jetpax jetpax released this 30 May 02:12

USB-CDC console comes to the original Pi Zero W.

What's new since v0.4.0

  • USB-CDC on the Pi Zero W. The original 2017 Pi Zero W now boots
    PizzaShell with its shell on USB CDC ACM (/dev/cu.usbmodem*),
    matching the 2W's single-cable experience. Boot logs + LOG_* stay
    on the AUX mini-UART. New DT nodes in bcm2835.dtsi (VC mailbox +
    firmware + DWC2 USB) share the upstream-clean rpi_fw API the
    v0.4.0 convergence introduced — pure DT + Kconfig wiring on the
    PizzaShell side, no driver code added.
  • Console / Logs labels gated on CDC. The pizza panel's
    Console and Logs lines now reflect whether
    CONFIG_USBD_CDC_ACM_CLASS is enabled, instead of being hardcoded
    per SoC. Same source, both boards.

Flash

Standard PiZZa workflow — see the README
for SD imaging via PINN and install-to-sdcard.sh.

Two binaries:

  • pizza-v0.4.1-rpi_zero_w.bin — original Pi Zero W (BCM2835, ARMv6), USB-CDC console
  • pizza-v0.4.1-rpi_zero_2w.bin — Pi Zero 2 W (BCM2710, AArch64), behaviorally identical to v0.4.0

PiZZa v0.4.0 — pizero convergence + Pi Zero W image

Choose a tag to compare

@jetpax jetpax released this 30 May 00:52

PizzaShell on the upstream-clean Zephyr tree, plus a Pi Zero W image.

What's new since v0.3

  • Pi Zero W image. PizzaShell now ships a second binary for the
    original 2017 Pi Zero W (BCM2835, ARM1176, ARMv6) — console-only
    (Display / Storage / Wi-Fi all -- by design). One PizzaShell source,
    both boards.
  • Upstream-clean Zephyr tree. v0.3 was built against the pizza
    Zephyr branch (legacy bcm2835_property VC mailbox API). v0.4.0
    builds against the pizero branch — upstream Zephyr main plus the
    rpi_zero_2w board + ARMv6 + BCM driver work prepared for upstream PR.
    New rpi_fw firmware API throughout; chained multi-tag
    rpi_fw_fb_setup helper for the VideoCore framebuffer; DWC2 USB PHY
    power-on quirk ported to rpi_fw_transfer(RPI_FW_TAG_SET_POWER_STATE).
  • Real EDID monitor detection. pizza now probes
    RPI_FW_TAG_GET_EDID_BLOCK and reports Display: (no monitor detected)
    when nothing is on the HDMI cable. v0.3 reported HDMI 640x480 (the
    VC fallback surface when hdmi_force_hotplug=1 is on).
  • DNS resolution. net dns google.com resolves from the shell on
    the 2W.

Flash

Standard PiZZa workflow — see the README
for SD imaging via PINN and install-to-sdcard.sh.

Two binaries:

  • pizza-v0.4.0-rpi_zero_w.bin — original Pi Zero W (BCM2835, ARMv6)
  • pizza-v0.4.0-rpi_zero_2w.bin — Pi Zero 2 W (BCM2710, AArch64)

PiZZa v0.3 — HDMI display

Choose a tag to compare

@jetpax jetpax released this 28 May 00:06

HDMI display support via the VideoCore-firmware framebuffer.

What's new since v0.1-preview

  • HDMI output. New brcm,bcm2835-fb driver requests a framebuffer
    from the VideoCore GPU via a single chained property request
    (SET_PHYS_WH + SET_VIRT_WH + SET_DEPTH + SET_PIXEL_ORDER +
    ALLOCATE_BUFFER + GET_PITCH) and maps it into the ARM MMU with
    K_MEM_CACHE_NONE. Auto-detects the monitor's native mode via VC's
    EDID negotiation (GET_PHYSICAL_WIDTH_HEIGHT).
  • Splash on boot. The pizza sample paints CMYKWRGB bars onto the
    scanout immediately after the banner; no monitor attached = silent
    no-op.
  • Display line in the pizza panel. Display: HDMI <W>x<H>
    replaces the static Wi-Fi-hardware line. Local IP still shows the
    live network state.
  • I²C bus (BSC1 on GPIO 2/3, 100 kHz default) on the 40-pin header.
  • Quieter boot console. CDC line-state / line-coding debug prints
    removed; VC board-serial query demoted from INF to DBG (was firing
    twice per boot for the USB iSerialNumber descriptor).
  • hdmi_force_hotplug=1 added to the bundled config.txt so HDMI
    comes up even with no monitor attached at power-on.

Flash

Standard PiZZa workflow — see the README
for SD imaging via PINN and the install-to-sdcard.sh script.

Built from jetpax/zephyr@efcd8a2 on the `pizza` branch.

PiZZa v0.1-preview — Zephyr on the Raspberry Pi Zero 2 W

Choose a tag to compare

@jetpax jetpax released this 27 May 04:17
9d325ef

Pre-built Zephyr image for the Raspberry Pi Zero 2 W, ready to drop onto a
PINN-imaged microSD card.

Install steps live in jetpax/PiZZa. TL;DR:

git clone https://github.com/jetpax/PiZZa.git
cd PiZZa
./install-to-sdcard.sh /Volumes/RECOVERY <path-to-zephyr.bin>

Then eject, insert into the Pi, and plug a micro-USB cable from the Pi to your
laptop. The Pi powers itself from the cable and presents a USB-CDC ACM
serial device (/dev/tty.usbmodem* on macOS, /dev/ttyACM0 on Linux, COM port
on Windows). Mini-UART @ 115200 on GPIO 14/15 is the fallback / log console.

A peace-symbol neofetch banner shows up on every host re-connect and pizza
gives you a device summary.

Build provenance

Built with:

EXTRA_ZEPHYR_MODULES=$HOME/zephyrproject/modules/hal/broadcom \
  west build -p always -b rpi_zero_2w \
    -s samples/boards/raspberrypi/rpi_zero_2w_pizza

Image checksum

b0b7d56e00e6137bd0e6902810ed3e5e2db095dafa7abe5b45abbd8507e3a991  zephyr.bin

Verify after download:

shasum -a 256 -c zephyr.bin.sha256

What's enabled

  • BCM2710 SoC + rpi_zero_2w board
  • Primary console: USB-CDC ACM over the micro-USB port
  • Fallback console: mini-UART (uart1) on GPIO 14/15 @ 115200
  • microSD card (external slot) via BCM283x SDHost — mountable FAT / LittleFS
  • SDIO Wi-Fi (CYW43439) via brcmfmac — WPA2-PSK scan / connect / RSSI / multicast RX
  • DMA, SPI, I²S
  • HWINFO (64-bit OTP board serial via VC firmware)
  • VC die-temperature sensor
  • Networking: TCP/IP, DNS, DHCPv4, HTTP server
  • Shell with pizza (neofetch-style device summary), device list, kernel,
    hwinfo, sensor, wifi, net, mount, plus per-subsystem commands.

What's not in this image

  • SMP (single-core only — upstream Zephyr BCM2710 limitation, on the roadmap)
  • Bluetooth (CYW43439 BT side not exercised)
  • HDMI / display
  • USB host (the USB-OTG port runs in device mode for the CDC console)

Hardware compatibility

  • Raspberry Pi Zero 2 W — ✅ supported and tested.
  • Original Pi Zero / Pi Zero W — ❌ not compatible (BCM2835 / ARM11 ARMv6 32-bit; this image is aarch64).
  • Pi 3 / 3B / 3B+⚠️ untested. Same Pi 3 family / BCM27xx silicon; likely needs config tweaks for the different Wi-Fi blob and Ethernet PHY.
  • Pi 4 / Pi 5 — use the upstream rpi_4b / rpi_5 boards, not this image.

Known limitations

  • Pi runs at the BCM2710's idle clock (~600 MHz) when powered from a laptop
    USB-2 port. Use a separate 5 V supply for higher sustained clock if you're
    CPU-bound.
  • Boot to shell takes ~6 s (Pi firmware + Wi-Fi firmware upload).
  • CDC-connect banner uses a colour-matched fake uart:~$ placeholder; the
    real shell takes over the moment you press a key (see source comments in
    samples/boards/raspberrypi/rpi_zero_2w_pizza/src/main.c for the
    shell-from-non-shell-thread rationale).

Source PRs / RFC

This image bundles the contribution that's being staged into upstream Zephyr.
The umbrella RFC is at
zephyrproject-rtos/zephyr#109880.
Three smallest PRs already open:

PR What
#108775 drivers: timer: arm_arch: allow custom interrupt controller
#108776 drivers: serial: uart_bcm2711: return -1 from poll_in when no char
#108777 drivers: serial: uart_bcm2711: read-modify-write IER bits

The remaining ZP-3..16 PRs (board, drivers, brcmfmac) are staged on branches
at jetpax/zephyr pending the RFC
outcome.

License

Apache-2.0 for the Zephyr binary content. The brcmfmac firmware bytes inside
zephyr.bin come from
rpi-distro/firmware-nonfree
under their original non-redistributable license, fetched via
west blobs fetch hal_broadcom at build time and compile-time-included in the
kernel image.