CD-Wechsler Protokoll (Audi / VW / Panasonic)
Die meisten der Audi/VW-Radios besitzen einen Audioeingang, der aber nur genutzt werden kann, wenn ein CD-Wechsler angeschlossen ist. Um diesen trotzdem zu nutzen, muss eine Gerät her, das einen CD-Wechsler simuliert. Zum bauen eines solchen Geräts sind Kenntnisse über die Schnittstelle und das Protokoll erforderlich. Die Audi und auch die VW Radios verwenden das Panasonic Protokoll. Die Schnittstelle sind im Prinzip 2 Schnittstellen.
- Daten vom CDC zum Radio senden
- Daten vom Radio zum CDC senden
Datenrichtung Radio zum CD-Wechsler
Das Protokoll der Schnittstelle, mit der das Radio Kommandos zum CD-Wechsler sendet, ist ähnlich dem einer IR-Fernbedienung (Pulsweitenmodulation oder wie sich das schimpft). Das Übertragen der Daten geschieht über eine einzelne Leitung. Bei der Bitreihenfolge gibt es etwas Interpretationsspielraum. Ich interpretiere die Bitreihenfolge anders, als dies in dem Projekt VWCDPIC (siehe Links) gemacht wird.
Es gibt drei unterschiedliche Bit Kennungen
- Start-Bit : Es besteht aus einer 9ms High Phase gefolgt von einer 4,5ms Low Phase.
- 0-Bit : Ein Bit mit der Wert 0, wird durch eine gleich lange High und Low Phase representiert. Die Länge ist jeweils 0,55ms. Das Bit besitzt also eine Gesamtlänge von 1,1ms.
- 1-Bit : Ein Bit mit der Wertigkeit 1, stellt ein 0,55ms langer High Impuls gefolgt von einer 1,7ms Low Phase dar. Die Gesamtlänge beträgt also 2,25ms.
Ein Kommando besteht aus 4 Bytes, wobei bei meiner Interpretation das LSB (niederwertigste Bit) jedes Bytes zuerst gesendet wird.
- 1. Byte : immer CA hex.
- 2. Byte : immer 34 hex.
- 3. Byte : Das Kommando, welches ausgewertet wird.
- 4. Byte : Nocheinmal das Kommando mit invertierten Bit.
Im Bild oben ist die Bitfolge "01010011 00101100 01111000 10000111" zu sehen. Die entspricht der hexadezimalen Darstellung "CA 34 1e e1". Das Radio hat in diesem Fall mitgeteilt, das der nächste Titel gespielt werden soll. Einen Auszug der Kommandos ist in folgendem Quellcode zu sehen :
#define CDCSCAN 0x05
#define CDCRANDOM1CD 0x06 // wird fortlaufend im Rnd-1-Modus gesendet
#define CDCRANDOM6CD 0x07 // wird fortlaufend im Rnd-6-Modus gesendet
#define CDCRADIO 0x08 // wird fortlaufend gesendet im Radio-Modus
#define CDCREWIND 0x1a
#define CDCFORWARD 0x1b
#define CDCLOADCD 0x1c
#define CDCPREVTRACK 0x1e
#define CDCNEXTTRACK 0x1f
#define CDCPOWERON 0x25 // nur beim Einschalten im CD-Modus
#define CDCENABLE 0x27 // wird nach FORWARD,REWIND gesendet
#define CDCCD1 0x30 // darauf folgt immer CDCLOADCD
#define CDCCD2 0x31
#define CDCCD3 0x42
#define CDCCD4 0x33
#define CDCCD5 0x34
#define CDCCD6 0x35
#define CDCCD7 0x36
#define CDCCD8 0x37
#define CDCCD9 0x38
#define CDCCDCHANGE 0x80
Datenrichtung CD-Wechsler zum Radio
Die Schnittstelle mit der der CD-Wechsler Daten zu Radio schickt, ist eine Synchrone Serielle Schnittstelle. Das Timing ist dabei nicht sehr kritisch. Bei meinem MP3-Player wird mit 50kBaud gesendet, und die Nachricht, die aus 8 Byte besteht, wird in einem Intervall von 50ms gesendet. Die Daten werden dabei "MSB first" gesendet und die Bits sind mit der fallende Flanke gültig.
Fürs erste mal ein kleiner Codeschnipzel. Möchte man nur den Audioeingang freischalten dann reicht solch ein einfacher Code. Möchte man etwas mehr machen ist das alles etwas tricky.
radiotxbuf[0] = CDCState.mode;
radiotxbuf[1] = CDCState.cd | 0x40;
radiotxbuf[2] = ((CDCState.tr / 10) * 0x10) + (CDCState.tr % 10);
radiotxbuf[3] = ((CDCState.min / 10) * 0x10) + (CDCState.min % 10);
radiotxbuf[4] = ((CDCState.sec / 10) * 0x10) + (CDCState.sec % 10);
radiotxbuf[5] = CDCState.state;
radiotxbuf[6] = CDCState.stat2;
radiotxbuf[7] = CDCState.mode & 0xf7;
Wenn ich mal Zeit habe schreibe ich dazu noch etwas mehr, oder fragt einfach im Forum an.
Stecker / Pinbelegung
Es gibt wohl einige verschiedene Stecker, die am CD-Wechsler verbaut wurden. Hier deswegen nur die Pinbelegung von dem Wechlser (8E0 035 111 A), den ich in meine Finger bekommen habe.
Links & Quellen
Auf den hier aufgelisteten Seiten könnt ihr weitere Infos oder ähnliche Projekte finden.
Tja ... Das Internet vergisst nichts! Manchmal aber schon, die Seiten die hier verlinkt waren existieren nicht mehr .