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.

π¬ 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.
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:

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:

For reference, the 13-pin mini DIN changer connector pinout:

- 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.
- 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.
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.
- 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.
| 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 |
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.
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
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].
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.
| 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 |
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.
- Arduino IDE with megaTinyCore installed
- PulseView for logic analyzer captures
- KiCad for PCB design
- Python 3 with FastAPI for the web interface and python-mpv for playback
- LibreOffice to open the test plans and logs (
.odt/.ods) - A UPDI programmer for the ATtiny1616 (Adafruit UPDI Friend or DIY with a serial adapter and resistor)
- Mictronics CDC Protocol Documentation (Kenwood command tables)
- Elektroda.pl Kenwood Slim CD Changer Emulator (szymtro's 8051 implementation)
- AVRFreaks: Kenwood CD Changer β Serial Strings
- Pinouts.ru: Kenwood 13-pin DIN connector
- SpenceKonde/megaTinyCore (ATtiny1616 Arduino support)
- pyupdi / pymcuprog (UPDI programming from Raspberry Pi)
This project is licensed under the MIT License β you're free to use, modify, and distribute this project for any purpose, including commercial use.