In the era of smartphone distractions and streaming subscriptions, I wanted a music player so instead of buying one I build one on prototype board and solder it on my own.
Hardware & FeaturesCore Processing: Driven by the RP2040 micro-controller on the Raspberry Pi Pico WH, leveraging its dual-core setup to handle display updates and real-time audio decoding.
Dual-Bus SPI: The board segregates display rendering and file I/O into two independent hardware SPI buses (SPI1 driving the ST7789 display and SPI0 handling the SD card module) to ensure smooth visual updates during high-throughput file reads.
Audio: Digital audio is fed via I2S (BCLK, LRCK, DIN) directly into a MAX98357A Class-D amplifier breakout driving a 2W, 8-ohm cavity speaker.
Interactive UI & Control: Features a 2.4" ST7789 TFT display (240x320) running a custom-rendered UI with a dynamic track progress bar, menu library, and real-time status indicators. System navigation relies on a dual-purpose rotary encoder for volume scaling and menu scrolling, tactile push buttons for direct play, pause, and track controls.
Firmware & ArchitectureWAV playback: Optimized primarily around uncompressed 16-bit PCM WAV playback at 44.1 kHz. Reading raw PCM data directly into the I2S pipeline ensures minimal CPU cycle consumption and bit-exact audio reproduction.
Experimental MP3: Designed MP3 decoding capability via software stream parsing (AudioGeneratorMP3). While functional, MP3 decoding exposed standard RP2040 software-decoding artifacts and dynamic current spikes, leading to minor audio distortion. The hardware design mitigates this power-rail sag using dedicated decoupling capacitance along the main power bus.
Dynamic Menu & Library System: Features a custom memory-mapped file indexing system capable of scanning up to 200 tracks directly from the root directory, updating a real-time visual on the TFT screen without interrupting the primary audio loop.









Comments