This project documents a 25-day bring-up of a hardware-native carrier for AI coding workflows: Arduino UNO Q running Claude Code locally on its Linux side, driving a 7.3" Good Display GDEP073E01 colour e-paper as a dashboard for agent state.
The full bring-up retrospective (with all toolchain bugs, the 10-day PLL miscalibration, the SPD1657A controller correction, and seven verified production recipes) is published as a project log below — please read §VI–VIII before writing any custom-LUT code on this panel.
Key facts for the community: controller is SPD1657A (not SPD1656), IC version 0x04, ~85% command-compatible with seven-colour panels — but key LUT-unlock paths silently no-op.
Project log · Arduino UNO Q + GDEP073E01 7.3" colour e-paper · April–May 2026
Status: Beta 1 · 7 production recipes verified · 40+ memory documents on board
Status flag for the community: This log contains corrections to several widely cited assumptions about GDEP073E01 — most importantly, the controller is SPD1657A, not SPD1656, and the seven-colour panel codebases that the community has been copying for the six-colour panel will silently fail in specific ways documented below. If you are working on Spectra 6, please read §VI–VIII before writing any custom-LUT code.
I. Project Summary
The goal is to build a hardware-native carrier for AI coding workflows — a dedicated peripheral that displays the running state of Claude Code on a low-glare, reflective, always-on colour surface. The form factor we converged on:
Local agent host: Arduino UNO Q running Debian on its Qualcomm Dragonwing QRB2210 (4×A53 @ 2.0 GHz). Claude Code is installed on the board itself, not on a host PC. No network service is required between agent and display.
Real-time bridge: ST STM32U585 (Cortex-M33 @ 160 MHz, 786 KB SRAM) running Zephyr RTOS, driving the panel over 10 MHz SPI with strict timing.
A 5-zone dashboard layout maps Claude Code's lifecycle events (UserPromptSubmit, PreToolUse, PostToolUse, Stop) to e-paper regions with throttling discipline (partial refresh ≥3 s, full refresh ≥60 s, force-scrub every 20 partials).
This log covers the 25 days from drafting the design document to verifying seven reproducible production recipes for the 6→8-colour rendering pipeline. Most of those 25 days were not spent on waveform design — they were spent debugging the toolchain.
II. Bill of Materials
Component
Specifics
Notes
Arduino UNO Q
QRB2210 (Linux MPU) + STM32U585 (Zephyr MCU)
Dual-brain architecture; ~$70
Good Display GDEP073E01
7.3" / 800×480 / Spectra 6 / 4 bpp
E Ink ACeP family, ~$45
DESPI-C73
FPC-to-DIP adapter for GDEP073E01
Standard 8-pin breakout
Wiring
7 × jumper wires, 3.3 V only
5 V kills SPD1657A; not warrantable
USB-C cable
5 V / 3 A PD-capable
Direct drive — no external PSU needed (see §IV.3)
Wiring map
DESPI-C73 silkscreen
UNO Q pin
Notes
3.3V
3V3
Not 5V
GND
GND
SDI
D11 (SPI2_MOSI)
SCK
D13 (SPI2_SCK)
CS
D10
See §III.3 — SPI2 NSS conflict
D/C
D9
RES
D8
BUSY
D7
III. Phase 0: Three Bugs That Made "Upload Successful" Mean Nothing
The first day on hardware (2026-04-20) produced no visible result on the panel despite three "successful" sketch uploads. Root cause analysis revealed three independent failure modes stacked on top of each other.
III.1 The crab watcher service silently overwrites your sketch
UNO Q ships with a Linux-side crab service that periodically rewrites the bound sketch back to a vendor default. Symptom: your code uploads, runs once, and then disappears.
III.2 arduino-flash writes to the bootanimation partition
A more pernicious bug. The arduino-flash shell script hard-codes the target partition to bootanimation (presumably leftover boilerplate). Uploads report success — because the partition write did succeed — but the STM32 firmware never updates.
The correct path is the arduino-app-cli flow:
arduino-app-cli app create my-eink-app
# (copy your sketch into the standard structure)
arduino-app-cli app start my-eink-app
Implication: every "successful upload" log line from arduino-flash should be cross-validated against actual MCU behaviour. We spent days debugging panel timing before discovering the firmware hadn't actually changed.
III.3 SPI2 hardware NSS hijacks D10
D10 on the UNO Q maps to STM32 pin PB9, which the Zephyr device tree pre-assigns...