Breadboard Prototyping Guide
Step-by-step guide to assemble the ESP32 Emu Turbo prototype on a breadboard.
Required Tools
- Breadboard (830 points, or 2x smaller ones)
- Jumper wires (M-M, M-F, F-F assorted)
- Multimeter
- USB-C cable
- Soldering iron (for speaker wires and module headers)
Step-by-Step Wiring
Step 1: Power Rail
Connect the IP5306 USB-C module to provide 5V power, then regulate down to 3.3V with a buck module. On breadboard an MP1584 mini module is the easiest stand-in for the SY8089AAAC used on the PCB — set its trimmer to 3.3V with NO load connected before wiring it to anything.
The buck needs an input cap (22µF ceramic), an output cap (22µF ceramic) and its inductor close together — the input loop is the high di/dt path. Use ceramic, not tantalum: the ESR window that made a tantalum mandatory belonged to the old LDO, and a reversed tantalum is what destroyed prototype #1 (incident).
Step 2: ESP32-S3 DevKit
Place the ESP32-S3 N16R8 DevKitC-1 on the breadboard.
Add decoupling capacitors:
- 100nF ceramic cap between 3V3 and GND (close to the module)
Step 3: Display Connection (8080 Parallel)
Connect the ILI9488 3.95" display panel with 8-bit 8080 parallel interface (via 40-pin FPC). FPC pin numbers from the ILI9488 panel datasheet:
| FPC Pin | Signal | Wire to | ESP32-S3 GPIO |
|---|---|---|---|
| 6 | VDDI | 3.3V rail | — |
| 7 | VDDA | 3.3V rail | — |
| 5, 16, 37 | GND | GND rail | — |
| 17 | DB0 | jumper | GPIO4 |
| 18 | DB1 | jumper | GPIO5 |
| 19 | DB2 | jumper | GPIO6 |
| 20 | DB3 | jumper | GPIO7 |
| 21 | DB4 | jumper | GPIO8 |
| 22 | DB5 | jumper | GPIO9 |
| 23 | DB6 | jumper | GPIO10 |
| 24 | DB7 | jumper | GPIO11 |
| 9 | CS | jumper | GPIO12 |
| 15 | RESET | jumper | GPIO13 |
| 10 | DC/RS | jumper | GPIO14 |
| 11 | WR | jumper | GPIO46 |
| 12 | RD | 3.3V rail | — (tied HIGH, no read-back) |
| 33 | LED-A (BL) | 3.3V rail via a series resistor on the breadboard (the PCB feeds it from +5V through R27, 20 Ω) | — (always-on backlight) |
| 34-36 | LED-K | GND rail | — |
| 38 | IM0 | 3.3V rail | — (HIGH for 8-bit 8080) |
| 39 | IM1 | 3.3V rail | — (HIGH for 8-bit 8080) |
| 40 | IM2 | GND rail | — (LOW for 8-bit 8080) |
Use colored wires for the 8 data lines (e.g., rainbow order) to make debugging easier. Use a different color for control lines.
Step 4: SD Card Module
Connect the SD card SPI module:
| SD Module Pin | Wire to | ESP32-S3 GPIO |
|---|---|---|
| VCC | 3.3V rail | — |
| GND | GND rail | — |
| MOSI | jumper | GPIO44 |
| MISO | jumper | GPIO43 |
| CLK | jumper | GPIO38 |
| CS | jumper | GPIO39 |
Step 5: Audio
There is no external I2S DAC. The ESP32-S3 drives the amplifier directly with PDM sigma-delta on a single pin — the PAM8403's analog input plus the DC-blocking cap reconstruct the waveform, so GPIO15/16 stay unused.
| Connection | From | To |
|---|---|---|
| PDM data (I2S_DOUT) | GPIO17 | 0.47 µF cap (C22) → PAM8403 INL/INR (pins 7 & 10) |
| Input bias | 20 kΩ from each input | PAM8403 VREF (pin 8), not GND |
| VREF bypass | 100 nF | PAM8403 pin 8 → GND |
| PAM8403 VCC | 5V rail | PAM8403 VDD/PVDD |
| PAM8403 GND | GND rail | PAM8403 GND |
| PAM8403 SPK+ | wire | Speaker (+) |
| PAM8403 SPK- | wire | Speaker (-) |
Step 6: Buttons
For each button, wire a 6x6mm tact switch with a 10kΩ pull-up resistor:
Button wiring table:
| Button | GPIO | Wire Color (suggested) |
|---|---|---|
| UP | GPIO40 | White |
| DOWN | GPIO41 | White |
| LEFT | GPIO42 | White |
| RIGHT | GPIO2 | White |
| A | GPIO1 | Red |
| B | GPIO48 | Blue |
| X | GPIO47 | Yellow |
| Y | GPIO21 | Green |
| START | GPIO18 | Orange |
| SELECT | GPIO0 | Orange |
| L | GPIO45 | Purple (internal pull-up only — no external R) |
| R | GPIO3 | Purple |
Step 7: USB Data (Native USB)
GPIO19 and GPIO20 are used for native USB data (D-/D+). On the DevKit, these are already connected to the USB-C connector — no additional wiring needed. USB-C now carries both power (charging) and data (firmware flash + debug console).
The optional PSP joystick has been removed from the design. The D-pad provides full SNES/NES control.
Wiring Checklist
Before powering on, verify with a multimeter:
- 3.3V rail is NOT shorted to GND
- 5V rail is NOT shorted to GND
- Buck input cap (22µF ceramic) sits close to VIN/GND — short loop
- Buck output cap (22µF ceramic) and inductor are connected
- All display data lines (D0-D7) are connected to correct GPIOs
- Display control lines (CS, RST, DC, WR, RD) are correct
- SD card SPI lines are not swapped (MOSI/MISO confusion is common)
- Button pull-up resistors are connected to 3.3V, not 5V
- No wires touching where they shouldn't
Double-check all connections with a multimeter in continuity mode. A short circuit on the 3.3V rail can damage the ESP32-S3 permanently.
Testing Procedure
Test 1: Power
- Connect USB-C to IP5306 module
- Verify 5V on the 5V rail with multimeter
- Verify 3.3V on the 3.3V rail
- Check the regulator is not getting hot. A buck runs near ambient — any warmth at all means a short downstream
Test 2: ESP32-S3 Boot
- Connect ESP32-S3 DevKit via USB
- Open serial monitor (115200 baud)
- Press reset button — you should see boot messages
- Flash a simple "Hello World" sketch
Test 3: Display
- Flash a display test program (solid color fill)
- Verify all pixels light up uniformly
- Test basic graphics (rectangles, text)
- If the display is garbled, check D0-D7 wiring order
Test 4: SD Card
- Insert a FAT32-formatted micro SD card
- Flash SD card test program
- Verify file listing and read operations
- Test write speed (should be >1 MB/s over SPI)
Test 5: Buttons
- Flash a button test program that prints GPIO state
- Press each button individually and verify correct GPIO triggers
- Check for bouncing (rapid on/off) — debounce caps should prevent this
- Test simultaneous button presses (D-pad + face button combos)
Test 6: Audio
- Flash an audio test program (sine wave or beep)
- Verify sound output from speaker
- Test volume control via PAM8403 potentiometer
- Check for crackling or distortion (adjust I2S buffer size if needed)
Test 7: Emulation
- Flash NES emulator firmware (start simple)
- Load a test ROM from SD card
- Verify display, controls, and audio work together
- Test SNES emulator — load a simple game
- Monitor frame rate (target: 60 fps NES, best-effort SNES)
Common Issues
| Problem | Likely Cause | Solution |
|---|---|---|
| Display shows nothing | BL not connected or wrong GPIO | Connect BL to 3.3V directly to test |
| Display shows garbled image | D0-D7 wired in wrong order | Check each data line individually |
| SD card not detected | MOSI/MISO swapped | Swap the two wires |
| Buttons always read LOW | Pull-up resistor missing | Add 10kΩ to 3.3V |
| Audio crackling | Buffer underrun | Increase I2S DMA buffer size |
| ESP32-S3 won't boot | EN pin floating | Add 10kΩ pull-up + 100nF cap |
| Regulator hot, or buck in hiccup | Excessive current draw | Check for shorts on the 3.3V rail |