VWCDC

ESP32 CD changer emulator for older VW/Audi/Skoda/Seat head units

View on GitHub →
esp32embeddedhardwarecar-audio
VWCDC PCB top side

VWCDC is an ESP32 firmware that emulates the CD changer interface in older VW, Audi, Skoda, and Seat head units, letting you pipe AUX audio (or a Bluetooth module) into stereos that predate any modern input. Originally written in 2024 and actively maintained, it’s an ESP32 port of shyd’s VAG CDC Faker — a long-running AVR-based project by the car-hacking community.

VWCDC PCB bottom side

The custom PCB breaks out the ESP32’s SPI and RMT pins to a header that plugs directly into the head unit’s CDC connector — just three wires (clock, data in, data out) plus power.

How it works

The VAG CDC protocol is a two-way conversation over a single SPI-style bus. The ESP32 pretends to be the head unit’s missing CD changer and runs the protocol in both directions:

  • ESP32 → radio — A status packet is clocked out at 62.5 kHz, MSB first, SPI Mode 1, eight bytes per packet, with a strict 874 µs gap between bytes. The packet encodes the current CD number, track number, playback mode, and a checksum. The same packet is re-sent every ~50 ms — that heartbeat is what tells the radio the changer is still connected.
  • Radio → ESP32 — Button presses (next track, CD select, scan, etc.) come back over a single data line using a pulse-width protocol based on (inverted) NEC infrared. The ESP32’s RMT peripheral captures the pulse timings in hardware and decodes the 32-bit command, which is then validated by prefix bytes and a checksum.

The trick is that the RMT decoder runs in a FreeRTOS task, so receiving button presses never blocks the periodic SPI status output.

Heart of the emulation

cpp

Wiring

NameESP32 PinRadio PinPurpose
SCLKGPIO18CDC CLOCKSPI clock (62.5 kHz)
MOSIGPIO23DATA INData from ESP to radio (SPI output)
DATA OUTGPIO4DATA OUTRadio button commands (RMT input)

Only three wires run between the ESP32 and the head unit.

Supported radios

Tested with this ESP32 port:

  • RCD200 mp3 (VW Polo 2008)
  • Seat Audio System Aura CD2 (Seat Toledo II, 2004) — credit to @Ammar1605

A much longer list of radios is reported working on the sibling implementations below, including Audi Concert, Chorus, Symphony, VW Gamma, MFD, RCD300, RNS300, and others. See the project README for the full list.

Build

  1. Install VS Code + PlatformIO
  2. Install the Espressif 32 platform in PlatformIO
  3. Clone the repo: git clone https://github.com/NullString1/VWCDC
  4. Connect the ESP32 and put it in download mode
  5. Run the Upload task in PlatformIO

Roadmap

  • Media control via Bluetooth (next / prev / play / pause sent to a paired phone)
  • CDs mapped to playlists — the radio’s six CD-select buttons become six saved playlists on the phone

The same protocol has been implemented on several other architectures. If you don’t have an ESP32 handy, one of these might fit your build:

Where to find it

  • VWCDC on GitHub — firmware, schematics, and the full supported-radios list