M5Stack Cardputer Zero · Volume 12
M5Stack Cardputer Zero Volume 12 — Cheatsheet
Laminate-ready field card for the CM0 Linux pocket computer — confirmed quick-facts, receipt checks, OS imaging, czdev quick-start, battery math, region rules, troubleshooting, pre-engagement checklist
12.1 About this volume
Vol 12 is the laminate-ready field card for the Cardputer Zero. It is the synthesis of Vol 1 through Vol 11: the one page you carry to the bench or the field. Every spec here is confirmed fact from M5Stack’s shop/docs, the CardputerZero/m5stack GitHub orgs, and the CNX-Software/LinuxGizmos/Hackster coverage of the 2026-05-26 Kickstarter launch — not the pre-launch ESP32 guesswork the earlier drafts carried.

Why earlier drafts said “ESP32-S3.” The whole 2026-05-13 research-baseline series was written before the product shipped, extrapolating from the ESP32-S3 Cardputer and Cardputer ADV — a plausible-but-wrong textbook assumption: “a budget Cardputer = a cheaper ESP32 Cardputer.” It is not. The Cardputer Zero is a Raspberry Pi Compute Module 0 (CM0) that boots Linux from a microSD card — the same RP3A0 silicon class as a Raspberry Pi Zero 2 W. There is no firmware to flash, no
esptool, no Arduino sketch. It runs ordinary Linux binaries. This volume has been fully reframed to that reality; one such note per volume is the standing doc-audit convention.
This card stays field-grade and terse. For the schematic-grade theory, follow the cross-references back into Vols 2–11.
12.2 Confirmed quick-facts panel
┌──────────────────────────────────────────────────────────────────────┐
│ M5Stack Cardputer Zero — CONFIRMED (Kickstarter, launched 2026-05-26) │
├──────────────────────────────────────────────────────────────────────┤
│ Class Pocket Linux computer (NOT a microcontroller) │
│ Core module Raspberry Pi Compute Module 0 (CM0) │
│ SoC / SiP RP3A0 → Broadcom BCM2710A1 (BCM2837 family) │
│ CPU Quad-core ARM Cortex-A53 @ 1.0 GHz, ARMv8-A / aarch64 │
│ GPU VideoCore IV (OpenGL ES 1.1 / 2.0) │
│ RAM 512 MB LPDDR2 (on-package, fixed) │
│ OS / boot Boots Raspberry Pi OS / Debian aarch64 from microSD │
│ Storage microSD (Full bundles 32 GB; Lite ships none) │
│ Display 1.9" IPS, ST7789v3, 320×170 landscape, PWM backlight │
│ Keyboard 46-key matrix QWERTY │
│ Camera 8 MP Sony IMX219, 4-lane CSI ── FULL ONLY │
│ IMU BMI270 (6-axis) + BMM150 (mag) = 9-axis ── FULL ONLY │
│ Audio ES8389 codec + AW8737A amp + 1W spkr + MEMS mic + jack │
│ IR TX + RX │
│ RTC RX8130CE │
│ Wi-Fi 2.4 GHz 802.11 b/g/n (on-module, IPEX antenna) │
│ Bluetooth BT 4.2 + BLE │
│ Ethernet 10/100 Mbps RJ45 (wired) │
│ Video out Digital HD A/V, up to 1080p30 │
│ USB 2× USB-C (host/device switch) + 1× USB-A host │
│ Expansion Cap EXT 14-pin (SPI/UART/I²C/USB/GPIO/5V/GND) + Grove │
│ Cap modules Optional Cap CC1101 (NFC/sub-GHz) + Cap LoRa over EXT │
│ Battery 3.7V / 1500 mAh LiPo, BQ27220 gauge, USB-C charge │
│ Idle power ~2.5 W (Linux SoC; no MCU µA deep-sleep) │
│ Dimensions 84.0 × 54.0 × 23.1 mm │
│ Price $59 Lite / $89 Full (KS early bird); $99 / $149 reg. │
└──────────────────────────────────────────────────────────────────────┘
12.3 What to verify on receipt — the first-boot Linux checklist
The Zero boots a real OS, so verification is done from a shell, not from a flasher. Image a known-good microSD (§ 5), boot, then either type at the on-device keyboard or SSH in and run these. Determine Lite vs Full by probing for the camera + IMU.
12.3.1 Identification + provenance
- Box / SKU matches what you ordered (Lite vs Full)
- Bundled 32 GB microSD present (Full) / absent (Lite)
- Photograph unit + any serial for records
- Visual: no case damage, no LiPo swelling, display uncracked, connectors clean
12.3.2 Core platform — confirm it’s a CM0 running Linux
cat /proc/cpuinfo # expect 4× "ARMv8" cores; Hardware: BCM2835/2837; Revision/Serial
uname -a # expect aarch64 Linux, Pi-class kernel
cat /proc/device-tree/model 2>/dev/null # board model string
free -h # total ≈ 512 MB (NOT 8 MB flash — this is RAM on a real computer)
vcgencmd measure_temp # SoC temp (Pi userland present = it really is BCM silicon)
lsblk # microSD as mmcblk0 with rootfs + boot partitions
12.3.3 Radios + network interfaces
ip a # expect eth0 (10/100 RJ45) AND wlan0 (2.4 GHz)
rfkill list # Wi-Fi + BT present and unblocked
hciconfig -a # or: bluetoothctl show # BT 4.2 + BLE adapter
iw dev wlan0 info # confirm 2.4 GHz only (no 5 GHz band)
lsusb # USB-A host enumerates; attach a known device to confirm
12.3.4 Lite vs Full — camera + IMU probe
# Camera (Full only): IMX219 on CSI
libcamera-hello --list-cameras # or: vcgencmd get_camera (detected=1 supported=1)
# IMU (Full only): BMI270 + BMM150 over I²C
i2cdetect -y 1 # BMI270 commonly 0x68/0x69; BMM150 0x10-0x13 (addresses verify on receipt)
If the camera + IMU are absent, you have a Lite; if present, a Full. Record which.
12.3.5 Audio, IR, RTC, battery telemetry
aplay -l ; arecord -l # ES8389 codec: playback + capture devices present
# → quick test: arecord -d 3 t.wav && aplay t.wav (MEMS mic + 1W speaker)
i2cdetect -y 1 # RX8130CE RTC + ES8389 codec also appear on the bus
hwclock -r # RTC reads back a time
# Battery: BQ27220 fuel gauge over I²C — read state-of-charge / voltage
# (via the gauge's sysfs/driver once the M5 dtoverlay is loaded)
12.3.6 Update this deep dive
The figures are currently M5Stack’s own product photos + annotated board diagrams. Once a unit is in hand: swap in first-party bench photos (Photo Helper), confirm the receipt-checklist readings (§3), append a CLAUDE.md Progress Log entry, run python3 tools/validate_all.py, and commit.
12.4 Confirmed-spec reference + Lite-vs-Full delta
The product is confirmed. The earlier “hypothesis vs confirmed” tracker is retired; below is the authoritative spec reference. (Seeds like “ESP32-S3FN8 / 8 MB flash / 700 mAh / EXT bus = No” were wrong and are gone.)
Table 1 — 4. Confirmed-spec reference + Lite-vs-Full delta
| Subsystem | Confirmed value | Cross-ref |
|---|---|---|
| Core module | Raspberry Pi Compute Module 0 (CM0) | Vol 3 |
| SoC | RP3A0 → BCM2710A1 (BCM2837 family) | Vol 3 |
| CPU | Quad Cortex-A53 @ 1.0 GHz, aarch64 | Vol 3 |
| RAM | 512 MB LPDDR2 (fixed) | Vol 3 |
| Storage | microSD (Full bundles 32 GB) | Vol 4 |
| OS | Raspberry Pi OS / Debian aarch64 | Vol 5 |
| Display | 1.9″ ST7789v3, 320×170 | Vol 6 |
| Keyboard | 46-key matrix QWERTY | Vol 6 |
| Audio | ES8389 + AW8737A + 1 W spkr + MEMS mic + 3.5 mm jack | Vol 6 |
| IR | TX + RX | Vol 6 |
| RTC | RX8130CE | Vol 6 |
| Wi-Fi | 2.4 GHz 802.11 b/g/n | Vol 8 |
| Bluetooth | BT 4.2 + BLE | Vol 9 |
| Ethernet | 10/100 RJ45 | Vol 8 |
| Video out | HDMI/digital A/V, 1080p30 | Vol 6 |
| USB | 2× USB-C (host/device) + 1× USB-A host | Vol 3 |
| Expansion | Cap EXT 14-pin + Grove HY2.0-4P | Vol 4 |
| Battery | 1500 mAh LiPo, BQ27220 gauge | Vol 7 |
| Dimensions | 84.0 × 54.0 × 23.1 mm | Vol 2 |
Lite vs Full — the only hardware delta:
Table 2 — 4. Confirmed-spec reference + Lite-vs-Full delta
| Feature | Lite ($59 / $99) | Full ($89 / $149) |
|---|---|---|
| Camera (8 MP IMX219) | ✗ | ✓ |
| IMU (BMI270 + BMM150) | ✗ | ✓ |
| Bundled 32 GB microSD | ✗ | ✓ |
| Everything else (CM0, 512 MB, display, keyboard, audio, Wi-Fi/BT, Ethernet, USB, EXT, battery) | ✓ | ✓ |
Note. Lite and Full share the same board, OS, and software stack. The Full premium buys the camera, the 9-axis IMU, and an SD card. Pick Full if you want
CameraApp/IMX219 work or motion sensing; Lite is the cheaper drop-box / SSH-box.
12.5 OS imaging quick-reference
No firmware to flash — you write an OS image to a microSD and the CM0 boots it like any Pi. Three routes:
# === Route A: Raspberry Pi Imager (GUI, cross-platform) ===
# Choose OS → "Use custom" → select cardputer-zero.img(.xz)
# Choose storage → the microSD
# ⚙ (advanced) → set hostname, enable SSH, set user/pass, Wi-Fi SSID+PSK, locale → WRITE
# (Headless preconfig means it joins Wi-Fi + accepts SSH on first boot — no monitor needed.)
# === Route B: m5stack-imager (M5-oriented, Pi-Imager-style) ===
# From github.com/CardputerZero — writes the M5 Cardputer Zero appliance image.
# === Route C: dd (Linux/macOS, manual) ===
xzcat cardputer-zero.img.xz | sudo dd of=/dev/sdX bs=4M status=progress conv=fsync
# (verify /dev/sdX with lsblk FIRST — wrong target destroys a disk)
sudo dd if=cardputer-zero.img of=/dev/sdX bs=4M status=progress # if already decompressed
sync
# === Headless SSH/Wi-Fi preconfig WITHOUT the Imager (mount the boot partition) ===
touch /boot/ssh # enable SSH on first boot
cat > /boot/wpa_supplicant.conf <<'EOF' # join Wi-Fi headless
country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={ ssid="MyNet" psk="MyPass" }
EOF
# === First boot ===
# Rootfs auto-expands to fill the card (raspi-config / the image's firstboot does this).
# Then: ssh <user>@<hostname>.local (mDNS) or ssh <user>@<ip-from-router>
# Set a strong password immediately; change the default if the image shipped one.
Tip. Keep a spare “known-good” imaged card in your kit. If a card corrupts in the field, swap and reboot — recovery is a card swap, not a reflash.
12.6 Programming environment quick-start
It’s a Debian aarch64 box. Develop over SSH with ordinary toolchains; for on-screen apps, use the czdev workflow that targets the 320×170 LCD with LVGL.
# === Get in ===
ssh user@cardputer-zero.local
sudo apt update && sudo apt install -y build-essential python3 git i2c-tools
# === Plain programs: build natively on-device ===
gcc hello.c -o hello && ./hello # C/C++ via gcc/g++ (slow but works; or cross-compile on a PC)
python3 script.py # Python is first-class on Debian
# === On-screen LVGL apps via czdev (CardputerZero-AppBuilder) ===
czdev doctor # check the toolchain/SDK is healthy
czdev run # build + launch in the SDL2 desktop emulator (320×170 LCD in a keyboard skin)
czdev watch # rebuild-on-save loop while iterating
czdev build # package the app as an installable .deb
# App ABI is tiny: #include <cz_app.h>
# void app_main(lv_obj_t *parent); void app_event(int type, void *data);
# Online mode: submit any public Git repo with app-builder.json → get a ready-to-install .deb.
# === Install apps from the store (on-device) ===
# Open the AppStore app, browse, install — it pulls .deb from CardputerZeroRepository
# (the official APT/.deb repo served via GitHub Pages). Or: sudo apt install <pkg>
Note. The desktop emulator (Rust/SDL2) runs on macOS / Linux / Windows (MSYS2), so you can develop and test Zero apps with no physical device. Publishing commands (
login/publish/bump) need only Python 3. See Vol 10 for worked app examples.
12.7 Battery life realism table
Pack: 3.7 V × 1500 mAh ≈ 5.55 Wh. This is a Linux SoC, not an MCU — there is no µA deep-sleep; idle draw is real (~2.5 W). Figures below are estimates anchored to the Cardputer Zero’s confirmed idle and to the Raspberry Pi Zero 2 W (same RP3A0 SiP); verify against the BQ27220 gauge on the unit in hand.
Table 3 — 7. Battery life realism table
| Mode | Est. power | Est. current @3.7V | Est. runtime (5.55 Wh) |
|---|---|---|---|
| Idle, display dim (confirmed anchor ~2.5 W) | ~2.5 W | ~675 mA | ~2.2 h |
| Light CLI / SSH session | ~2.8 W | ~755 mA | ~2.0 h |
| Wi-Fi recon (scan/monitor) | ~3.3 W | ~890 mA | ~1.7 h |
| Sustained Wi-Fi TX + display full | ~4.0 W | ~1080 mA | ~1.4 h |
| Heavy: USB-A adapter + Ethernet + CPU-bound | ~4.7 W | ~1270 mA | ~1.2 h |
All rows except the idle anchor are estimates — Linux power draw swings with peripherals (USB-A adapters, Ethernet PHY, camera) and CPU load. Practical rule: plan for ~1.5–2 h of active field use per charge; carry a USB-C power bank for anything longer. Charge/telemetry is via USB-C + the BQ27220 gauge (Vol 7).
Runtime (est.) — bars ∝ hours
Idle/dim ██████████████████████ ~2.2 h
CLI/SSH ████████████████████ ~2.0 h
Wi-Fi recon █████████████████ ~1.7 h
Wi-Fi TX ██████████████ ~1.4 h
Heavy ████████████ ~1.2 h
12.8 Region rules quick reference
The Zero’s radios are 2.4 GHz Wi-Fi (b/g/n) + BT 4.2/BLE on-module, plus optional sub-GHz via Cap modules on the EXT bus (Cap LoRa, Cap CC1101). Wi-Fi/BLE TX power is set by the Linux driver + your country= regulatory domain — set it correctly (raspi-config / iw reg set XX / wpa_supplicant country=).
Table 4 — 8. Region rules quick reference
| Band / radio | Path | Region notes |
|---|---|---|
| 2.4 GHz Wi-Fi | On-module wlan0 | US FCC §15.247 / EU EN 300 328 (+20 dBm, duty cycle) / JP ARIB STD-T66. Driver-clamped to the set country=. |
| BLE 4.2 | On-module | Same 2.4 GHz ISM regulatory regime; low power. |
| Sub-GHz LoRa | Cap LoRa over EXT | Region band-specific: US 902–928 MHz, EU 863–870 MHz, AU 915–928, etc. Set the Meshtastic/meshtasticd region to match. |
| Sub-GHz / NFC | Cap CC1101 over EXT | CC1101 ISM bands (315/433/868/915 MHz) — pick the legal band for your region. |
| 5 GHz Wi-Fi | USB-A adapter | Not on-module; if you add a USB Wi-Fi dongle, its 5 GHz channels follow your reg domain (DFS/indoor rules apply). |
For any TX (deauth, evil portal, LoRa beaconing, sub-GHz): written authorization is required, period. Set
country=before transmitting; an unset/00domain restricts channels and power. See../_shared/legal_ethics.mdand Vol 11.
12.9 Troubleshooting flow
Linux symptoms, Linux fixes. (No “reinstall ESP32 USB driver / reflash via esptool” — there is none.)
No boot / no display?
├─ Power: use a 5V/2A USB-C supply (a weak charger under-volts the CM0).
├─ Watch for the boot splash (circle-boot-splash). Nothing at all → power/SD.
├─ Re-image the microSD on a PC (§5) — silent SD failure is the #1 cause.
├─ Reseat the microSD; try a different known-good card.
└─ Persistent → likely hardware; vendor support.
No network?
├─ ip a → is eth0 / wlan0 present and UP?
├─ rfkill list → Wi-Fi/BT soft- or hard-blocked? → rfkill unblock all
├─ Wi-Fi won't join → check wpa_supplicant.conf (ssid/psk/country=); journalctl -u wpa_supplicant
├─ Wrong reg domain → iw reg set <CC> (channels/power clamped if unset)
└─ Ethernet dead → try another cable/port; dmesg | grep eth
SD corruption / won't mount?
├─ Always shut down cleanly: sudo poweroff (yanking power corrupts the card)
├─ fsck the card on a PC; if rootfs is damaged, re-image (§5).
├─ Recurring corruption → suspect a fake/worn card; use a name-brand A1/A2 card.
└─ Keep a spare imaged card in the kit — swap, don't fix, in the field.
Display / overlay wrong (blank, rotated, no HDMI)?
├─ ST7789v3 panel needs the M5 dtoverlay loaded — check /boot/config.txt.
├─ Missing/garbled LCD → confirm the dtoverlay + cm0-firmware kernel match the image.
├─ HDMI no signal → set hdmi_force_hotplug / hdmi_group/mode in config.txt.
└─ Wrong rotation → display_rotate / panel orientation in config.txt or the overlay.
Camera/IMU absent (Full unit)?
├─ libcamera-hello --list-cameras empty → check CSI ribbon seating + camera dtoverlay.
├─ i2cdetect shows no BMI270 → I²C bus/overlay not enabled (raspi-config → Interface → I²C).
└─ Confirm you actually have a Full (Lite omits camera + IMU by design — §4).
Thermal throttle / sluggish?
├─ vcgencmd measure_temp + get_throttled → throttling under sustained load is normal (no fan).
└─ 512 MB is the real ceiling: free -h; heavy tools (GNU Radio, big wordlists) → use a laptop/Pi 5.
12.10 Pre-engagement checklist (printable)
SD / OS
[ ] Boot from a KNOWN-GOOD imaged microSD (tested this build)
[ ] Spare imaged microSD in the kit (swap-to-recover)
[ ] Rootfs expanded; OS + tools updated (apt update && apt full-upgrade)
[ ] Strong unique user password set; default creds changed/removed
[ ] SSH key-only auth if possible; note the hostname/IP
POWER
[ ] Battery charged (gauge reads full); 5V/2A USB-C supply on hand
[ ] USB-C power bank for runs > ~1.5 h (see §7)
[ ] Safe-shutdown plan: `sudo poweroff` — NEVER yank power (SD corruption)
RADIOS / RF
[ ] country= / reg domain set to the venue's country
[ ] Disable unused radios (rfkill block wifi/bluetooth) to cut draw + footprint
[ ] Cap LoRa / CC1101 region band set correctly (if fitted)
[ ] USB monitor-mode Wi-Fi adapter if serious 802.11 work (on-module is driver-limited)
SECRETS / POSTURE
[ ] Sensitive material encrypted at rest (LUKS / gocryptfs / encrypted file) —
the microSD is trivially readable if the unit is lost
[ ] No client creds/keys left in shell history or /home; clear known_hosts as needed
[ ] Sanitization plan: wipe/re-image the card post-engagement
[ ] Written authorization in hand for ANY transmit/active testing
FINAL
[ ] All above checked — proceed
12.11 Key references in one block
Vendor / product
M5Stack shop shop.m5stack.com
M5Stack docs (Cardputer Zero) docs.m5stack.com
M5Stack community community.m5stack.com
Kickstarter campaign launched 2026-05-26
OS / boot (CardputerZero + m5stack GitHub orgs)
cardputer-zero-os github.com/CardputerZero/cardputer-zero-os
pi-gen (M5 image builder) github.com/CardputerZero/pi-gen
m5stack-imager github.com/CardputerZero/m5stack-imager
cm0-firmware (kernel+modules) github.com/dianjixz/cm0-firmware
linux dtoverlays github.com/m5stack/m5stack-linux-dtoverlays
u-boot / circle-boot-splash github.com/CardputerZero/{u-boot,circle-boot-splash}
Desktop / shell (Wayland, 320×170)
cardputer-zero-shell github.com/CardputerZero/cardputer-zero-shell
default-apps / notifyd github.com/CardputerZero/cardputer-zero-{default-apps,notifyd}
fcitx5-ui (input method) github.com/CardputerZero/cardputer-zero-fcitx5-ui
App SDK + store
czdev / CardputerZero-AppBuilder github.com/m5stack/CardputerZero-AppBuilder
M5Stack_Linux_Libs github.com/m5stack/M5Stack_Linux_Libs
LVGL app template github.com/CardputerZero/template
CardputerZeroRepository (.deb) github.com/m5stack/CardputerZeroRepository
AppStore (on-device) github.com/CardputerZero/AppStore
CardputerZero Hub cardputerzero.github.io
Example apps (real, in-org)
Calculator / 2048 / Calendar github.com/CardputerZero
CameraApp (IMX219) / RFID (NFC) github.com/CardputerZero
Retro-Zero (libretro) github.com/geo-tp/Retro-Zero
trail-mate (GPS/LoRa/Maps) github.com/CardputerZero/trail-mate
Raspberry Pi (CM0 = Pi Zero 2 W silicon — applies directly)
Raspberry Pi OS / raspi-config raspberrypi.com
libcamera / IMX219 stack libcamera.org
Raspberry Pi Imager github.com/raspberrypi/rpi-imager
Linux security tooling (run as normal processes)
aircrack-ng / Kismet / bettercap / hostapd / nmap / tcpdump / scapy / BlueZ
meshtasticd (Linux Meshtastic) meshtastic.org
rtl_433 / dump1090 (USB SDR) via USB-A host
Sibling Hack Tools / peer references
Cardputer ADV (ESP32 — lineage only) ../M5Stack Cardputer ADV/
Cyberdecks (Linux handhelds: uConsole/PicoCalc) ../../Cyberdecks/
Hack Tools comparison ../_shared/comparison.md
Legal / ethics ../_shared/legal_ethics.md
Regulatory
US FCC fcc.gov (47 CFR §15.247)
EU ETSI etsi.org (EN 300 328)
This is the final volume of the M5Stack Cardputer Zero deep dive, reframed to the confirmed CM0 / Linux reality and illustrated with M5Stack’s product photos + annotated board diagrams. The remaining open work is a bench pass: swap in first-party photos of the unit in hand, and confirm the receipt-checklist readings (§3) — addresses, Lite-vs-Full, and BQ27220 telemetry — against the actual hardware.
Comments (0)