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
This commit is contained in:
@@ -0,0 +1,294 @@
|
||||
# Audio Configuration — PCM1808+PCM5102 I2S HAT
|
||||
|
||||
> **HAT:** Custom PCM1808 ADC + PCM5102 DAC I2S audio HAT
|
||||
> **RPi:** 4B, Raspberry Pi OS (Bookworm, 64-bit)
|
||||
> **Kernel:** rpi-6.6.y (upstream Raspberry Pi kernel)
|
||||
> **Last updated:** 2026-06-07
|
||||
|
||||
---
|
||||
|
||||
## Device Tree Overlay
|
||||
|
||||
The PCM1808 ADC has **no upstream overlay** in the rpi-6.6.y kernel tree. A custom overlay is provided at:
|
||||
|
||||
```
|
||||
hardware/pcm1808-pcm5102-overlay.dts
|
||||
```
|
||||
|
||||
### Build & Install
|
||||
|
||||
```bash
|
||||
# Install device-tree-compiler if not present
|
||||
sudo apt-get install device-tree-compiler
|
||||
|
||||
# Compile overlay
|
||||
dtc -@ -I dts -O dtb -o pcm1808-pcm5102-overlay.dtbo \
|
||||
hardware/pcm1808-pcm5102-overlay.dts
|
||||
|
||||
# Copy to boot overlays directory
|
||||
sudo cp pcm1808-pcm5102-overlay.dtbo /boot/firmware/overlays/
|
||||
# On older Pi OS: /boot/overlays/
|
||||
```
|
||||
|
||||
This compiles to `/boot/firmware/overlays/pcm1808-pcm5102-overlay.dtbo`.
|
||||
|
||||
### Enable Overlay
|
||||
|
||||
Edit `/boot/firmware/config.txt` (or `/boot/config.txt` on older installs):
|
||||
|
||||
```ini
|
||||
# ── Custom I2S HAT: PCM1808 ADC + PCM5102 DAC ─────────
|
||||
dtoverlay=pcm1808-pcm5102-overlay
|
||||
|
||||
# Disable onboard audio to free I2S pins
|
||||
dtparam=audio=off
|
||||
|
||||
# Optional: force I2S pins if overlay doesn't set them
|
||||
# dtparam=i2s=on
|
||||
```
|
||||
|
||||
### Verify Overlay Loads
|
||||
|
||||
```bash
|
||||
# Check overlay is loaded
|
||||
dmesg | grep -i "pcm1808\|pcm5102\|i2s"
|
||||
|
||||
# Check ALSA sees both devices
|
||||
aplay -l
|
||||
arecord -l
|
||||
|
||||
# Expected output for playback:
|
||||
# card 0: pcm1808pcm5102hat [pcm1808-pcm5102-hat], device 0: ... []
|
||||
# Subdevices: 1/1
|
||||
|
||||
# Expected output for capture:
|
||||
# card 0: pcm1808pcm5102hat [pcm1808-pcm5102-hat], device 0: ... []
|
||||
# Subdevices: 1/1
|
||||
|
||||
# Check /proc device tree
|
||||
cat /proc/device-tree/sound/name # should show "pcm1808-pcm5102-hat"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ALSA Configuration
|
||||
|
||||
### Default Card Setup
|
||||
|
||||
Create `/etc/asound.conf` (system-wide) or `~/.asoundrc` (per-user):
|
||||
|
||||
```conf
|
||||
# ── PCM1808+PCM5102 I2S HAT ─────────────────────────
|
||||
|
||||
# Default playback device
|
||||
pcm.!default {
|
||||
type asym
|
||||
playback.pcm {
|
||||
type hw
|
||||
card 0
|
||||
device 0
|
||||
}
|
||||
capture.pcm {
|
||||
type hw
|
||||
card 0
|
||||
device 0
|
||||
}
|
||||
}
|
||||
|
||||
# Hardware device aliases
|
||||
pcm.i2s_playback {
|
||||
type hw
|
||||
card 0
|
||||
device 0
|
||||
}
|
||||
|
||||
pcm.i2s_capture {
|
||||
type hw
|
||||
card 0
|
||||
device 0
|
||||
}
|
||||
|
||||
# Software volume control (PCM1808/PCM5102 have no HW volume)
|
||||
pcm.softvol_playback {
|
||||
type softvol
|
||||
slave.pcm "i2s_playback"
|
||||
control {
|
||||
name "Master Playback Volume"
|
||||
card 0
|
||||
}
|
||||
min_dB -50.0
|
||||
max_dB 0.0
|
||||
}
|
||||
|
||||
# 48kHz upsampler for 44.1kHz sources (like YouTube/Spotify)
|
||||
pcm.rate_convert {
|
||||
type plug
|
||||
slave {
|
||||
pcm "softvol_playback"
|
||||
rate 48000
|
||||
format S24_3LE
|
||||
channels 2
|
||||
}
|
||||
}
|
||||
|
||||
# Default: use rate conversion + softvol
|
||||
pcm.!default {
|
||||
type plug
|
||||
slave.pcm "rate_convert"
|
||||
}
|
||||
|
||||
# Control device
|
||||
ctl.!default {
|
||||
type hw
|
||||
card 0
|
||||
}
|
||||
```
|
||||
|
||||
### Test Audio
|
||||
|
||||
```bash
|
||||
# --- Playback test ---
|
||||
# Sine wave at 440Hz (A4)
|
||||
speaker-test -t sine -f 440 -l 1 -c 2
|
||||
|
||||
# Play a WAV file
|
||||
aplay /usr/share/sounds/alsa/Front_Center.wav
|
||||
|
||||
# --- Capture test ---
|
||||
# Record 3 seconds from ADC
|
||||
arecord -d 3 -f cd -t wav test_record.wav
|
||||
|
||||
# Play back the recording
|
||||
aplay test_record.wav
|
||||
|
||||
# --- Full loopback test ---
|
||||
# Play tone while recording (connect DAC output to ADC input)
|
||||
# Check latency: <10ms at 48kHz/128 frames
|
||||
arecord -d 5 -f S24_3LE -r 48000 -c 2 loopback_test.wav &
|
||||
speaker-test -t sine -f 440 -l 2
|
||||
wait
|
||||
aplay loopback_test.wav
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## JACK Audio Configuration
|
||||
|
||||
The pedal DSP runs under JACK. The existing JACK config in `main.py` uses `hw:1,0` (USB). Swap to `hw:0,0` for I2S:
|
||||
|
||||
### JACK Start
|
||||
|
||||
```bash
|
||||
# Kill PulseAudio (conflicts with JACK on RPi)
|
||||
pulseaudio --kill
|
||||
|
||||
# Start JACK at 48kHz/128 frames (recommended target: ~5.3ms buffer)
|
||||
jackd -R -d alsa \
|
||||
-d hw:0,0 \
|
||||
-r 48000 \
|
||||
-p 128 \
|
||||
-n 3
|
||||
|
||||
# For low-latency mode (risky, check xruns):
|
||||
jackd -R -d alsa -d hw:0,0 -r 48000 -p 64 -n 2
|
||||
```
|
||||
|
||||
### Update main.py Config
|
||||
|
||||
In `/home/oplabs/projects/pi-multifx-pedal/main.py`, change:
|
||||
|
||||
```python
|
||||
# FROM (USB Audio):
|
||||
# config = {
|
||||
# "input_device": "hw:1,0",
|
||||
# "output_device": "hw:1,0",
|
||||
# }
|
||||
|
||||
# TO (I2S HAT):
|
||||
config = {
|
||||
"input_device": "hw:0,0", # PCM1808 ADC
|
||||
"output_device": "hw:0,0", # PCM5102 DAC
|
||||
"sample_rate": 48000,
|
||||
"period_size": 128, # 2.6ms buffer
|
||||
"num_periods": 3, # triple-buffered
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Integration with NAM DSP
|
||||
|
||||
The I2S HAT uses the **same block size** as the NAM DSP engine (256 samples):
|
||||
|
||||
| Parameter | Value | Note |
|
||||
|-----------|-------|------|
|
||||
| Sample rate | 48,000 Hz | Both JACK and NAM |
|
||||
| Block size | 256 frames | NAM internal block |
|
||||
| JACK period | 128 frames | 2 × periods per block |
|
||||
| Round-trip (target) | <8ms | 128fr × 2 + codec delay + DSP |
|
||||
|
||||
At 48kHz/128 frames × 3 periods = ~8ms round-trip, well within the 10ms target for NAM DSP. The 256-sample NAM block fits exactly into 2 JACK periods.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No card 0 detected
|
||||
|
||||
```bash
|
||||
# Check if I2S is enabled in pin controller
|
||||
dmesg | grep -i i2s
|
||||
|
||||
# Check loaded overlays
|
||||
vcgencmd get_config dtov
|
||||
# Should show: pcm1808-pcm5102-overlay
|
||||
|
||||
# Rebuild overlay if kernel was updated
|
||||
sudo dtc -@ -I dts -O dtb -o /boot/firmware/overlays/pcm1808-pcm5102-overlay.dtbo \
|
||||
/home/oplabs/projects/pi-multifx-pedal/hardware/pcm1808-pcm5102-overlay.dts
|
||||
```
|
||||
|
||||
### No capture device
|
||||
|
||||
PCM1808 has no upstream overlay — the custom overlay provides the `pcm1808` codec binding. If capture isn't showing:
|
||||
|
||||
```bash
|
||||
# Verify the overlay node compiled
|
||||
dtc -I dtb -O dts /boot/firmware/overlays/pcm1808-pcm5102-overlay.dtbo | grep -i pcm1808
|
||||
|
||||
# Check I2S pin muxing is correct
|
||||
raspi-gpio get 18 19 20 21
|
||||
# Expect: GPIO 18: level=0 func=ALT5 (I2S BCLK)
|
||||
# GPIO 19: level=0 func=ALT5 (I2S LRCLK)
|
||||
# GPIO 20: level=0 func=ALT5 (I2S DIN)
|
||||
# GPIO 21: level=0 func=ALT5 (I2S DOUT)
|
||||
```
|
||||
|
||||
### PCM5102 hiss
|
||||
|
||||
- Add 330Ω + 10µF RC filter on DAC output (R5, C10 in BOM)
|
||||
- Ensure XSMT (pin 17) is pulled to 3.3V, not floating
|
||||
- Check 3.3V rail noise with oscilloscope (<50mV ripple at audio frequencies)
|
||||
|
||||
### JACK xruns
|
||||
|
||||
- Increase period size: `-p 256` (5.3ms, safer)
|
||||
- Increase num periods: `-n 3` (triple buffer)
|
||||
- Isolate RPi 4B from USB power noise
|
||||
- Check `cat /proc/asound/card0/pcm0p/sub0/status` for xrun count
|
||||
|
||||
---
|
||||
|
||||
## Pinout Reference
|
||||
|
||||
| Signal | BCM GPIO | Physical Pin | ALT Function | Direction |
|
||||
|--------|----------|:------------:|:------------:|:---------:|
|
||||
| BCLK | GPIO18 | Pin 12 | ALT5 (I2S) | RPi → HAT |
|
||||
| LRCLK | GPIO19 | Pin 35 | ALT5 (I2S) | RPi → HAT |
|
||||
| DIN | GPIO20 | Pin 38 | ALT5 (I2S) | HAT → RPi |
|
||||
| DOUT | GPIO21 | Pin 40 | ALT5 (I2S) | RPi → HAT |
|
||||
| 3.3V | — | Pins 1, 17 | Power | RPi → HAT |
|
||||
| 5V | — | Pins 2, 4 | Power | RPi → HAT |
|
||||
| GND | — | Pins 6, 9, 14, 25, 30, 34, 39 | Ground | — |
|
||||
|
||||
The I2S HAT uses a **stacking header** (2×20 female socket) to pass through all 40 GPIO pins so footswitches, LEDs, and display are accessible from the top of the HAT.
|
||||
@@ -0,0 +1,219 @@
|
||||
# PCM1808+PCM5102 I2S HAT — Bill of Materials + Wiring Diagram
|
||||
|
||||
> **Project:** Pi Multi-FX Pedal
|
||||
> **HAT:** Custom PCM1808 ADC + PCM5102 DAC I2S audio HAT
|
||||
> **Board:** 65×56mm 2-layer PCB (1590B compatible)
|
||||
> **Revision:** 1.0 — 2026-06-07
|
||||
|
||||
---
|
||||
|
||||
## Bill of Materials
|
||||
|
||||
### Audio ICs
|
||||
|
||||
| Ref | Part | Description | Package | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|---------|:---:|:---------:|--------|
|
||||
| U3 | **PCM1808** | 24-bit stereo ADC, I2S output | TSSOP-14 | 1 | $3.50 | Mouser/Digikey |
|
||||
| U4 | **PCM5102A** | 32-bit stereo DAC, I2S input | TSSOP-20 | 1 | $3.00 | Mouser/Digikey |
|
||||
| U2 | **TL072CN** | Dual JFET op-amp (preamp + buffer) | DIP-8 | 1 | $1.50 | Mouser/Digikey |
|
||||
|
||||
### Power Regulation
|
||||
|
||||
| Ref | Part | Description | Package | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|---------|:---:|:---------:|--------|
|
||||
| U1 | **AMS1117-3.3** | 3.3V LDO regulator, 1A | SOT-223 | 1 | $0.50 | Mouser/Digikey |
|
||||
| C1 | 10µF electrolytic | Input decoupling (5V rail) | 5mm radial | 1 | $0.15 | — |
|
||||
| C2 | 100nF ceramic | Input decoupling (5V rail) | 0805 | 1 | $0.05 | — |
|
||||
| C3 | 10µF electrolytic | Output decoupling (3.3V rail) | 5mm radial | 1 | $0.15 | — |
|
||||
| C4 | 100nF ceramic | Output decoupling (3.3V rail) | 0805 | 1 | $0.05 | — |
|
||||
|
||||
### Preamp Stage (Guitar Input → PCM1808)
|
||||
|
||||
| Ref | Part | Description | Package | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|---------|:---:|:---------:|--------|
|
||||
| J2 | 6.35mm TS jack | Guitar input jack, switched (NC contact for bypass) | Panel-mount | 1 | $2.00 | Switchcraft/Neutrik |
|
||||
| R1 | **1MΩ** | Input pulldown (prevents floating input noise) | 1/4W axial | 1 | $0.05 | — |
|
||||
| R2 | **10kΩ** | Series resistor to op-amp non-inverting input | 1/4W axial | 1 | $0.05 | — |
|
||||
| R3 | **100kΩ** | Feedback resistor (gain = 1 + R3/R4) | 1/4W axial | 1 | $0.05 | — |
|
||||
| R4 | **10kΩ** | Ground reference for feedback divider | 1/4W axial | 1 | $0.05 | — |
|
||||
| C5 | 10µF electrolytic | DC-blocking cap after op-amp output | 5mm radial | 1 | $0.15 | — |
|
||||
|
||||
### ADC Decoupling + Configuration
|
||||
|
||||
| Ref | Part | Description | Package | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|---------|:---:|:---------:|--------|
|
||||
| C6 | 100nF ceramic | PCM1808 VCC decoupling | 0805 | 1 | $0.05 | — |
|
||||
| C7 | 10µF electrolytic | PCM1808 VCC bulk decoupling | 5mm radial | 1 | $0.15 | — |
|
||||
|
||||
### DAC + Output Stage (+ config resistor)
|
||||
|
||||
| Ref | Part | Description | Package | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|---------|:---:|:---------:|--------|
|
||||
| J3 | 6.35mm TS jack | Audio output jack | Panel-mount | 1 | $2.00 | Switchcraft/Neutrik |
|
||||
| C8 | 100nF ceramic | PCM5102 VCC decoupling | 0805 | 1 | $0.05 | — |
|
||||
| C9 | 10µF electrolytic | PCM5102 VCC bulk decoupling | 5mm radial | 1 | $0.15 | — |
|
||||
| C10 | 10µF electrolytic | DC-blocking cap on DAC output (before output jack) | 5mm radial | 1 | $0.15 | — |
|
||||
| R5 | **330Ω** | Output series resistor (PCM5102 hiss reduction filter) | 1/4W axial | 1 | $0.05 | — |
|
||||
| R6 | **10kΩ** | Output stage resistor (output buffer feedback) | 1/4W axial | 1 | $0.05 | — |
|
||||
|
||||
### Connectors
|
||||
|
||||
| Ref | Part | Description | Qty | Est. Cost | Source |
|
||||
|-----|------|-------------|:---:|:---------:|--------|
|
||||
| J1 | 2×20 female header | RPi 40-pin GPIO stacking header, 8.5mm height | 1 | $2.50 | Adafruit/Amazon |
|
||||
| — | 2×20 male pin strip | Breakaway header for HAT-to-PCB mount | 1 | $1.00 | — |
|
||||
|
||||
### Hardware
|
||||
|
||||
| Part | Description | Qty | Est. Cost | Source |
|
||||
|------|-------------|:---:|:---------:|--------|
|
||||
| M2.5 standoffs | Brass, 12mm female-female, for RPi mounting | 4 | $2.00 | Amazon |
|
||||
| M2.5 screws | Pan head, 6mm, for RPi + HAT sandwich | 8 | $1.50 | — |
|
||||
| Pedal enclosure | 1590B diecast aluminum (112×60×31mm) | 1 | $8.00 | Hammond/Amazon |
|
||||
| Rubber feet | adhesive, 10mm diameter | 4 | $1.00 | — |
|
||||
|
||||
---
|
||||
|
||||
## Cost Summary
|
||||
|
||||
| Section | Est. Cost |
|
||||
|---------|:---------:|
|
||||
| Audio ICs (PCM1808 + PCM5102 + TL072) | $8.00 |
|
||||
| Power regulation | $0.90 |
|
||||
| Preamp passives | $2.40 |
|
||||
| ADC/DAC decoupling + output | $2.45 |
|
||||
| Connectors + stacking header | $3.50 |
|
||||
| Hardware (standoffs, screws, enclosure) | $12.50 |
|
||||
| **Total HAT (board + component)** | **~$29.25** |
|
||||
| + Enclosure + hardware | **~$41.75** |
|
||||
|
||||
Compare to AudioInjector Stereo HAT at $35-40 (no preamp, no enclosure) — the custom build costs about the same but is purpose-designed for a stompbox.
|
||||
|
||||
---
|
||||
|
||||
## Wiring Diagram
|
||||
|
||||
```
|
||||
RPi 4B 40-pin Header (J1)
|
||||
┌─────────────────────────────────────────┐
|
||||
│ ● ● ● ● ● ● ● ● ● ● ● ● ● │ Pins 1-20
|
||||
│ ● ● ● ● ● ● ● ● ● ● ● ● ● │ Pins 21-40
|
||||
└─────────────────────────────────────────┘
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
│ │ │ │ │ │ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ P1 P9 P17 P25 P33 | P2 P10 ... │ HAT PCB (top view)
|
||||
│ GND 3V3 5V BCLK LRCLK │
|
||||
│ │
|
||||
│ ┌─────┐ ┌─────┐ ┌──────────────┐ │
|
||||
│ │ U3 │ │ U4 │ │ U2 │ │
|
||||
│ │PCM1808│ │PCM5102│ │ TL072 │ │
|
||||
│ │ ADC │ │ DAC │ │ dual op-amp │ │
|
||||
│ └──┬──┘ └──┬──┘ └──────┬───────┘ │
|
||||
│ │ │ │ │
|
||||
│ └────┬────┘ │ │
|
||||
│ │ (I2S bus) │ │
|
||||
│ │ ├── J2 │
|
||||
│ ┌────┴────┐ │ Guitar In│
|
||||
│ │ U1 │ │ │
|
||||
│ │AMS1117 │ └──────────│
|
||||
│ │ 3.3V │ │
|
||||
│ └────────┘ │
|
||||
│ 5V → 3.3V │
|
||||
│ │
|
||||
│ ┌───────┐ │
|
||||
│ J3 ──│ C10 │ │
|
||||
│ Output ───────│ 10µF │ │
|
||||
│ └───────┘ │
|
||||
└─────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Detailed I2S Connections
|
||||
|
||||
```
|
||||
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)
|
||||
```
|
||||
|
||||
### PCM1808 Configuration Pins
|
||||
|
||||
| Pin | Name | Connection | Function |
|
||||
|-----|------|-----------|----------|
|
||||
| 12 | FMT | GND | I2S format (24-bit left-justified) |
|
||||
| 13 | MD1 | 3.3V | 48kHz sampling rate |
|
||||
| 14 | MD0 | GND | Standby disabled (always active) |
|
||||
|
||||
### PCM5102 Configuration Pins
|
||||
|
||||
| Pin | Name | Connection | Function |
|
||||
|-----|------|-----------|----------|
|
||||
| 15 | FLT | GND | Normal operation, low-latency filter |
|
||||
| 16 | DEMP | GND | No de-emphasis |
|
||||
| 17 | XSMT | 3.3V | Unmuted (always active) |
|
||||
|
||||
### Preamp Stage Circuit
|
||||
|
||||
```
|
||||
Guitar → J2 (TS jack)
|
||||
│
|
||||
├── R1 (1MΩ) → GND (input pulldown)
|
||||
│
|
||||
└── R2 (10kΩ) ──┬── TL072 (non-inverting input, pin 3)
|
||||
│
|
||||
│ TL072 (pin 6, output)
|
||||
│ │
|
||||
└── R3 (100kΩ) ──┐
|
||||
│
|
||||
TL072 (inverting input, pin 2)
|
||||
│
|
||||
R4 (10kΩ) → GND
|
||||
```
|
||||
|
||||
Non-inverting gain = 1 + R3/R4 = 1 + 100k/10k = **11 (~20.8dB)**
|
||||
|
||||
For high-output humbuckers, this is sufficient to bring ~200mV pickup output to ~2.2V (near line level). Single-coils may need a second gain stage; omit R4 and R3 becomes a 470kΩ feedback resistor for gain of 2 (~6dB).
|
||||
|
||||
### Power Distribution
|
||||
|
||||
```
|
||||
RPi 5V (pin 2/4)
|
||||
│
|
||||
├── U1 (AMS1117-3.3) → 3.3V
|
||||
│ ├── C1 (10µF) + C2 (100nF) ← input decoupling
|
||||
│ ├── C3 (10µF) + C4 (100nF) ← output decoupling
|
||||
│ │
|
||||
│ ├── U3 (PCM1808) — VCC pin 11
|
||||
│ │ └── C6 (100nF) + C7 (10µF) ← local decoupling
|
||||
│ │
|
||||
│ ├── U4 (PCM5102) — Vin pin 1
|
||||
│ │ └── C8 (100nF) + C9 (10µF) ← local decoupling
|
||||
│ │
|
||||
│ ├── U2 (TL072) — VCC+ pin 8
|
||||
│ └── PCM1808 MD1 (pin 13) — pull to 3.3V for 48kHz
|
||||
│
|
||||
└── PCM5102 XSMT (pin 17) — pull to 3.3V for unmuted
|
||||
```
|
||||
|
||||
### Ground Strategy
|
||||
|
||||
- **Star ground** at the RPi GND pin: all audio circuit grounds return to a single point
|
||||
- Separate analog and digital ground traces on PCB
|
||||
- Tie analog/digital ground planes together at the star point only
|
||||
- Keep I2S digital lines separate from analog audio traces
|
||||
- Input jack ground: connect to star via 10Ω + 100nF for ground loop isolation
|
||||
|
||||
---
|
||||
|
||||
## PCB Design Notes
|
||||
|
||||
- **2-layer board**, 65×56mm, 1.6mm FR4, HASL finish
|
||||
- **Trace width:** 0.254mm signal, 0.5mm power
|
||||
- **Clearance:** 0.2mm min, 0.3mm for audio traces
|
||||
- **Via:** 0.6mm/0.3mm (outer/inner diameter)
|
||||
- **Copper pour:** GND flood fill on both layers
|
||||
- Keep I2S traces (BCLK, LRCLK, DIN, DOUT) equal length ±2mm
|
||||
- Place decoupling caps within 5mm of IC power pins
|
||||
- Separate analog audio section (left side of board) from digital I2S (right side)
|
||||
Reference in New Issue
Block a user