M5Stick S3 · Volume 2
M5Stack M5StickS3 Volume 2 — Hardware Deep Dive
ESP32-S3-PICO-1-N8R8 SIP + ST7789P3 display + audio chain + 6-axis IMU + IR TX/RX + 250 mAh power tree
Contents
1. About this volume
Vol 2 walks the M5StickS3 hardware at functional-block level. The audio chain gets a summary here and the full deep dive in Vol 5 (the standout-feature volume). Pinout details live in Vol 3.
Disclosure on depth: M5Stack does not publish a full M5StickS3 schematic PDF. This volume describes the design pattern using vendor docs at docs.m5stack.com, chip datasheets for the named components, and community teardowns. Specific component values (resistor values, capacitor sizes, exact PCB-trace lengths) are not publicly available; functional-block level is the practical limit. Where vendor docs pin down a specific part number, this volume cites it; everywhere else, the description is at “an N-channel I²S codec” rather than “specifically X chip.”
2. The ESP32-S3-PICO-1-N8R8 SIP module
The M5StickS3 is built around ESP32-S3-PICO-1-N8R8 — Espressif’s most-integrated ESP32-S3 form factor.
2.1 SoC specifications
| Parameter | Value | Notes |
|---|---|---|
| Core | Xtensa LX7 dual-core @ 240 MHz | LX7 not LX6 — incompatible binary with classic ESP32 (StickC family) |
| RAM | 512 KB SRAM | Same as Cardputer ADV |
| Flash | 8 MB (in-package) | Same as Cardputer ADV’s ESP32-S3FN8 |
| PSRAM | 8 MB OPI (in-package) | Differs from Cardputer ADV — Cardputer ADV has NO PSRAM. PSRAM is the M5StickS3’s standout hardware advantage in the family |
| Wi-Fi | 2.4 GHz only, 802.11 b/g/n (Wi-Fi 4) | No 5 GHz. Same silicon limit as Cardputer ADV |
| Bluetooth | BT 5.0 LE only | No BT classic. ESP32-S3 silicon limitation |
| USB | Native USB-OTG full-speed (12 Mbps) | No UART bridge chip — direct ESP32-S3 USB peripheral |
| Crypto | Hardware AES-128/192/256, SHA-1/224/256/384/512, RSA, ECC, secure boot v2, flash encryption | Standard ESP32-S3 |
| GPIO count | ~47 routed externally on the PICO-1 SIP | Plenty for M5StickS3’s modest peripheral count |
2.2 Why no BT classic matters
ESP32-S3 has no Bluetooth Classic radio — BLE 5.0 only. The classic ESP32 in the StickC Plus 2 supports BT classic enumeration (Bluetooth speakers, headsets, legacy peripherals); the M5StickS3 cannot.
Operational implication: if BT-classic enumeration is the use case (rare in 2026; almost everything has moved to BLE), the M5StickS3 is the wrong tool. Use M5StickC Plus 2 (classic ESP32 silicon) for that niche. For everything else, the M5StickS3 wins on silicon class.
2.3 Why OPI PSRAM matters
The PICO-1-N8R8 includes 8 MB of Octal-SPI (OPI) PSRAM — an 8-data-line interface to external pseudo-static RAM, integrated into the SIP package.
This is the single biggest hardware-tier advantage the M5StickS3 has over the Cardputer ADV:
| Use case | Without PSRAM (Cardputer ADV) | With 8 MB OPI PSRAM (M5StickS3) |
|---|---|---|
| Wi-Fi scan-result buffer | Capped at ~500 entries (RAM-limited) | Can hold ~5000+ entries |
| Audio recording buffer | Limited to seconds (16 KB chunks to SD) | Multi-minute buffers in PSRAM |
| MicroPython heap | ~150 KB usable | ~1.5 MB+ usable (10× more comfortable) |
| Image / framebuffer | Single buffer max | Multiple buffers, double-buffering possible |
| Wake-word model storage | esp-skainet Multinet5 ~800 KB — must mmap from flash | Loaded into PSRAM at boot — faster + less flash wear |
| Large WAV file streaming | SD-card-bound | PSRAM-bound (much faster) |
The OPI PSRAM build flag is mandatory:
board_build.arduino.memory_type = qio_opi ; ← REQUIRED for M5StickS3 builds
This translates to ESP-IDF’s CONFIG_SPIRAM_MODE_OCT=y. Without it, PSRAM doesn’t initialize, ESP.getFreePsram() returns 0, and any firmware that assumed PSRAM availability degrades silently. Most-common new-user mistake when porting Cardputer-ADV firmware to M5StickS3.
2.4 SIP vs WROOM — the form-factor delta
ESP32-S3 ships in two main module form factors that M5Stack uses across its lineup:
| Module | Used in | Package size | Pin density |
|---|---|---|---|
| PICO-1 (System-in-Package) | M5StickS3, some M5Atom variants | ~13×16 mm | High — minimal external components |
| WROOM-1 (canonical module) | Cardputer ADV (Stamp-S3A is WROOM-1-based) | ~18×25 mm | Medium — antenna trace + standard pin spacing |
The PICO-1 is denser because more components (flash, PSRAM) are inside the SIP package. The WROOM-1 has the same silicon but more external. For the M5StickS3’s 48×24×15 mm enclosure, the PICO-1’s compact size is necessary.
PCB-trace antenna is on the SIP package itself — no separate antenna trace on the M5StickS3 mainboard. Range characteristics: line-of-sight 30-50 m at +20 dBm, comparable to Cardputer ADV.
3. Display — ST7789P3 1.14″ 135×240 IPS
The M5StickS3 uses a 1.14″ IPS LCD with the ST7789P3 controller. The “P3” suffix is a slight variant of the more-common ST7789V2; M5Unified handles both transparently.
| Parameter | Value | Notes |
|---|---|---|
| Controller | Sitronix ST7789P3 | M5Unified driver supports |
| Resolution | 135 × 240 (portrait native) | Smaller than Cardputer ADV’s 240×135 landscape |
| Pixel density | ~260 PPI | Same as Cardputer ADV (same panel class) |
| Interface | SPI 4-wire (MOSI + SCK + CS + DC) + RST + BL | DC = data/command. BL = PWM-able backlight |
| Clock | 40 MHz typical, pushable to 60 MHz | At 40 MHz, full-screen refresh ~17 ms |
| Refresh rate | ~30 fps realized | Smooth for menu / FFT visualization |
| Bus | Dedicated SPI to ESP32-S3 | No microSD on M5StickS3 — no bus contention |
| Backlight | PWM via GPIO | M5Unified M5.Display.setBrightness(0-255) |
| Touchscreen | None | Buttons-only input |
Visible text capacity at default 6×8 font:
- Portrait (135 × 240): ~22 columns × ~30 rows
- Landscape (240 × 135 via
setRotation(1)): ~40 columns × ~16 rows
UI patterns from Cardputer ADV (240×135 landscape) need re-flow for M5StickS3 (135×240 portrait). 22 columns is materially fewer than 40 — text labels need shortening or font-size adjustment.
4. Buttons + tactile inputs
The M5StickS3 has programmable buttons in the StickC-family layout (verify on hardware — vendor product page doesn’t fully document):
- Button A: top-front, primary action
- Button B: side, secondary action
- Power button: side, dual-function — short-press wakes from sleep, long-press (>2 sec) is hardware shutdown
M5Unified API:
M5.update(); // Must call every loop iteration to poll buttons
if (M5.BtnA.wasPressed()) { /* Button A pressed once */ }
if (M5.BtnA.isHeld()) { /* Button A held > ~300 ms */ }
if (M5.BtnA.wasReleased()) { /* Button A released */ }
Long-press power button (>2 sec) is hardware-level — firmware cannot intercept. This is by design; provides an unconditional shutdown path that firmware bugs can’t disable.
Button debounce is handled by M5Unified — typically ~10 ms debounce window.
Two-button UI implications:
The Cardputer ADV has 56-key QWERTY + 4-5 buttons; the M5StickS3 has 2 programmable buttons. This shapes firmware UI design:
- Pattern A: Button A = advance / select, Button B = back / cancel. The most common.
- Pattern B: Button A = cycle through options, Button B = confirm. Used when Button A long-press is unavailable.
- Pattern C: chord patterns (A+B simultaneously) for additional commands. Adds complexity; avoid in user-facing menus.
Pick a pattern and stick with it. Inconsistent button mapping across firmware modes is a common user-experience problem.
5. Audio chain summary (full deep dive Vol 5)
Brief summary; full coverage in Vol 5.
MEMS mic (65 dB SNR) ─→ ES8311 codec ─→ AW8737 amp ─→ 8 Ω 1 W speaker
I²S audio + I²C config (addr 0x18)
Components:
- MEMS microphone — 65 dB SNR, omnidirectional, bottom-firing typical. Voice-grade quality.
- ES8311 — Everest Semiconductor’s 24-bit I²S codec. Same chip as Cardputer ADV. Sample rates 8 kHz / 16 kHz / 22.05 kHz / 44.1 kHz / 48 kHz / 96 kHz.
- AW8737 — Awinic class-D amplifier. 1 W into 8 Ω. Lower noise floor than budget class-D amps.
- 8 Ω 1 W speaker — small mylar cone driver. Audible in quiet rooms (~60 dB SPL @ 30 cm); not loud enough for noisy environments.
The audio chain is the M5StickS3’s standout feature and the focus of Vol 5 (which covers: voice recording, audio FFT, wake-word detection, ESP-NOW walkie-talkie, internet radio, and the covert-audio-recorder legal landscape).
6. IMU — 6-axis (BMI270 or MPU6886 TBD)
The M5StickS3 has a 6-axis IMU (3-axis accelerometer + 3-axis gyroscope) on the shared I²C bus. Specific chip is TBD pending hardware inspection — vendor product page doesn’t specify.
Two likely candidates based on M5Stack’s history:
| Chip | Vendor | Used in | I²C address |
|---|---|---|---|
| BMI270 | Bosch | Cardputer ADV, newer M5Stack designs | 0x68 (alternate 0x69) |
| MPU6886 | TDK / InvenSense | StickC family, older M5Stack | 0x68 (alternate 0x69) |
Both are 6-axis I²C devices at the same address. M5Unified M5.Imu.* API handles both transparently — application code is portable across the two without source changes.
Identify the actual chip on a real device:
#include <Wire.h>
// At 0x68, the WHO_AM_I register is at different addresses:
// BMI270: reg 0x00, expected value 0x24
// MPU6886: reg 0x75, expected value 0x19
Or simply check the M5Unified runtime detection: M5.Imu.getType() returns the detected chip family.
Use cases:
- Shake-to-trigger — BMI270’s built-in “any-motion” interrupt, or MPU6886 + software threshold detection
- Tilt-based navigation — orient-aware menus
- Step counting (BMI270 only — has on-chip pedometer firmware; MPU6886 requires host-side filter)
- POV LED art — accelerometer integrated to position estimate + RGB LED modulation
- Gesture recognition — BMI270’s Bosch BSX algorithms (single tap, double tap, flat / no-flat, significant motion); MPU6886 requires custom DSP
For most use cases, the M5StickS3’s IMU is more capable than the M5StickC family’s older MPU6886 if it turns out to be BMI270, and equivalent if it turns out to be MPU6886.
7. IR transmitter and receiver
The M5StickS3 has BOTH IR TX and IR RX — the differentiator vs the Cardputer ADV (which has TX only).
| Function | Component | Approximate pin (verify on hardware) |
|---|---|---|
| TX | 940 nm IR LED | GPIO 19 typical (M5Stack convention) |
| RX | IR photodiode + modulation detector | GPIO 21 typical |
The IR RX is the unique capability: hold a target remote near the M5StickS3’s IR receiver, press a capture button on the M5StickS3, press the button on the target remote — the M5StickS3 records the modulation pattern (carrier frequency + on/off timing). Save to flash as a named entry. Replay later via the on-board IR TX.
This enables on-device IR code learning — the Cardputer ADV requires a Grove IR Unit with RX as a separate accessory; the M5StickS3 has it integrated.
Supported protocols (via IRremoteESP8266 library or M5Unified’s IR API):
- NEC (most consumer remotes)
- Sony SIRC (12/15/20-bit variants)
- RC5 / RC6 (European)
- Panasonic
- Samsung
- JVC
- Pioneer
- Dish
- Manufacturer-specific raw
Range:
- TX: ~3-5 m line-of-sight (consumer-grade)
- RX: ~10-30 cm (typical for close-range learning; not a passive room scanner)
For TV-B-Gone / AC-B-Gone bulk-attack workflows, the M5StickS3’s TX range is adequate. For room-scale IR monitoring, the RX range is short — get close to the source.
8. USB-C OTG + native USB-CDC
USB-C connector. Native ESP32-S3 USB peripheral — no UART bridge chip (CH340 / CP2104 / FTDI).
USB enumeration paths
This is the most-confusing aspect of the M5StickS3 for users coming from M5StickC Plus 2:
| Device | Bridge chip | Linux path | macOS path |
|---|---|---|---|
| M5StickS3 | None (native USB-CDC) | /dev/ttyACM0 | /dev/cu.usbmodem-* |
| M5StickC Plus 2 | CH340 or CP2104 | /dev/ttyUSB0 | /dev/cu.usbserial-* |
| Cardputer ADV | None (native USB-CDC) | /dev/ttyACM0 | /dev/cu.usbmodem-* |
Common operator mistake: pasting a /dev/ttyUSB0 flash command from a StickC Plus 2 tutorial — won’t find the M5StickS3.
USB modes — Device vs Host (OTG)
Device mode (default): M5StickS3 is a USB peripheral. Host computer enumerates:
- USB CDC serial (
/dev/ttyACM0) - USB HID device (when running BadUSB / BadCard firmwares)
- USB Mass Storage (when explicitly configured)
Host mode (OTG): with a USB-C-to-A adapter, M5StickS3 acts as USB host:
- USB keyboards (less useful on M5StickS3 given the small screen — better on Cardputer ADV)
- USB-to-Serial console adapters (FTDI / CH340 / CP210x / PL2303) — M5StickS3 becomes a portable serial console
- USB mass-storage thumb drives — read/write
- USB MIDI controllers — feed into ES8311 audio
- USB HID inspection — BadUSB Hunter pattern
Build flag selection:
build_flags =
-DARDUINO_USB_MODE=1 ; Device mode (default for most apps)
-DARDUINO_USB_CDC_ON_BOOT=1 ; Native USB-CDC available
; OR for host:
; -DARDUINO_USB_MODE=0 ; Host OTG mode
Switching modes requires a re-flash. Some firmwares (M5Launcher’s BadUSB Hunter) compile both stacks in for runtime switching at greater flash cost.
Bootloader-mode entry
If auto-reset via DTR/RTS fails (rare), manual bootloader entry:
- Press and hold Button A.
- Plug USB-C while holding Button A.
- Release after ~1 second — device is in mask-ROM download mode.
esptool.py / M5Burner / web flashers will now see the device regardless of prior firmware state.
9. Power subsystem — 250 mAh LiPo + PMIC + brownout
The power subsystem is the most-consequential difference vs the Cardputer ADV — the 250 mAh battery defines what the M5StickS3 is good for.
Battery + charge path
USB-C ── (optional side switch) ── Charge controller ── LiPo + ─┐
│
↓
Battery (3.0-4.2 V) ──→ Buck regulator ──→ 3.3 V system rail
│
└─→ PMIC (battery telemetry, charge mgmt)
| Parameter | Value | Notes |
|---|---|---|
| Battery capacity | 250 mAh | A sixth of the Cardputer ADV’s 1750 mAh |
| Battery voltage | 3.7 V nominal, 4.2 V fully charged | Standard single-cell LiPo |
| Charge controller | TP4056-class IC typical | M5Stack hasn’t documented exact chip |
| PMIC | TBD — likely AXP2101 or similar | Verify via i2cdetect scan on real hardware |
| Buck regulator | Drives 3.3 V system rail | Standard |
| Charge current | ~500 mA typical via USB-C | Full charge ~30-45 minutes |
| USB charge | Yes | Side switch may need to be ON — verify (same quirk as Cardputer ADV) |
| Deep sleep current | ~0.5 µA (theoretical) | If firmware uses deep sleep |
Per-mode current draw
| Mode | Current (mA) | Notes |
|---|---|---|
| Deep sleep | ~0.5 µA | Mainline firmwares rarely use this; opt-in |
| Display backlight on, no Wi-Fi / radios | ~50 mA | Backlight dominates |
| Idle (display + Wi-Fi station connected) | ~80 mA | Background traffic |
| Wi-Fi scan continuous | ~120 mA | Radio in RX |
| BLE peripheral active | ~95 mA | BLE radio |
| Sustained Wi-Fi TX (deauth spam) | ~200-280 mA peak | Brownout territory on weak battery |
| Audio playback at low volume | ~150 mA | ES8311 + AW8737 active |
| Audio playback at full 1 W speaker | ~280-320 mA peak | Highest sustained load on the device |
| Audio recording (mic only) | ~95 mA | Light load |
| ESP-NOW walkie-talkie active | ~200-250 mA | Wi-Fi + audio combined |
| Wake-word detection idle | ~85 mA | esp-skainet runs near-idle CPU |
Battery-life estimates (250 mAh full charge)
| Use case | Battery life |
|---|---|
| Display + idle | ~5 hours |
| Wi-Fi scan continuous | ~2 hours |
| Sustained TX-spam | ~50-60 minutes |
| Audio playback at full volume | ~50 minutes |
| Audio recording (mic only) | ~2.5 hours |
| Walkie-talkie active | ~1-1.2 hours |
| Wake-word detection passive | ~3 hours |
Operational implication: the M5StickS3 is not the device for multi-hour engagements. Plan engagements <30 min for safety margin, <2 hours for scan-only passive work. For sustained deployment: tether USB-C power, or pick a different device.
Brownout posture
ESP32-S3 has a brownout detector that trips at ~2.7 V (configurable). The 250 mAh battery + LiPo internal resistance + class-D amp current peaks = tight power budget. Under sustained TX-spam or full-volume audio playback on a weak battery:
- Supply rail dips during current peaks
- If dip exceeds threshold + hysteresis, SoC resets
- Attack/audio appears to “stop working” mid-session — actually the device rebooted
Mitigations:
- Fresh battery — 250 mAh degrades fast; replace every 6-12 months for daily use.
- Known-good USB cable when on USB power (cheap cables drop voltage under load).
- Avoid concurrent SD writes during TX-heavy attacks (not generally applicable — M5StickS3 has no on-board SD).
- Lower audio volume if running audio simultaneously with Wi-Fi.
- Firmware-side rebuild with relaxed brownout —
CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5in sdkconfig for more permissive threshold (Vol 10 § 9 covers the rebuild).
Vol 11 § 4 covers the operational-posture implications in more detail.
10. Mechanical — enclosure, magnetic back, lanyard
| Parameter | Value |
|---|---|
| Dimensions | 48 × 24 × 15 mm |
| Weight | 20 g |
| Material | Polycarbonate-ABS blend (standard M5Stack) |
| Back surface | Neodymium magnets — sticks to ferrous metal |
| Lanyard hole | 2-3 mm diameter through-hole, top edge |
| Operating temperature | 0-40 °C |
The magnetic back is the operationally-distinctive mechanical feature:
- Sticks to fridges, file cabinets, server racks, locker doors — for “leave it running while away” deployments
- Sticks to drone frames — aerial-platform Wi-Fi capture
- Removable from metal surfaces without leaving residue or marks
- Wrist-wear possible with a magnetic-back wristband accessory (third-party)
The 48×24×15 mm dimensions + 20 g weight put the M5StickS3 in smartwatch territory — genuinely wearable in a way the Cardputer ADV (84×54×19.6 mm, 81 g) is not. This is the device’s covert form factor advantage.
Lanyard hole accommodates standard 2-3 mm cord for wrist / neck / keychain wear.
The polycarbonate-ABS enclosure is not waterproof — splash-resistant at best. For outdoor deployments (solar-relay-style), need a third-party weather case. The IP rating is not specified; assume IP21 (touch + dripping water tolerance only).
11. Per-subsystem BOM highlights
Authoritative parts identified from vendor docs:
| Subsystem | Component | Vendor | Datasheet |
|---|---|---|---|
| MCU module | ESP32-S3-PICO-1-N8R8 (SIP) | Espressif | https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf |
| Display controller | ST7789P3 | Sitronix | ST7789P3 datasheet |
| Display panel | 1.14” IPS LCD | Various | Panel-specific |
| Audio codec | ES8311 | Everest Semi | https://www.everest-semi.com/ |
| Audio amplifier | AW8737 | Awinic | Vendor datasheet |
| MEMS microphone | TBD (65 dB SNR omnidirectional) | Various | Verify on hardware |
| Speaker | 8 Ω 1 W mylar cone | Various | Generic |
| IMU | BMI270 OR MPU6886 (TBD) | Bosch / TDK-InvenSense | Both publicly available |
| IR LED | 940 nm SMD | Generic | n/a |
| IR receiver | Modulation-detector IC | Generic | TSOP-class typical |
| Battery | 250 mAh LiPo | M5Stack-sourced | n/a (vendor-specific) |
| Charge controller | TP4056-class | NanJing Top Power | TP4056 family datasheet |
| PMIC | AXP2101 (likely) | X-Powers | Verify on hardware |
Replacement parts:
- Battery: small 251015 / 401015 form-factor LiPos work. JST-PH 2-pin polarity must match.
- IR LED: any 940 nm SMD LED can be hand-soldered if the original fails.
12. What isn’t on board (and where to find it)
Re-statement of capability gaps from Vol 1 § 4.2 with hardware emphasis:
| Missing | Workaround |
|---|---|
| 5 GHz Wi-Fi | M5MonsterC5 add-on (ESP32-C5 coprocessor via Grove) |
| BT classic | Use M5StickC Plus 2 (classic ESP32) for that specific niche |
| NFC controller | Unit RFID2 (Grove I²C) or PN532 module (Grove I²C) |
| microSD slot | Hat2 SD-card holder accessory (when M5Stack ships one) |
| Sub-GHz CC1101 | CC1101 Grove Unit OR custom Hat2 daughterboard |
| LoRa | No path — M5StickS3 has no EXT bus equivalent. Use Cardputer ADV + Cap LoRa-1262 instead |
| Camera bus | Not exposed on M5StickS3 — use M5Stack Core S3 or Atom S3R |
| Cellular modem | NB-IoT / 4G LTE / Cat-M Grove Units (limited by 250 mAh battery for sustained cellular) |
| Ethernet PHY | ATOM PoE Unit via Grove |
| High-precision RTK GNSS | Atomic GPS Kit (NEO-M8N) Grove Unit |
| HF radio (< 300 MHz) | HackRF One for arbitrary RF |
| QWERTY keyboard | Cardputer ADV for typing-heavy workflows |
The M5StickS3 is wearable ESP32-S3 + audio + IR. Outside that envelope, sibling Hack Tools projects cover the gaps.
13. Resources
Datasheets
- ESP32-S3: https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf
- ST7789P3 controller: Sitronix
- ES8311 codec: https://www.everest-semi.com/
- AW8737 amp: Awinic
- BMI270 IMU: https://www.bosch-sensortec.com/products/motion-sensors/imus/bmi270/
- MPU6886 IMU: TDK-InvenSense (legacy, archived)
- TP4056 charge IC: NanJing Top Power
- AXP2101 PMIC (if used): X-Powers
Vendor
- M5Stack M5StickS3 product page: https://shop.m5stack.com/products/m5sticks3-esp32s3-mini-iot-dev-kit
- M5Stack docs: https://docs.m5stack.com/
- ESP32-S3-PICO-1-N8R8 module: https://www.espressif.com/en/products/modules/esp32-s3-pico-1
Libraries
- M5Unified library: https://github.com/m5stack/M5Unified
- M5GFX library: https://github.com/m5stack/M5GFX
- IRremoteESP8266 (works on ESP32): https://github.com/crankyoldgit/IRremoteESP8266
Forward references
- Pinout + expansion buses: Vol 3
- Hat + Unit ecosystem: Vol 4
- Audio subsystem deep dive (the standout): Vol 5
- Firmware ecosystem: Vol 6
- Operational posture / power profile / brownout in detail: Vol 11 § 4
This is Volume 2 of a twelve-volume series. Next: Vol 3 walks the per-pin pinout and the expansion buses — Hat2 16-pin, Grove HY2.0-4P, USB-C OTG.