Files
pi-multifx-pedal/hardware/pcm1808-pcm5102-overlay.dts
shawn 0ae2ca6e8e feat: PCM1808+PCM5102 I2S HAT design files
Custom I2S HAT for Pi Multi-FX Pedal — full hardware package:

- KiCad project: schematic (kicad_sch), PCB layout (kicad_pcb), project file
- Custom DT overlay: pcm1808-pcm5102-overlay.dts (no upstream overlay exists for PCM1808)
- docs/hardware-bom.md: BOM (9.25 HAT + 1.75 with enclosure), wiring diagram, PCB design notes
- docs/config-audio.md: DT overlay build, ALSA config, JACK integration, troubleshooting
- scripts/install_hat.sh: One-command install + test suite (6 tests)
- hardware/gerber/: JLCPCB fab instructions and assembly notes

Circuit: Guitar input → TL072 preamp (gain ~20dB) → PCM1808 ADC → RPi I2S
  → PCM5102 DAC → RC filter → output jack
I2S: BCLK/GPIO18, LRCLK/GPIO19, DIN/GPIO20, DOUT/GPIO21
Stacking header passes all 40 GPIO pins for footswitches/LEDs/display
2026-06-07 23:52:13 -04:00

116 lines
3.5 KiB
Devicetree

// SPDX-License-Identifier: GPL-2.0
// Device Tree Overlay for PCM1808 ADC + PCM5102 DAC I2S combo
// Pi Multi-FX Pedal — Ourpad Networks
//
// PCM1808: 24-bit stereo ADC (we use single-channel mono guitar input)
// - I2S slave mode (BCLK + LRCK from RPi)
// - FMT = GND (I2S, 24-bit left-justified)
// - MD1 = 3.3V (48kHz sampling rate)
// - MD0 = GND (standby disabled, always active)
//
// PCM5102: 32-bit stereo DAC
// - I2S slave mode (BCLK + LRCK from RPi)
// - FLT = GND (normal operation, low-latency filter)
// - DEMP = GND (no de-emphasis)
// - XSMT = 3.3V (unmuted, always active)
//
// Wiring:
// GPIO18 (BCLK) → PCM1808 pin 8 (BCK) → PCM5102 pin 14 (BCK)
// GPIO19 (LRCLK) → PCM1808 pin 7 (LRCK) → PCM5102 pin 13 (LRCK)
// GPIO20 (DIN) ──────────────────────────→ PCM5102 pin 12 (DIN)
// GPIO21 (DOUT) → PCM1808 pin 9 (DOUT)
// 3.3V → PCM1808 VCC → PCM5102 Vin
// GND → PCM1808 GND → PCM5102 GND
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2711"; // RPi 4B
fragment@0 {
target = <&i2s>;
__overlay__ {
status = "okay";
#sound-dai-cells = <0>;
};
};
// PCM1808 ADC — captured via I2S DOUT (GPIO21)
fragment@1 {
target = <&i2s>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
pcm1808: pcm1808@0 {
compatible = "ti,pcm1808";
reg = <0>; // I2S device 0 (first codec on bus)
status = "okay";
#sound-dai-cells = <0>;
};
};
};
// PCM5102 DAC — driven via I2S DIN (GPIO20)
fragment@2 {
target = <&i2s>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
pcm5102: pcm5102@1 {
compatible = "ti,pcm5102a";
reg = <1>; // I2S device 1 (second codec on bus)
status = "okay";
#sound-dai-cells = <0>;
};
};
};
// Simple audio card binding ADC + DAC
fragment@3 {
target = <&sound>;
__overlay__ {
compatible = "simple-audio-card";
status = "okay";
simple-audio-card,name = "pcm1808-pcm5102-hat";
// RPi is I2S master
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&cpu_dai>;
simple-audio-card,frame-master = <&cpu_dai>;
// 48kHz / 24-bit
simple-audio-card,mclk-fs = <256>; // 48kHz * 256 = 12.288MHz
cpu_dai: simple-audio-card,cpu {
sound-dai = <&i2s>;
};
// PCM1808 ADC — capture path
pcm1808_dai: simple-audio-card,codec@0 {
sound-dai = <&pcm1808>;
format = "i2s";
bitclock-master;
frame-master;
};
// PCM5102 DAC — playback path
pcm5102_dai: simple-audio-card,codec@1 {
sound-dai = <&pcm5102>;
format = "i2s";
bitclock-master;
frame-master;
};
};
};
__overrides__ {
bclk-pin = <&i2s>,"bcm,pin-functions:18";
lrclk-pin = <&i2s>,"bcm,pin-functions:19";
din-pin = <&i2s>,"bcm,pin-functions:20";
dout-pin = <&i2s>,"bcm,pin-functions:21";
};
};