VWCDC
ESP32 CD changer emulator for older VW/Audi/Skoda/Seat head units
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.
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
SPI.endTransaction(); }
Wiring
| Name | ESP32 Pin | Radio Pin | Purpose |
|---|---|---|---|
| SCLK | GPIO18 | CDC CLOCK | SPI clock (62.5 kHz) |
| MOSI | GPIO23 | DATA IN | Data from ESP to radio (SPI output) |
| DATA OUT | GPIO4 | DATA OUT | Radio 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
- Install VS Code + PlatformIO
- Install the
Espressif 32platform in PlatformIO - Clone the repo:
git clone https://github.com/NullString1/VWCDC - Connect the ESP32 and put it in download mode
- Run the
Uploadtask 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
Related projects
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:
- AVR — tomaskovacik/vwcdavr
- AVR — shyd’s original VAG CDC Faker
- PIC — tomaskovacik/vwcdpic
- STM32 — tomaskovacik/vwcdstm32
Where to find it
- VWCDC on GitHub — firmware, schematics, and the full supported-radios list