App Architecture¶
The RP2350 microcontroller handles the TBD-16’s user-facing hardware: the display, buttons, encoders, LEDs, and MIDI connectivity.
Overview¶
The RP2350 firmware is developed separately from the ESP32-P4 DSP firmware. It is an Arduino-based project maintained at:
Communication with the P4¶
The RP2350 communicates with the ESP32-P4 via a SPI bus. The protocol is
defined in the SpiAPI class (see main/SpiAPI.hpp in this repository).
Key interactions:
Control data — The RP2350 sends knob positions, button states, and MIDI CC/note data to the P4 on every audio processing cycle.
Plugin selection — The RP2350 can request plugin changes via SPI commands.
Firmware detection — The RP2350 queries
GetFirmwareInfoto determine whether the P4 is running normal firmware (ota0) or USB-MSC mode (ota1).
MIDI Integration¶
MIDI messages received by the RP2350 are forwarded to the ESP32-P4 as control
data within the SPI transaction buffer. Plugins access this data through the
controlData pointer in the ProcessData struct.
Plugins can be designed to respond to MIDI in two ways:
RP2350-mediated — The RP2350 firmware maps MIDI CC values to plugin parameters and sends them as control data. The plugin does not need to know about MIDI.
Direct parsing — The plugin reads raw MIDI data from
controlDataand handles it internally. This allows for more complex MIDI implementations like sequencers or note-priority logic.
Developing Custom RP2350 Firmware¶
To build custom UI/MIDI firmware:
Clone the RP2350 firmware repository.
Install the Arduino IDE or PlatformIO.
Make your changes (custom UI screens, MIDI mappings, sequencer logic).
Compile and flash via BOOTSEL mode or the App Manager.
The firmware supports hot-reloading via UF2 drag-and-drop, making iteration fast.