Rythm is now Catalina!
⚠️ This is still a large work-in-progress! A semi-working version (hardware and software) is estimated to be ready around March 2026.
Catalina is an embedded-first Rust ecosystem for building music and audio processing devices, with a primary focus on ARM Cortex MCUs as the end-target.
The ecosystem is comprised of:
- A Rust crate providing a DSP and audio engine designed for embedded devices (heapless by default, small footprint).
- Various composable interfaces for quickly prototyping new instruments.
- Drivers for common audio codecs, SDRAM, etc.
- Windows, MacOS, and Linux support for developing audio chains before flashing to hardware.
- Future web interface for synth design, with WebUSB for direct device flashing.
- Two base hardware modules designed for the engine:
- Mini - small footprint with audio processing.
- Card - larger footprint with audio processing, CV and sync.
- Several module "carrier" boards:
- Breadboard-compatible carrier with headers.
- Protoboard-style carrier with an integrated module.
- Potentially some future soldering kits.
- A Rust BSP (Board cupport package) crate that makes it easy to get started with any modules or boards from the ecosystem.
- Finish Mini module revision 1.
- Finish Card module revision 2.
- Stable minor release of
engine, with audio and synth basic building blocks.
catalina-engine is a set of embedded-first DSP and audio engine crates that can be quickly integrated into embedded projects as a dependency, or used standalone with the std library for audio application.
The engine crates are designed to be as modular as possible, so i.e. if you just need a couple oscillators, you can use the oscillator module without needed to depend on any other parts of the engine. This composability is designed to make building audio effects and instruments as intuitive as possible.
The engine supports both the core embedded and std runtimes, including support for common embedded loggers (defmt, log), embedded and std library tracing, std and alloc feature sets from underlying libraries, and more via crate feature flags.
Note! As the engine is embedded-first,
no_stdis set by feature flags by default. You'll need to manually enable thestdfeature to toggle off the defaultno_stddeclaration.
Our goal is to make the usage of the engine as seamless as possible across both embedded and non-embedded platforms, making prototyping designs on PC and in simulators, and then later transferring them to embedded device runtimes as easy as possible.
⚠️ The modules and their associated boards are a large work-in-progress! Several designs are only half-complete or still in the planning stages.
The modules provides a set of small STM32-based boards that can be embedded into custom PCB designs, or used with a set of associated carrier boards.
These carrier boards include basic breadboard header breakouts, some module-integrated protoboard designs, and some options for carriers with a selection of Molex PicoBlade Connectors for modular plug-and-play prototyping.
Also see furthur in the README for kits that are designed as self-assembled soldering kits that let you quickly get started creating guitar/effects pedals, and small synths and sequencers using the toolkit.
⚠️ The ecosystem's modules are NOT able to be used standalone, they only have fine-pitch Hirose DF40C board-to-board connectors - a carrier board is required to interface with them!See our upcoming carriers or soldering kits below for examples.
⚠️ Mini is in active design, these images may be out of date.
- 480MHz ARM Cortex-M7 processor (STM32H750XBHx)
- 32MB of 16-bit SDRAM for audio buffers
- 16MB QSPI Flash for programs and settings
- 24-bit Stereo Audio Codec with internal mixer
- SDMMC 4-bit interface
- 1 Hardware MIDI Endpoint (RX and TX)
The Mini is a 20mm x 40mm module, designed to have a similar footprint to an Arduino Nano to make it easy to fit in a variaty of small audio and music devices. The Mini also has a breadboard-compatible carrier that exposes 2 columns of breadboard pins on either side of the carrier on standard 5-5 breadboard column layouts.
The mini is ideal for applications that don't need a large amount of audio RAM and need to fit in a small footprint - such as a guitar/effects pedal, Altoids tin, or 2HP Eurorack modules similar to Erica Synths' Pico series.
[ ] In Revision 3, see if we can switch to SDMMC2 to enable both QSPI 1 and 2 simultaneously to expose one over the connector.- Or connect PG6 (
QUADSPI_BK1_NCS) to connector, connect QUADSPI1 to connector, and provide a bootloader toggle that allows the carrier to indicate it should use carrier select pin. - Determine values of remaining unspecified resistors and capacitors.
- Calculate ideal HSE oscillator for the STM32H750.
- Finish BOM selection for crystal, some resistors and capacitors.
- Hirose DF40 connectors are now not recommended for dual-connector use. Despite still working for it, I don't feel comfortable going against manufacture recommendations for reliability reasons. For revision 3 we need to change to a single connector, possibly by shifting the MCU and RAM up or down to make room for a longer connector at 90 degrees on the bottom.
- v0.1 - Original design with a BGA201 package. Ran into too many trace tollerance issues on fan-out, so had to upgrade to the BGA265 package to have enough room to run traces between via-in-pads and to do dogbones.
- v0.2 - Changed to BGA 265, but layout changes from the 201 to 265 made x32 SDRAM layout near impossible. Switched to a 16mx16 SDRAM instead, which should be sufficient for the Mini.
- v0.3 - Found possible alignment and tolerance issues with mating 2x Hirose DF40 connectors, so shifted the MCU and codec to change the dual connectors for a single high-density one. Used DF40-90DP to have sufficient pins available, and because the 90-pin is more widely available.
- Mini was originally designed with the BGA201 package, but the pitch was too fine for economic fabrication capabilities. Upgraded to BGA265 in revision 2 to fix routing constraints.
- The Mini's original design concept was using 16mx32 SDRAM, with 32-bit SDRAM being ideal for handling encoding of stereo 16-bit audio samples (one 32-bit byte per stereo sample). Ultimately there was not enough room for routing x32 SDRAM with STM32's non-standard memory interface ball out, so a compromise to use 16-bit instead was made to keep the mini at in our 20mm wide constraint.
⚠️ The card module is only in the planning stage.
Everything from the Mini:
- 480MHz ARM Cortex-M7 processor
- QSPI Flash
- Stereo Audio Codec
- SDMMC 4-bit interface
Plus:
- 64MB of 32-bit SDRAM (4 times the amount on the Mini!)
- Eurorack CV inputs (amount TBD)
- Eurorack CV outputs (amount TBD)
- Eurorack Sync In/Out (amount TBD)
The Card module is larger then the Mini, about the size of a credit card. It also features a different board-to-board connector from the Mini, supporting much higher board-to-board distances allowing it to seat over top of higher components (i.e. 3.5mm audio sockets) then the Mini can.
The Card is designed for audio applications that need significantly more memory, and benefit from having 32-bit memory (such as faster access for stereo 16-bit samples), like hardware samplers. The Card also features an onboard bank of dynamic CV sink, input, and output drivers that allow it to function as a Eurorack module off-the-shelf, or with synths and sequencers that have control voltage sockets.
- Ensure we can route a full 16mx32 SDRAM in the Card footprint.
- Research the best CV circuits we can use to support a large range of biasing and voltages (i.e. -12v to +12v).
- After SDRAM routing, can we break the parallel interface out to a B2B connector? Could be useful for driving displays, or memory expension with additional chips.
- Aim to break out one of the QSPI interfaces so carriers can add additional flash. One ideas is for Card carriers to have their own carrier-specific flash that the module can load when attached, so programs don't need to be reflashed if sharing a module across carriers.
- Uses DF40TC for higher range of hight offset. Maximum of 7mm allows mounting the module over most 3.5mm and USB sockets. DF40TC(3.0)-50DP-0.4V(51) as base, with: DF40TC-##DS-0.4V(51) = 4.5 (min), DF40TC(4.0)-##DS-0.4V(51) = 7.0mm (max).
Carriers are breakout boards for the core modules that make them easy to prototype and work with, without needing to make a custom board for their dense board-to-board connectors.
Some of the planned carriers are:
- "Discovery" line that breaks the module's IO's out to standard breadboard compatible pin headers. Includes a USB-C port for device and host mode, contains an ARM Cortex programming header keyed for an IDC cable, and possibly an SD card. Includes the required electrolytic capacitors for the integrated headphone driver on the modules.
- "Proto" line that has a protoboard layout with a socket for the module in the center, making it easy to not only prototype more stable circuits directly with the module, but also to unsocket and swap the module between multiple proto boards so you don't need to buy several for different projects.
And a couple other ideas that need to be planned out:
- A carrier that breaks out the audio and MIDI lines as 3.5mm sockets, and IO on Molex PicoBlade connectors for rapid modular prototyping (maybe use the "Discovery" name for this one instead?).
- FUSB303BTMX on discovery for USB-C support
- Amphenol_12401610E4-2A or HRO_TYPE-C-31-M-12?
The hardware ecosystem will also include several soldering kits that are currently in various stages of development:
- Mini Module
- Guitar/Effects Pedal Kit - PCB with several connectors for knobs and foot switches, includes some knob and footswitch options, a Mini module, and
- Mini Synth Kit - A carrier similar to the Korg Volca or Behringer Pro series with a capacitive keyboard, several knobs and buttons, and 3.5mm MIDI minijack. Comes with a few printed faceplates and a 3D printed case. Carrier sockets could be solderable in kit form.
- Mini Step Sequencer Kit - A small step or drum sequencer design, similar to the Roland AIRA Compact or Elektron Model lineup. Buttons and knobs solderable for kit form.
- Mini Groovebox Kit - Something similar to an Elektron Model or Novation Circuit series device. A 4x8 velocity pad grid (velostat?), several knobs, and some menu buttons.
- Card Module
- Eurorack Module Kit - A 4-8 HP (to be determined) Eurorack carrier sporting all the Card CV inputs and outputs as standard 3.5mm sockets, USB, 3.5mm MIDI Minijack and an SD card.
- Pro Synth Kit - Similar to the Midi Synth Kit, but also sporting a display, more control, and 3.5mm CV sockets.
- Pro Step Sequencer Kit - Something similar to an Elektron Digitakt, SEQTRAK, or Korg SQ-1 with 16-step buttons, a display, and some knobs.
Each of these kits will come with a board support package via a feature flag in the Rust crate. These board support packages will come with all the scaffolding necessary to quickly build a project around the boards, as well as several example projects.
Thank you to the supporters that helped design and fund this project!
It would not have been possible for me to spend the time or funds on making this without their support.
- Rachel Mant (@dragonmux)
- Aki (@lethalbit)
- Luna Rabbit (@LunaUsagi)
- Sludge (@SludgeGirl)
- Esden (@esden)
- Miika (@nykseli)
- Freyja
- Mary Guillemard (@marysaka)
- 3cats
If you would like to support this project, see either my GitHub Sponsors page or Patreon.
Support includes access to exclusive Discord channels with sneak peaks and design discussions.
The hardware and CAD components of this project are licensed under the CERN Open Hardware License v2.0. The particular of the CERN-OHL license (permissive, weakly reciprocal, strongly reciprocal) can very depending on the hardware component and should be checked on a per-component basis by finding the closest LICENSE file to it.
The software components of this project are under the MIT license.
Concepts, such as the pin arrangement of the high-density connectors on the modules is consided free and open to build on, especially if you're looking to make a carrier board or product!
SPDX-License-Identifier: CERN-OHL-S-2.0 AND MIT