Skip to the content
PCBKitNew board
2 layers62 × 60 mmSynth phone e v2-hardware v2, the printed circuit board in 3D

Synth phone e v2-hardware v2

UnitedCode/synth-phone-e-v2-rust1

This guide will help you set up your environment for embedded development using Rust. We'll cover the installation of necessary tools and libraries, and show you how to flash your program to a microcontroller and debug…

Size
62 × 60 mm
Copper layers
2
Thickness
1.6 mm
Parts
21
Nets
56
Pads
120
Tracks, vias
353, 7
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Mar 2024
Updated
5 Nov 2026

Overview

Synth phone e v2-hardware v2 is an open-source printed circuit board by UnitedCode, from the UnitedCode/synth-phone-e-v2-rust repository on GitHub. It is a 2-layer board of 62 × 60 mm with 21 parts on 56 nets, routed with 353 tracks and 7 vias.

Its parts include 9 connectors, 4 resistors, 2 ICs, 2 switches and 1 diode. It belongs with the audio and music boards of this library.

README

README.md

Getting Started with Embedded Rust

This guide will help you set up your environment for embedded development using Rust. We'll cover the installation of necessary tools and libraries, and show you how to flash your program to a microcontroller and debug it.

Prerequisites

Ensure you have Rust installed on your system. If not, you can install it from the official Rust website.

Required Libraries and Tools

  1. Add the Rust Target for ARM Cortex-M microcontrollers:

    sh
    rustup target add thumbv7em-none-eabihf
  2. Add LLVM Tools:

    sh
    rustup component add llvm-tools-preview
  3. Install cargo-binutils:

    sh
    cargo install cargo-binutils
  4. Install cargo-embed (actually probe-rs):

    https://probe.rs/docs/getting-started/installation/

    cargo-embed is used for flashing your program to the microcontroller and provides a basic debugger.

Flashing Your Program

To flash your program to a microcontroller, navigate to your project directory in the terminal and run:

sh
cargo xtask embed

This command reads your Embed.toml configuration file (if present) and flashes the program accordingly.

Automated vocal audio tests

The Rust audio lab runs the firmware's pinned vocal DSP on your computer, replays WAV recordings, and sweeps 720 pitch/key/formant settings. It measures pitch error and audio defects without flashing the Daisy.

sh
LAB_HOST=$(rustc -vV | sed -n 's/^host: //p')
cargo test --release --locked --manifest-path tools/audio-lab/Cargo.toml --target "$LAB_HOST"
cargo run --release --locked --manifest-path tools/audio-lab/Cargo.toml --target "$LAB_HOST" -- sweep audio-lab-results
# Execute the ARM DSP in QEMU (requires qemu-system-arm):
cargo run --release --locked --manifest-path tools/audio-lab/Cargo.toml --target "$LAB_HOST" -- emulate audio-lab-results/arm

The virtual Daisy now boots the actual production ELF under Renode, feeds audio through modeled codec/SAI/DMA peripherals and records stereo WAV output. Its regression command checks tuning, boot completion and audio continuity, then verifies detection of silent input and lost RX DMA.

sh
cargo run --release --locked --manifest-path tools/virtual-daisy/Cargo.toml --target "$LAB_HOST" -- run /absolute/path/to/renode-runtime audio-lab-results/daisy --board rev5

The ARM emulation guide covers the complementary QEMU DSP parity tests. Physical hardware is still needed to calibrate performance and analog codec behavior. The audio-testing guide documents known quality failures and how CI distinguishes regressions from unresolved issues.

Select the physical Seed revision: rev4 (AK4556), rev5 (WM8731), or rev7 (PCM3060). See the conformance evidence and remaining gaps before interpreting a simulated pass as evidence about real hardware.

Setting Up the Debugger

Linux

  • Install gdb-multiarch to debug a wide range of architectures:

    sh
    sudo apt-get install gdb-multiarch

Windows

  • Download and install the Arm GNU Toolchain. This package includes arm-none-eabi-gdb, which is the debugger for ARM microcontrollers.

macOS

  • Use Homebrew to install the ARM version of GDB:

    sh
    brew install arm-none-eabi-gdb

Debugging Your Program

To start a debug session, you need a GDB server running for your specific microcontroller. This might be provided by cargo embed, OpenOCD, or JLinkGDBServer, depending on your setup.

  1. Start the GDB Server (if not automatically started by cargo embed):

    This step varies depending on your hardware and the software you're using as a GDB server. Refer to your hardware's documentation or the documentation of the GDB server software.

  2. Connect to the GDB Server:

    • For Linux and macOS, you can use gdb-multiarch or arm-none-eabi-gdb respectively.
    • For Windows, use the arm-none-eabi-gdb from the GNU Arm Toolchain.

    Open a terminal and run:

    sh
    gdb-multiarch target/thumbv7em-none-eabihf/debug/synth-phone-e-v2-rust

    Replace gdb-multiarch with arm-none-eabi-gdb if you're on Windows or macOS

  3. Inside GDB, connect to the local GDB server:

    gdb
    target remote :1337

    The port 1337 is an example; use the port number on which your GDB server is running.

You're now ready to debug your program using GDB commands!

Further Learning

File Structure

text
├── .cargo
│   └── config.toml # <- contains no build target, just command alias
├── .github
│   ├── workflows
│   │   ├── nightly.yml
│   │   ├── rustfmt.yml # <- linter
│   │   └── test.yml
├── .vscode
│   └── settings.json
├── Cargo.toml # <- outer Cargo workspace
├── autotune # <- auto tune library, can be run on host
│   ├── Cargo.toml
│   └── src
├── cross # <- Embedded workspace cannot be ran on host
│   ├── Cargo.toml # <- inner Cargo workspace
│   ├── memory.x
│   ├── .cargo
│   │   └── config.toml # <- build target for daisy seed
│   ├── app
│   ├── board
│   ├── Embed.toml
│   ├── self-tests
│   └── target
├── docs

Parts

21
QtyValueFootprintReferences
2220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P15.24mm_HorizontalR1, R5
2R_Potentiometer_Trim_USConnector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalRV2, RV3
11N4148Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD13
14.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P15.24mm_HorizontalR4
14P4CConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ16
16N138Package_DIP:DIP-8_W7.62mmU2
1?Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P15.24mm_HorizontalR2
1DIN-5Connector_JST:JST_PH_B5B-PH-K_1x05_P2.00mm_VerticalJ3
1Electrosmith_Daisy_Seed_Rev4Module:Electrosmith_Daisy_SeedA1
1Jack-inConnector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ5
1Keypad_column_outputConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ4
1SW_Push_SPDTConnector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalSW14
1SW_Wuerth_450301014042Button_Switch_THT:SW_Slide-03_Wuerth-WS-SLTV_10x2.5x6.4_P2.54mmSW13
1display socketConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ12
1encoder_inputConnector_JST:JST_PH_B5B-PH-K_1x05_P2.00mm_VerticalJ15
1jack-outConnector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ8
1keypad socketConnector_JST:JST_PH_B7B-PH-K_1x07_P2.00mm_VerticalJ6
1keypad_row_outputConnector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalJ7
1~koobook:ssm2167U3

Questions

How big is the Synth phone e v2-hardware v2 PCB?

It measures 62 × 60 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Synth phone e v2-hardware v2 use?

21 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Synth phone e v2-hardware v2 KiCad files?

From the UnitedCode/synth-phone-e-v2-rust repository on GitHub, at the commit this page was made from: the board is kicad/synth-phone-e-v2-hardware-v2/synth-phone-e-v2-hardware-v2.kicad_pcb and its schematic kicad/synth-phone-e-v2-hardware-v2/synth-phone-e-v2-hardware-v2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Synth phone e v2-hardware v2 design in my own project?

Its repository states no licence, so its author keeps all rights: ask UnitedCode before reusing the design.

Similar boards

  • 2 layers28.3 × 39.8 mmLevelShifter, the printed circuit board in 3D

    LevelShifter

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    21 parts5.1kGPL-3.0
  • 2 layers171.2 × 72.9 mmAmiga gfxcard before pour, the printed circuit board in 3D

    Amiga gfxcard before pour

    mntmn/amiga2000-gfxcard

    MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog

    21 parts1k
  • 2 layers93.9 × 46 mmRectifier, the printed circuit board in 3D

    Rectifier

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    21 parts990GPL-3.0
  • 2 layers45.5 × 42.9 mmEsphome han reader, the printed circuit board in 3D

    Esphome han reader

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    21 parts915
  • 2 layers31.8 × 14.5 mmEsp prog, the printed circuit board in 3D

    Esp prog

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    21 parts744MIT
  • 2 layers23.5 × 15.8 mmQuiverAttachPCB, the printed circuit board in 3D

    QuiverAttachPCB

    Arrow-air/project-quiver

    Project Quiver documentation, designs, and project artifacts.

    21 parts617CERN-OHL-S-2.0
  • 2 layers69.9 × 41.3 mmHeaterMeterLCD, the printed circuit board in 3D

    HeaterMeterLCD

    CapnBry/HeaterMeter

    HeaterMeter and LinkMeter Arduino BBQ Controller

    21 parts557MIT
  • 2 layers161.3 × 111.8 mmDoj, the printed circuit board in 3D

    Doj

    kelu124/echomods

    Open source ultrasound processing modules and building blocks

    21 parts463