0ae2ca6e8e
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
116 lines
3.5 KiB
Devicetree
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";
|
|
};
|
|
}; |