Electronics

Multi-Pass (DC27) · Volume 1

Multi-Pass (DC27) — Volume 1

Introduction

The Multi-Pass is BoZe’s Fifth Element-themed indie badge from DEF CON 27 (August 2019). The Multi-Pass is famously the document Korben Dallas keeps having to flash at officials — so the badge is, literally, a portable e-paper display you can flash. It’s also a competent ESP32-class embedded platform with a real firmware ecosystem behind it (badge.team).

This volume is the hardware tour. Vol 2 covers the badge.team / MicroPython app stack; vol 3 walks through writing a custom app.

📷 Hero photo: 03-outputs/figs/multi_pass_hero.jpg (TBD — pull from Hackaday.io project page or Openverse).

1. Block diagram

+--------+        +--------------+        +----------+
|  USB   | <----> | CP2102 UART  | <----> |          |
+--------+        +--------------+        |          |
                                          | ESP32-   |
+--------+        +--------------+        | WROOM    |        +------------+
|  LiPo  | <----> | TP4056 chg   | -----> | (16 MB)  | <----> | 2.9" EPD   |
| 1000mAh|        +--------------+        |          |        | 296x128    |
+--------+                                |          |        +------------+
                                          |          |        +------------+
                  +--------------+        |          | <----> | MPR121     |
                  | ATmega48     | <----- |          |        | (cap touch)|
                  | (LED coproc) |        |          |        +------------+
                  +------+-------+        |          |        +------------+
                         |                |          | <----> | µSD slot   |
                         v                +----+-----+        +------------+
                  +--------------+             |
                  | 13 LEDs      |             v
                  +--------------+      +--------------+
                                        | 2× SAO       |
                                        | (v1.69bis)   |
                                        +--------------+

2. Compute: ESP32-WROOM (16 MB)

  • Dual-core Tensilica Xtensa LX6 at 240 MHz
  • 520 KB SRAM
  • 16 MB SPI Flash (large for ESP32-class — most badges use 4 MB)
  • WiFi 802.11 b/g/n + Bluetooth 4.2 (Classic + LE)
  • The extra Flash matters for the badge.team app store — apps + Python interpreter + media all coexist

3. Display: 2.9” e-paper 296×128

  • Grayscale e-paper, zero-power persistence (image stays after power-off)
  • Full refresh: ~1.5 s typical, with visible flash sequence
  • Partial refresh: faster (~0.3 s) but ghosts after several updates — needs occasional full refresh to clear
  • Driven by ESP32 SPI; exact controller IC to confirm from schematic (typically a UC8151 or SSD1675 family for this panel size)

App design implication: budget refreshes. Apps that try to animate at video frame rates will look terrible and burn battery. Status displays and slow UIs are the sweet spot.

4. Input: MPR121 capacitive touch

  • 12-channel cap-touch controller, I²C-attached
  • The Multi-Pass uses some channels for the front-panel touch buttons (exact count TBD from schematic)
  • Configurable thresholds; debouncing handled in MPR121 hardware

5. LED coprocessor: ATmega48 + 13 LEDs

This is the most interesting design choice. The ESP32 has plenty of GPIO and could drive LEDs directly via PWM — but a dedicated AVR ATmega48 runs the LED show, freeing the ESP32 to do real work without interrupt jitter affecting LED smoothness.

  • 13 individually-addressable LEDs
  • ATmega48 communicates with ESP32 via UART or I²C (TBD from schematic)
  • The ATmega48 has its own firmware — modifying LED behavior may require flashing the AVR via ICSP separately from the ESP32

6. Power

  • 1000 mAh single-cell LiPo
  • TP4056 USB charger (constant-current then constant-voltage; default 1 A charge, configurable via Rprog)
  • Separate power switches for badge and LED sections — clever, lets you keep the badge running but kill the LED light show (which probably dominates current draw)
  • CP2102 USB-UART for programming + console

Battery age note: 2019-era LiPos in 2026 are likely degraded. Capacity check + possible replacement before any serious use.

7. Storage

  • 16 MB SPI Flash (ESP32-WROOM internal) — primary
  • micro-SD slot — secondary, presumably for apps + media via badge.team

8. Expansion: dual SAO v1.69bis

  • Two SAO (Shitty Add-On) headers, both v1.69bis (the more-common-than-not variant)
  • 4-pin: GND, +3V, SDA/Tx, SCL/Rx
  • Twice the SAO real estate of most badges — supports two add-ons or a chain

9. Software entry points

  • MicroPython on badge.team — boot loader hands off to the app loader, apps run as user Python with access to a wrapped HAL
  • App repository — apps installable over WiFi from badge.team’s repo
  • Native C / ESP-IDF — possible but loses the app ecosystem; reserve for performance work

10. What stands out

  • E-paper choice is rare for badges (most go RGB LED matrix or OLED) and well-suited to the Multi-Pass theme (a document, not a screen)
  • ATmega48 LED coprocessor is overkill in transistor count but elegant in software separation
  • Dual SAOs + 16 MB Flash + battery + SD = “real platform” not “toy”

References

  • Schematic PDF (release date TBD — BoZe committed to post-DC27 release; check 02-inputs/research/ after pulling)
  • 02-inputs/research/ — upstream repo clone (CromulonB/DC27-MULTI-PASS per Hackaday.io)
  • Hackaday articles + Hackster writeup — see 02-inputs/research/links.md
  • badge.team platform docs: https://badge.team/