Skip to content

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

Pre-release
Pre-release

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.