
Eurorack busboard singlerow
My Open Source / Public Eurorack projects
- Size
- 414 × 62 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 155
- Nets
- 74
- Pads
- 590
- Tracks, vias
- 363, 175
- Pours
- 5
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 27 Mar 2026
- Updated
- 3 Nov 2026
Overview
Eurorack busboard singlerow is an open-source printed circuit board by yry-dev, from the yry-dev/maddie-synths repository on GitHub. It is a 4-layer board of 414 × 62 mm with 155 parts on 74 nets, routed with 363 tracks and 175 vias.
It is built around the SS54, SMBJ13A and AO3401A, with the SMBJ6.0A among its other parts. Its parts include 63 fuses, 43 capacitors, 26 connectors, 9 diodes and 4 resistors. It belongs with the audio and music boards of this library.
Main components
4SS54
SMA(DO-214AC)-55℃~+125℃ 1mA@40V 40V 550mV@5A 5A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky DiodesSMBJ13A
DO-214AA(SMB)-55℃~+150℃ 13V 15.9V 21.5V 27.91A@10/1000us 5uA 600W@10/1000us IEC 61000-4-2 TVS Unidirectional DO-214AA(SMB) ESD and Surge Protection (TVS/ESD) ROHShongjiachengESD And Surge Protection (TVS/ESD)AO3401A
SOT-231 P-Channel 14nC@10V 30V 47mΩ@10V、60mΩ@4.5V、85mΩ@2.5V 4A 55pF 645pF 80pF 900mV SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsSMBJ6.0A
DO-214AA(SMB)-55℃~+150℃ 10.3V 58.25A@10/1000us 600W@10/1000us 6V 7.37V 800uA IEC 61000-4-2 TVS Unidirectional DO-214AA(SMB) ESD and Surge Protection (TVS/ESD) ROHShongjiachengESD And Surge Protection (TVS/ESD)
README
README.mdMaddie Synths
- More details on each firmware is on my site
- More about me at madelyn.sh
- You can purchase some of my work from my etsy store
Licensing
The repo-wide default is MIT (LICENSE.md at the root, © 2026 Madelyn
Yeary). Every source file carries a License: notice in its header saying which
terms apply to it and where the code came from.
That default is overridden per directory: any directory containing its own
LICENSE.md is governed by that file instead, for everything beneath it. The
overrides exist because the work there either came from somewhere else or is
deliberately released on different terms
Repo layout
.
├── firmwares/ Arduino sketches — grouped by hardware platform
│ ├── hagiwo-mod1/mod1-*/ Arduino Nano modules (mod1-euclidean.ino, …)
│ ├── hagiwo-mod2/mod2-*/ XIAO RP2350 modules (mod2-vco.ino, …)
│ ├── hagiwo-30/hagiwo30-*/ HAGIWO #30 sequencer variants (Nano)
│ ├── rabid-audio-clk/ rabid.audio port, bare ATmega328P (Nano FQBN)
│ └── shared/ repo-local Arduino library root
│ ├── SynthCore/src/ platform-pure DSP cores (*Core.h) shared with VCV
│ ├── Mod1Common/ Nano board helpers (pins, ADC, PWM)
│ ├── Mod2Common/ RP2350 board helpers (audio I/O, panel modes)
│ ├── Hagiwo30Common/ OLED + encoder UI for the #30 platform
│ └── Hagiwo30Sequencers/ sequencer engines for the #30 platform
│
├── rack-plugins/ VCV Rack 2 plugin (slug: maddie-synths)
│
├── panels/ KiCad faceplate projects, grouped by platform
│ ├── hagiwo-mod1/<module>/ MOD1 faceplates (blanks/ + house-style plates)
│ ├── hagiwo-mod2/<module>/ MOD2 faceplates
│ └── rabid-audio-clk/ rabid.audio CLK faceplate
├── hardware/ KiCad PCBs and mechanical parts
│ ├── lib/ shared KiCad symbol + footprint libraries
│ ├── m-power/ eurorack PSU (has its own CLAUDE.md)
│ ├── eurorack-busboard/ bus board
│ ├── maddie-sequencerV2/ sequencer PCBNaming is mirrored across layers: firmwares/hagiwo-mod2/mod2-vco/mod2-vco.ino,
rack-plugins/src/mod2-vco.cpp, panels/hagiwo-mod2/mod2-vco/, and
firmwares/shared/SynthCore/src/VcoCore.h are the same module.
Tooling (macOS/linux + Homebrew)
- Install tools:
- brew install arduino-cli python
- Optional GUI IDE:
- brew install --cask arduino-ide
Repo-local Arduino CLI config
This repo uses arduino-cli.yaml at the root.
It currently includes RP2040 board index support and works for both:
- Arduino Nano (official core)
- Raspberry Pi Pico (Earle Philhower core)
One-time core install
- Arduino Nano / AVR:
- arduino-cli core install arduino:avr --config-file ./arduino-cli.yaml
- Raspberry Pi Pico / RP2040:
- arduino-cli core install rp2040:rp2040 --config-file ./arduino-cli.yaml
One-time library install
Install external libraries used by the hagiwo30-* sketches (the same set CI
installs in .github/workflows/_firmware.yml):
- arduino-cli lib install "Encoder" "FastGPIO" "Adafruit GFX Library" "Adafruit SSD1306"
Adafruit SSD1306 pulls Adafruit GFX Library and Adafruit BusIO automatically.
MOD2 Braids / Tides (Mutable Instruments port)
mod2-braids and mod2-tides depend on Mutable Instruments DSP code and two
helper libraries that are not vendored in this repo. Install them once into
your Arduino libraries folder (default ~/Documents/Arduino/libraries).
-
Library Manager dependencies:
- arduino-cli lib install "Bounce2" "RPI_PICO_TimerInterrupt"
-
Mutable Instruments libraries from poetaster/arduinoMI (the modules live in separate submodule repos — clone the three we need over HTTPS straight into the libraries folder):
git clone https://github.com/poetaster/STMLIB.git ~/Documents/Arduino/libraries/STMLIBgit clone https://github.com/poetaster/BRAIDS.git ~/Documents/Arduino/libraries/BRAIDSgit clone https://github.com/poetaster/TIDES.git ~/Documents/Arduino/libraries/TIDES
-
TIDES packaging fix. The
TIDESlibrary ships its sub-sources as.ccfiles and amalgamates them insrc/tides_all.cpp, so arduino-cli compiles them twice and the link fails withmultiple definitionerrors.BRAIDSalready uses.incfor the same trick; makeTIDESmatch by renaming its three sub-sources and updating the includes:sh cd ~/Documents/Arduino/libraries/TIDES/src for f in resources poly_slope_generator ramp_extractor; do mv "tides2/$f.cc" "tides2/$f.inc" done sed -i '' -E 's#(tides2/[a-z_]+)\.cc#\1.inc#' tides_all.cpp
PWMAudio.h (used by both) ships with the rp2040:rp2040 core, so no extra
install is needed for it. After this, make mod2-braids and make mod2-tides
build cleanly.
The same libraries also power the Tiny Tides and Tiny Braids VCV Rack
modules (rack-plugins/src/mod2-{tides,braids}.cpp, library bodies compiled
once in src/mi-libs.cpp), which are part of the default Rack build. The Rack
Makefile finds them via MI_LIB_DIR (default
~/Documents/Arduino/libraries); CI fetches them automatically at the commits
pinned in .github/mi-libs.env — to move to newer upstream commits, test
locally first, then bump the SHAs there. Building without the libraries stops
with a clear #error; to opt out instead, exclude mi-libs.cpp and both
module .cpps the usual three-place way (WIP_SOURCES in
rack-plugins/Makefile, the modelTinyTides / modelTinyBraids lines in
plugin.{hpp,cpp}, and moving their plugin.json entries to wipModules).
Makefile firmware builds
- Build every firmware into
dist/<firmware>/:- make
- Build for a different board target (
MOD1_FQBNcoversmod1-*/hagiwo30-*and any other ATmega328P sketch such asrabid-audio-*,MOD2_FQBNcoversmod2-*):- make MOD2_FQBN=rp2040:rp2040:rpipico
- Build a single firmware target:
- make mod1-trigger-burst
- List discovered firmware targets:
- make list
- Flash a firmware (discover ports with
make board-list):- make upload FW=mod1-euclidean PORT=/dev/ttyACM0
- Remove build output:
- make clean
The Makefile discovers every sketch folder under firmwares/ that contains a same-named .ino entry file and excludes firmwares/shared/.
Flashing a bare ATmega328P over ISP
make upload drives a serial bootloader, so it needs a board with a USB-serial
bridge. The rabid-audio-* ports run on a bare ATmega328P, which has no
bootloader to talk to — and on the CLK board no serial either, since its
7-segment lines occupy the whole of PORTD, D0/D1 (RX/TX) included. Those chips
are programmed in-circuit through the ICSP header with an ISP programmer:
make fuses-rabid-audio-clk # ONCE per chip — sets the 16 MHz clock fuses
make isp-rabid-audio-clk # build + flash, as often as you likeDo not skip the fuses- step on a new chip. A factory ATmega328P runs its
internal 8 MHz RC divided by 8, so 1 MHz, while the firmware hard-assumes
16 MHz (sc::kClkTimerHz is 16 MHz / 1024). Flash a virgin part and it runs —
just 16x slow, with nothing else to point at the cause. fuses- burns
low_fuses=0xFF (full-swing external crystal, no CKDIV8) to match the board's
16 MHz crystal.
The programmer defaults to ISP=usbasp. Override it for other hardware; run
arduino-cli board details --fqbn arduino:avr:nano --list-programmers for the
valid ids, and note that arduinoasisp also wants a PORT=:
make isp-rabid-audio-clk ISP=usbtinyisp
make isp-rabid-audio-clk ISP=arduinoasisp PORT=/dev/cu.usbmodemXXXXIf the programmer can't see the chip, its SCK is probably too fast for a virgin
1 MHz part — the ISP clock has to stay under a quarter of the target's. On a
USBasp, close the slow-SCK jumper (JP3) and run fuses- again; once the crystal
fuses are set the part is at 16 MHz and the jumper can come off. make isp-help
repeats all of this at the terminal.
VCV Rack plugin builds
The same root Makefile also drives the VCV Rack plugin in rack-plugins/
(which shares the platform-agnostic voice cores in firmwares/shared/SynthCore):
- Build the plugin:
- make rack
- Build + install into Rack's user plugins folder:
- make rack-install
- Package a distributable
.vcvplugin:- make rack-dist
- Remove the plugin build output:
- make rack-clean
- Build everything (all firmwares + the plugin):
- make everything
- Build against a non-vendored Rack SDK:
- make rack RACK_DIR=~/Rack-SDK
The plugin manifest is the canonical plugin.json at the repo root; the
rack-plugins/ Makefile syncs a build-time copy into its own folder (which the
Rack SDK requires) so the manifest lives in exactly one place. See
rack-plugins/README.md and
rack-plugins/PORTING.md for details.
CI and releases
.github/workflows/ci.yml runs on every push and
pull request and builds only what changed: the Rack plugin when
rack-plugins/**, plugin.json, or firmwares/shared/SynthCore/** is touched,
and each firmware whose sketch changed (all of them when anything under
firmwares/shared/ changes). The actual builds live in two reusable workflows:
_rack.yml—make rack-distagainst a freshly downloaded Rack SDK for Linux, macOS (x64 + arm64), and Windows._firmware.yml—arduino-clibuilds grouped by board (.hexfor AVR,.uf2for RP2040). Individual compile failures are tolerated and skipped, mirroringmake dist— the repo intentionally carries some WIP sketches that don't compile in a clean checkout (license-gatedsample.h, un-vendored Mutable libraries).
release.yml runs on release tags, builds
every Rack platform and every firmware, and publishes a GitHub release whose
assets are one .vcvplugin per platform plus one flashable binary per
firmware. Push a tag to trigger it:
vYYMM.DD→ dated release (e.g.v2608.15)vYYMM.DD-next→ pre-release / nightly (version stamped with the commit)
Use scripts/release-tag.fish to cut one from today's date rather than typing
the tag by hand.
The workflow derives the plugin version from the tag, so the tag is the single
source of truth for a release's version. The date lands in the
MINOR.REVISION half only — the MAJOR stays 2 because VCV reads it as the
Rack generation the plugin was built for, not as our release number, so
v2608.15 publishes plugin version 2.2608.15. Stable (non pre-release) tags also
force-move a rolling latest tag to the same commit with the same assets, so
download URLs like .../releases/download/latest/mod2-vco.uf2 always resolve
to the newest stable build. A manual workflow_dispatch run builds everything
without publishing, for testing.
Parts
155| Qty | Value | Footprint | References |
|---|---|---|---|
| 41 | 1.1A PTC | eurorack_bus:ER_PTC_1812 | F1, F2, F10, F11, F13, F14, F16, F17, F19, F20, F22, F23, F25, F26, F28, F29 +25 |
| 40 | 100n | eurorack_bus:ER_Chip_0805 | C1, C2, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +24 |
| 20 | 0R5 PTC | eurorack_bus:ER_Chip_1206 | F3, F12, F15, F18, F21, F24, F27, F30, F33, F36, F39, F42, F45, F48, F51, F54 +4 |
| 20 | BUS | eurorack_bus:ER_BusHeader_2x08_Shrouded | J1, J2, J3, J4, J5, J10, J11, J12, J13, J14, J15, J16, J17, J18, J19, J20 +4 |
| 9 | M3 | eurorack_bus:ER_MountingHole_M3 | H1, H2, H3, H4, H5, H6, H7, H8, H9 |
| 3 | 220u/25V | eurorack_bus:ER_CP_Radial_D8_P3.5 | C41, C42, C43 |
| 3 | SS54 | eurorack_bus:ER_Diode_SMC | D1, D2, D3 |
| 2 | 2.6A PTC | eurorack_bus:ER_PTC_1812 | F61, F62 |
| 2 | 3k9 | eurorack_bus:ER_Chip_0805 | R2, R3 |
| 2 | PWR IN | eurorack_bus:ER_MiniFitJr_2x03_RA | J21, J22 |
| 2 | SMBJ13A | eurorack_bus:ER_Diode_SMB | D4, D5 |
| 1 | 100k | eurorack_bus:ER_Chip_0805 | R1 |
| 1 | 1k | eurorack_bus:ER_Chip_0805 | R4 |
| 1 | AO3401A | eurorack_bus:ER_SOT23 | Q1 |
| 1 | GND | eurorack_bus:ER_WirePad_2.2mm | J24 |
| 1 | IN_N12 | eurorack_bus:ER_WirePad_2.2mm | J23 |
| 1 | IN_P12 | eurorack_bus:ER_WirePad_2.2mm | J25 |
| 1 | IN_P5 | eurorack_bus:ER_WirePad_2.2mm | J26 |
| 1 | LED_GRN | eurorack_bus:ER_LED_0805 | D8 |
| 1 | LED_RED | eurorack_bus:ER_LED_0805 | D7 |
| 1 | LED_YEL | eurorack_bus:ER_LED_0805 | D9 |
| 1 | SMBJ6.0A | eurorack_bus:ER_Diode_SMB | D6 |
More from yry-dev/maddie-synths
6- 2 layers92.9 × 125.4 mm

- 2 layers24.5 × 25 mm

- 2 layers38.1 × 95.9 mm

- 2 layers92.9 × 125.4 mm

- 2 layers19.8 × 110 mm

- 2 layers38.1 × 65.4 mm

Similar boards
- 4 layers160 × 80 mm

- 4 layers195 × 58 mm

Ezo pmp controller
dephekt/dosing-pump-hardware
Open schematics and design files for a computer controlled nutrient dosing system
83 partsCERN-OHL-S-2.0 - 4 layers195.5 × 114.3 mm

- 2 layers81 × 78 mm

- 4 layers100 × 100 mm

- 4 layers100 × 70 mm

- 2 layers

- 2 layers84.5 × 43.8 mm

Questions
How big is the Eurorack busboard singlerow PCB?
It measures 414 × 62 mm and has 4 copper layers, 1.6 mm thick.
What parts does the Eurorack busboard singlerow use?
155 parts, built around the SS54, SMBJ13A, AO3401A and SMBJ6.0A. 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 Eurorack busboard singlerow KiCad files?
From the yry-dev/maddie-synths repository on GitHub, at the commit this page was made from: the board is hardware/eurorack-busboard/eurorack-busboard-singlerow.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Eurorack busboard singlerow design in my own project?
Its repository states no licence, so its author keeps all rights: ask yry-dev before reusing the design.