Skip to content

Latest commit

Β 

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CD Changer Emulator

Raspberry Pi-based CD changer emulator for vintage Kenwood car stereos

Reverse-engineering the proprietary serial protocol used by 1990s Kenwood head units to communicate with their CD changers, and building an open-source emulator that replaces the changer with a Raspberry Pi β€” enabling unlimited music playback through the original stereo using its factory controls. Close-up front view of KRC-3006 cassette receiver

Project Status

πŸ”¬ Phase: Protocol Reverse Engineering β€” Capturing and decoding the synchronous serial protocol between a Kenwood KRC-3006 cassette receiver and a KDC-C717 10-disc CD changer.

Current Milestone

Phase 1 of TP-KRC3006-01 β€” power-on characterization β€” is complete. Executed 2026-04-19 on the KRC-3006 with a KDC-C717 changer connected through the pass-through breakout board. Every recorded step passed; results are published in TL-KRC3006-01-P1-20260419.

Findings that matter for the emulator design:

  • CH-CON (Pin 4) measures active-HIGH β€” the line rises when the changer source is selected. This conflicts with the KDC-CX85 service manual, which documents it as active-LOW. To be re-confirmed against decoded traffic in Phase 2.
  • Pin 2 (GND) and Pin 6 (D.GND) show continuity inside the head unit, which settles the grounding strategy for the HAT.
  • CLK (Pin 13) is gated, not continuous β€” 0 Hz at idle, 31.6 Hz during playback, briefly ~100 Hz on a track change before settling back. These are DMM frequency readings on a gated line, not bit-rate measurements; bit-level clock timing awaits logic analyzer capture in Phase 2A.
  • Pin 10 (CH-DATAC) idles near 5 V, not the LOW state predicted by the schematic analysis. Unexplained β€” still open.
  • The KDC-C717 is functional β€” displays E-01 with no magazine, then loads and plays on insertion.

Testing runs inline through the DN-KRC3006-04 pass-through breakout board, serial number 1, assembled and verified per TP-KRC3006-02: Close-up view of assembled pass-through breakout board

The KDC-CX85 originally used as the reference changer was diagnosed with a dead or degraded laser diode and retired. All further testing uses the KDC-C717: Close-up front view of KDC-C717 CD auto changer

For reference, the 13-pin mini DIN changer connector pinout: Kenwood 13-pin mini DIN CD changer connector pinout and signal names

Immediate To-Do

  • Execute Phase 2A of TP-KRC3006-01 β€” Idle-state logic analyzer capture and first message decode: establish the bit clock, polling interval, and frame structure.
  • Execute Phase 2B β€” Inline bidirectional capture of head unit ↔ KDC-C717 traffic. Inline capture is mandatory: the head unit will not switch to the changer source unless a changer is electrically present, so isolated head unit testing is impractical.
  • Execute Phase 3 β€” Command mapping: correlate each head unit control to its bus command and the changer's response, and compare against the Mictronics tables.
  • Resolve CLK directionality β€” The CX85 service manual lists CLK as I/O. If Phase 2B confirms it is bidirectional, the fixed-direction SN74LVC8T245 will not work for CLK; an SN74LVC1T45 (independent DIR pin) is the planned substitute.
  • Continue the emulator HAT schematic β€” The protocol and audio front end is placed (ATtiny1616, two SN74LVC8T245 level shifters, PCM5102A DAC, 40-pin Pi header, 13-pin mini DIN changer port, supporting passives). The automotive power supply section is not yet drawn and no PCB layout has begun; the schematic cannot be finalized until command mapping is complete.

Completed

  • Schematic analysis β€” Detailed analysis of both KRC-3006 and KDC-CX85 service manuals. Confirmed 5V TTL bus signaling, inline series resistors of 100Ω–7.5KΞ© on the head unit side against a uniform 100Ξ© on the changer side, all total series impedances between 200Ξ© and 7.6KΞ©, COMMSW protocol selection, and always-live 12V on the B.U. pin. Rev C corrected an earlier error: R145/R146 (100K) are pull-downs to ground that define the idle-LOW state on DATA H and CLK β€” they are not inline series elements, and bus edges are consequently fast (Ο„ β‰ˆ 2 ns), not slow. No edge-rate compensation is needed. (DN-KRC3006-02 Rev C)
  • Breakout board design β€” KiCad layout with two 13-pin mini DIN connectors and 2.54mm pin headers (ground adjacent to each signal) using Kenwood signal names on silkscreen. (DN-KRC3006-04)
  • Connector footprint verification β€” 3D-printed mockup confirmed pin spacing before committing to fab.
  • Breakout board ordered β€” 3 boards, OSH Park standard fab.
  • Completed TP-KRC3006-02 β€” Receive, inspect, assemble and verify pass-through breakout board serial number 1.
  • Set up test bench β€” Bench wiring, logic analyzer connections, and a custom staged power adapter with two toggle switches that simulate constant and ignition-switched power independently.
  • Troubleshoot CX85 β€” Initial tests showed the CD changer laser diode is dirty or degraded (E-04, all discs unreadable). Unit deemed inoperable and retired. Further testing is carried out with a KDC-C717 CD changer. (DN-KRC3006-06)
  • Completed Phase 1 of TP-KRC3006-01 β€” Power-on characterization with the KDC-C717 inline: supply and idle current draw, 13-pin DIN idle voltages on every signal pin, CH-CON polarity, CLK gating behavior, and pin 2 ↔ pin 6 ground continuity. Record: TL-KRC3006-01-P1-20260419.

What This Project Does

This project emulates a Kenwood CD changer on the 13-pin round DIN connector used by mid-1990s Kenwood head units. The emulator responds to all head unit commands (play, stop, next/previous track, disc selection, repeat, shuffle) and streams audio from a Raspberry Pi through the stereo's built-in amplifier.

Features (Planned)

  • Full protocol emulation β€” Head unit displays disc number and track number.
  • 10 virtual disc slots β€” Map playlists to CD1–CD0, just like a real magazine. "Magazine overflow" (a playlist of playlists) allows more than ten playlists per magazine, wrapping to the next bank automatically when disc 10 finishes.
  • Web-based library management β€” Build playlists and load virtual magazines from your phone over WiFi. FLAC-only library. By design there are no playback controls in the web UI β€” every transport command comes from the head unit, the same as a real changer. (DN-KRC3006-05)
  • Automotive power management β€” Supercapacitor-backed graceful shutdown, cranking ride-through, battery monitoring.
  • WiFi standby mode β€” When parked at home, the Pi stays on and connects to your home network for easy music transfers and system updates.
  • Custom Raspberry Pi HAT β€” Single PCB with ATtiny1616 protocol controller, PCM5102A I2S DAC, automotive power supply, designed for JLCPCB or similar assembly.

Target Hardware

Component Role
Kenwood KRC-3006 (or similar mid-90s Kenwood head unit) The stereo β€” device under test
Kenwood KDC-C717 CD auto changer β€” reference changer for protocol capture
Raspberry Pi 5 Media server, web interface, audio playback
ATtiny1616 Real-time Kenwood protocol handler (on custom HAT), run at 3.3V to match Pi GPIO natively
SN74LVC8T245PWR Γ—2 3.3V ↔ 5V bus level shifting, one per direction
PCM5102A I2S DAC Digital-to-analog audio conversion
1 TB NVMe SSD Music storage (avoids SD card corruption)
SparkFun TOL-18627 USB Logic Analyzer Protocol capture and analysis
Custom staged power adapter Two toggle switches simulating constant and ignition power independently on the bench

Target Vehicle

Any vintage automobile still using a Kenwood head unit with CD changer control. I am building this and testing around a KRC-3006 head unit due to it being the only shaft style cassette deck with a CD changer control port. My vehicle for this project is a 1985 Chevrolet C10 Silverado. The power supply design accounts for the electrically noisy environment of older vehicles without modern filtering.

Repository Structure

cd_changer_emulator/
β”œβ”€β”€ assets/                  # Project assets. Photos and screenshots.
β”œβ”€β”€ docs/                    # Project documentation
β”‚   β”œβ”€β”€ TP-KRC3006-01.odt    # Test plan 1: Protocol capture test procedure (IEEE 829)
β”‚   β”œβ”€β”€ TL-KRC3006-01.ods    # Test log 1: Companion log workbook to TP-KRC3006-01
β”‚   β”œβ”€β”€ TP-KRC3006-02.odt    # Test plan 2: Breakout board test plan
β”‚   β”œβ”€β”€ TL-KRC3006-02.odt    # Test log 2: Breakout board test log
β”‚   β”œβ”€β”€ TP-KRC3006-03.odt    # Test plan 3: Emulator test procedure (IEEE 829)
β”‚   β”œβ”€β”€ TL-KRC3006-03.ods    # Test log 3: Companion log workbook to TP-KRC3006-03
β”‚   β”œβ”€β”€ DN-KRC3006-01.md     # Design note 1: HAT design research
β”‚   β”œβ”€β”€ DN-KRC3006-02.md     # Design note 2: Schematic analysis
β”‚   β”œβ”€β”€ DN-KRC3006-03.md     # Design note 3: Bluetooth stretch goal
β”‚   β”œβ”€β”€ DN-KRC3006-04.md     # Design note 4: Breakout board design
β”‚   β”œβ”€β”€ DN-KRC3006-05.md     # Design note 5: Web application design for library management
β”‚   β”œβ”€β”€ DN-KRC3006-06.md     # Design note 6: Kenwood CD changer error codes
β”‚   β”œβ”€β”€ protocol/            # Decoded protocol data
β”‚   └── records/             # Completed, filled-out test logs (published as PDF)
β”œβ”€β”€ firmware/                # ATtiny1616 firmware (Arduino/megaTinyCore)
β”‚   └── src/
β”œβ”€β”€ software/                # Raspberry Pi software
β”‚   β”œβ”€β”€ flask-app/           # Web interface β€” legacy name; being superseded by FastAPI
β”‚   β”œβ”€β”€ mpd-config/          # Legacy name; playback is moving to python-mpv
β”‚   β”œβ”€β”€ power-mgmt/          # ATtiny UART bridge and power state management
β”‚   └── wifi-manager/        # AP/client mode switching
β”œβ”€β”€ hardware/                # KiCad PCB design files
β”‚   β”œβ”€β”€ kicad/
β”‚   β”‚   β”œβ”€β”€ changer cable breakout/  # Pass-through breakout board (complete, fabbed)
β”‚   β”‚   β”œβ”€β”€ emulator hat/            # Raspberry Pi HAT (schematic in progress)
β”‚   β”‚   └── lib/                     # Shared custom symbols and footprints
β”‚   β”œβ”€β”€ gerbers/             # Manufacturing files
β”‚   └── bom/                 # Bill of materials with JLCPCB part numbers
β”œβ”€β”€ captures/                # Logic analyzer captures (.sr files)
β”œβ”€β”€ diagrams/                # WaveDrom timing, Mermaid state machines, draw.io blocks
└── reference/               # Datasheets, protocol documentation, forum archives

Kenwood Compatibility

This project targets the "O protocol" (Old protocol) used by Kenwood head units with the round 13-pin DIN CD changer connector, roughly 1990–1998. Known compatible head units include models in the KRC series (cassette receivers) and some KDC series (CD receivers) from that era [citation needed].

Later Kenwood units with a rectangular changer connector use the "C protocol" (New protocol), which has different command encoding. This project does not currently target the C protocol, but the hardware and architecture could be adapted [citation needed].

Documentation

The project follows a documentation-first approach using IEEE 829-inspired test procedures. All documentation lives in the docs/ directory. Markdown is preferred wherever it fits, so design notes are written in Markdown and render directly on GitHub. The test plans and companion logs are currently kept in Open Document Format because they are table- and form-heavy, but no particular document format is required.

Test plans and test logs are created and maintained as matched pairs sharing a sequence number β€” TP-KRC3006-01 defines what gets tested and how, and TL-KRC3006-01 is where results are recorded. Filled-out copies of a log are published as PDF in docs/records/ as each phase completes.

Document Name Type Description
TP-KRC3006-01 Test Plan Initial test plan for capturing messages between CD changer and head unit
TL-KRC3006-01 Test Log Companion log workbook to TP-KRC3006-01
TP-KRC3006-02 Test Plan Breakout board test plan
TL-KRC3006-02 Test Log Breakout board test log
TP-KRC3006-03 Test Plan Test plan for creating and testing protocol emulation through full audio integration
TL-KRC3006-03 Test Log Companion log workbook to TP-KRC3006-03
DN-KRC3006-01 Design Note HAT design research β€” ATtiny1616 selection, PCM5102A DAC circuit, automotive power supply with supercap, WiFi architecture, JLCPCB assembly
DN-KRC3006-02 Design Note Schematic analysis β€” KRC-3006 head unit and KDC-CX85 changer signal routing, series resistor values, protocol variant identification
DN-KRC3006-03 Design Note Bluetooth stretch goal β€” wireless audio streaming while retaining factory head unit controls
DN-KRC3006-04 Design Note Breakout board design β€” pass-through 13-pin mini DIN breakout with logic analyzer headers
DN-KRC3006-05 Design Note Web Application Design for Emulator Library Management
DN-KRC3006-06 Design Note Kenwood CD Changer Error Codes

Per-document revision status is tracked in the documentation index.

Completed Test Records

Record Covers Date
TL-KRC3006-01-P1-20260419 TP-KRC3006-01 Phase 1 β€” power-on characterization 2026-04-19
TL-KRC3006-02-01-20260410 TP-KRC3006-02 β€” breakout board serial number 1 2026-04-10

Building / Contributing

This project is in early development. If you have a compatible Kenwood head unit and want to help with protocol capture, testing, or firmware development, contributions are welcome.

Prerequisites

References

License

This project is licensed under the MIT License β€” you're free to use, modify, and distribute this project for any purpose, including commercial use.

About

Raspberry Pi CD changer emulator for 1990s Kenwood car stereos. Reverse-engineers the 13-pin DIN serial protocol and replaces the changer with a Pi HAT featuring ATtiny1616, PCM5102A DAC, and automotive power management.

Topics

Resources

Stars

6 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors