martinsuniverse

MP3-Player Audi-O-Player

Bei dem Audi-O-Player handelt es sich um einen MP3-Player, den ich für meinen Audi A3 (2004) entworfen habe.

Anforderungen / Ausstattung

  • Abspielen von MP3 Dateien bis 320kBit/s.
  • Unterstützung von Playlisten. (im Augenblick nur M3U)
  • Bedienung über das Auto-Radio (Concert II) -> CD-Wechsler Emulation.
  • Interpret und Titelnamen (ID3-Tag) Anzeige im FIS. Datenübertragung über den CAN-Bus.
  • SD- bzw. MMC-Karte als Speichermedium mit FAT12, FAT16 und FAT32.
  • On/Off durch Powercontrol-Leitung vom Radio.
  • Programmupdates per SD-Karte.
  • Fortsetzen des Titels nach dem Wiedereinschalten des Radios.

ACHTUNG !!! Ich habe keine Informationen darüber, was Audi zu dem Thema Datenmanipulation auf dem CAN-Bus sagt oder ob irgendwelche Fehler in den Fehlerspeichern abgelegt werden. Ich übernehme keinerlei Verantwortung für Schäden die an eurem Auto bzw. an Leib und Leben entstehen.

Hardware Allgemein

Blockschaltbild

Da die Schaltung sehr kompakt werden soll, sollten möglichst SMD-Bauteile verwendet werden aber trotzdem sollten sie gut beschaffbar sein. Dazu muss ich leider eingestehen, dass ich diese Vorgabe von mir nicht zu 100% erfüllt wurde. Da ich aber eine Möglichkeit habe den M16C6NK zu bekommen und ich die M16C Architektur von Renesas ganz gut finde, habe ich mich für diese entschieden. Was ich bestimmt noch nicht optimiert habe sind die Bauteilkosten.

Schaltplan Seite 1
Schaltplan
Schaltplan Seite 2
Schaltplan

Die Platinen habe ich selbstverständlich professionell anfertigen lassen, denn die Breite der Leiterbahnen, die ich einsetze sind einfach zu schmal zum selbst ätzen. Außerdem ist es nicht so einfach, sehr kleine Durchkontaktierungen selbst herzustellen.

Platinenoberseite
Platinenunterseite

Stromversorgung

Für meinen Entwurf benötigt ich mehrere unterschiedliche Versorgungsspannungen.

  • 3,3V : MCU, SD-Karte, MP3-Decoder
  • 5,0V : CAN-Bus, CDC-Interface
  • ca. 8V : Audioverstärker (Evtl. würden auch gerade so 5V reichen, um eine dem Rundfunk gleiche Lautstärke zu erreichen, aber ich bin mal auf Nummer sicher gegangen.)

Die 5.0V Spannungsstabilisierung übernimmt ein Schaltregler vom Typ LM2594, um die Wärmeentwicklung in Grenzen zu halten. Die anderen beiden Spannungsregler müssen nicht so viel Leitung verheizen, deswegen setze ich dort nur Längsregler ein. Die Spannungsregler (Powerdown Eingang) werden von der Powercontrol-Leitung des Radios gesteuert, wobei ich noch eine Selbsthaltung vorgesehen habe, um die aktuellen Daten noch in den Daten-Flash zu speichern, bevor die Betriebsspannung abgedreht wird. Nachdem die Powercontrol-Leitung auf low geht, speichert die MCU zuerst alle Parameter, und löst dann erst die Selbsthaltung, um die Betriebspannung auszuschalten.

Digitaler Schaltungsteil

Den Kern der Schaltung bildet die MCU von Renesas. Ich habe mich für den Typen M16C6NK entschieden, da er für mich einige Vorteile bietet :

  • Architektur
    • Einfacher Programmieradapter
    • Gut debugbar
    • Gut in C zu programmieren
  • 2 CAN-Controller
  • 31kByte RAM (um die Titelliste zwischen zu speichern, FAT-Cache, usw.)
  • 512kByte Programm Flash (ich benutze nur einen sehr kleinen Teil davon)
  • Interner Daten-Flash (um den Titel nach dem Wiedereinschalten fortzusetzen)
  • Viele Peripherie (Schnittstellen, Timer, usw.)

Das zweite Arbeitstier ist natürlich der MP3-Decoder von VLSI, der VS1011. Als Speichermedium für die Musik dienen bei mir eine MMC- oder SD-Karte. Bis jetzt habe ich verschiedene Kartentypen, von verschiedenen Herstellern mit unterschiedlichen Kapazitäten bis 2GB getestet. Sie liefen alle ohne zu Murren. Irgendwann teste ich auch noch 4GB SDHC-Karten. Die SDHC müssten eigentlich auch funktionieren, da der SPI-Modus immer noch unterstützt wird. Die Frage ist nur ob das bei allen SDHC-Karten aller Hersteller so ist.

CAN-Bus / Titel Anzeige im FIS

Ansicht des FIS

Um die Daten, die über den Infotainment-CAN-Bus flitzen zu manipulieren, trenne ich den CAN-Bus zwischen Kombiinstrument und Radio auf. Bekommt meine Schaltung keinen Strom oder läuft das Programm nicht an, überbrückt ein kleines Relais die beiden Teile des CAN-Busses. Ist mein Programm gestartet empfange es alle Datenpakete von beiden Teilen des CAN-Busses und sende sie auf dem anderen CAN-Bus. Nur die Datenpakete, die die Anzeige im FIS steuern ersetze ich durch meine eigenen Datenpakete. In der oberen Zeile des FIS, da wo sonst der Sendername angezeigt wird, wird der Interpret und der Titelname durch scrollen. In der Zeile darunter wird im Moment die Geschwindigkeit angezeigt. Der Text wird sogar in kleineren Schritten als eine Zeichenbreite gescrollt. Für die Anzeige muss nur die Zeichentabelle bekannt sein.

Für den Interpreten und den Titelnamen ziehe ich die Daten im MP3-Tag heran. Der Dateinamen ist absolut unerheblich.

Eine serielle Schnittstelle der MCU, die ich herausgeführt habe, ist noch ungenutzt. An sie könnte eine weitere Anzeige angeschlossen werden, auf der zusätzlich zum Interpreten und Titelnamen weitere Informationen angezeigt werden könnten. Dies währe aber auch eine Alternative, für die jenigen, die nicht am CAN-Bus rumfummeln möchten.

Audio Schaltungsteil

Das dekodieren des MP3-Datenstroms übernimmt ein VS1011 von VLSI. Ich hätte lieber einen VS1003 eingesetzt, da dieser auch WMA unterstützt, aber dieser ist nicht ganz so einfach in kleinen Stückzahlenzu bekommen. Da das Radio am Audioeingang für den CD-Wechsler ein relativ hohen Signalpegel haben möchte, um eine akzeptable Lautstärke zu erreichen, wird das Audiosignal des VS1011 durch einen Singlespannungs-OPAmp verstärkt. Die Lautstärke hängt natürlich von der Aussteuerung der MP3-Titel ab. Ich hoffe aber eine gute Abstimmung getroffen zu haben. Als OPAmp setzte ich eine Typen ein, der wegen des Singelspannung Betriebs mit einer niedrigen Betriebspannung auskommt. Deswegen bieten sich z.B. die Typen TLC272, OPA2134 oder OP213 an. Um Störungen zu minimieren habe ich die Masseführung für Analog- und Digitalteil getrennt geführt.

Mechanischer Aufbau

Leider habe ich mir beim Entwurf der Platine nicht genügend Gedanken über den Einbauort gemacht. Zum Glück passt der MP3-Player aber gerade noch so ins Handschuhfach, in die linke obere Ecke. Soweit ich weiß, ist der Platz eigentlich für einen Schalter vorgesehen, ich glaube zum Ausschalten des Beifahrerairbags. Dieser Schalter ist aber bei meinen Wagen nicht verbaut. Als Alternative kam mir noch der Platz über dem Radio, wo der Getränkehalter eingebaut ist, in den Sinn. Dann hatte ich statt des Getränkehalters ein Ablageschubfach eingebaut, aber ich habe mich eh dagegen entschieden.

Gehäuse ohne Platine

Das Gehäuse habe ich komplett selbst hergestellt. Die Einzelteile habe ich, mit einer CNC-Fräse, aus einen Aluminiumblock ausgefräst. Um den Einschub für die SD-Karte befindet sich noch eine kleine Einlage aus milchigem Plexiglas. Diese Einlage wird von hinten durch rote LEDs angestrahlt, wodurch der Einschubschlitz für die SD-Karte komplett leuchtet. An die Frontplatte sind 4 Schrauben und die Unterhälfte des Gehäuses geklebt. Der Deckel wird auf die Unterhälfte geschraubt, und klemmt damit auch gleich die Platine fest mit ein. Das ganze wird dann mittels der 4 Muttern im Handschuhfach festgeschraubt.

Gehäuse offen

Zuerst dachte ich die Front schwarz zu eloxieren, aber das war mir dann doch zu aufwendig. Nun lackiere ich sie in schwarz Seidenglanz. Ich hoffe nur, dass der Lack sich auch ein klein wenig mechanisch beanspruchen lässt. Es kann immer mal vorkommen, dass man mit dem Fingernagel oder der SD-Karte über die Oberfläche kratzt.

Handschuhfach vor dem Einbau
Handschuhfach vor dem Einbau
Handschuhfach nach Einbau
Handschuhfach nach Einbau

Funktionsweise - Bedienung

Die Bedienung erfolgt komplett über das Radio. Am MP3-Player selber sind keine Tasten nötig. Das Radio (Concert II, mit anderen habe ich es nicht getestet) besitzt einen CD-Wechsler Eingang.

Foto vom Radio Concert II

Der MP3-Player hat nun die Aufgabe einen solchen CD-Wechsler zu emulieren. Zum einen sendet das Radio die Information welche Taste gedrückt wurde und ein paar Statusinformationen, und zum anderen muss dem Radio der Status des CD-Wechslers / MP3-Players mitgeteilt werden. Das Radio zeigt dann im eigenen Display die Nummer der CD, des Titels und die Laufende Zeit des Titels an. Leider ist es nicht möglich, oder mir nicht bekannt, in diesem Display den Interpreten und den Titelnamen an zu zeigen. Offiziell unterstützt das Radio Concert II nur einen CD-Wechsler für 6 CDs, aber es ist sogar möglich, bis zu 9 CDs zu unterstützen. Wie gesagt, ich kann hier nur für mein Concert II von Audi sprechen.

Zum Navigieren werden von meinem Programm folgende Funktionen unterstützt :

  • CD vor und zurück
  • Titel vor und zurück
  • Random (Zufallswiedergabe)
  • Scan (Spielt jeden Titel 10 Sekunden an)

Der schnelle Vor- und Rücklauf wird nicht unterstützt.

Wegen den Beschränkungen des Radios unterstütze ich maximal 891 Titel (9 CDs * 99 Titel pro CD). Um die 891 Titel unter zu bringen benötigt man höchst wahrscheinlich mindestens eine 4GB SD-Karte, die ich allerdings noch nicht getestet habe. Beim Einschalten des MP3-Players bzw. beim einlegen einer neuen SD-Karte werden die gefundenen Titel in einer Tabelle im RAM abgelegt. Dadurch ist gewährleistet, dass sehr schnell zwischen den Titeln und "CDs" gewechselt werden kann.

Beim Ausschalten des Radios oder beim Wechsel in den Radio-Modus wird der aktuelle Titel und die aktuelle Abspielposition gespeichert, und beim erneuten Wechsel in den CDC-Modus wird der Titel an dieser Position fortgesetzt. Weiterhin wird auch eine CRC der FAT gespeichert. Das ermöglicht mir zu erkennen, ob der Inhalt der SD-Karte verändert wurde. Wird die SD-Karte herausgezogen und ohne Veränderungen wieder eingesteckt, wird der Titel dort fortgesetzt wo er beendet wurde. Wird eine Datei hinzugefügt oder gelöscht ändert sich die CRC der FAT und das Abspielen beginnt bei CD 1 Titel 1.

Was ein wenig knifflig ist, ist die Aufteilung der Titel auf die virtuellen CDs. Das Programm durchsucht die gesamte SD-Karte nach allen M3U-Playlisten und MP3-Datei. Das Programm geht dabei wie folgt vor :

Suchen nach allen M3U-Playlisten im Hauptverzeichnis. Je Playliste wird eine virtuelle CD verwendet, in der alle Titel der Playliste enthalten sind. Sind noch nicht alle CDs belegt, geht die Suche mit den MP3-Dateien im Hauptverzeichnis weiter. Diese werden alle einer virtuellen CD zugeordnet. Die Suche wird dann in den Unterverzeichnissen fortgesetzt. Je Unterverzeichnis des Hauptverzeichnisses wird eine virtuelle CD verwendet. In den Unterverzeichnissen werden auch wieder zuerst die M3U-Playlisten abgearbeitet, bevor die MP3-Dateien und zum Schluss die weiteren Unterverzeichnisse durchsucht werden. Es werden bis zu 8 Unterverzeichnis Ebenen durchsucht. Schau dir dazu auch die nebenstehende Grafik an.

Dateisuche
Schema der Dateisuche

Geplant ist von mir noch eine Umschaltung der Anzeigefunktion. Dazu könnten die noch ungenutzten Tasten für den schnellen Vor- und Rücklauf dienen.

Software aktualisieren

Um das Aktualisieren der Software so einfach wie möglich zu gestalten, habe ich einen Bootloader geschrieben, der auf der SD-Karte nach schaut, ob dort eine aktuellere Softwareversion liegt. Diese wird dann in die MCU geflasht. Eine ältere oder gleiche alte Softwareversion wird nicht neu in die MCU geflasht. Ebenfalls wird vor dem flashen vom Bootloader geprüft, ob die Software überhaupt für diese Platine bestimmt ist.

Dateien zum herunter laden

Eagle Pläne und Bauteilliste : herunter laden (135 KiB)
Firmware und Bootloader : herunter laden (21 KiB)
Firmware Quelltext : herunter laden (114 KiB)
Bootloader Quelltext: herunter laden (38 KiB)

Fotogalerie

Die Fotos, die weiter oben keinen Platz gefunden haben, könnt ihr euch hier ansehen.

Gerendert mit Eagle3D
Im Auto ohne Gehäuse

Erweiterungsmöglichkeiten

Sollte ich die Platine noch einmal auflegen, könnten noch folgende Änderungen hinzu kommen :

  • Abspielen von WMA, VS1003 als MP3-Decoder verwenden.
  • Unterstützung von PLS-Playlisten.
  • Platine neu entwerfen, um Platz zu sparen.

Auf den hier aufgelisteten Seiten könnt ihr weitere Infos oder ähnliche Projekte finden.

  • www.canhack.de
    Dies ist auch ein Forum wo es um den CAN-Bus im Auto geht.
  • www.mictronics.de
    Hier findet ihr Informationen zum CDC-Protokoll. Für eurer VW/Audi-Radio, müsst ihr beim Panasonic-Protokoll schauen.
  • www.k9spud.com
    Und noch ein mal Infos zum CDC-Protokoll und sogar mit Quellcodes (Meiner Meinung nach nur nicht schön programmiert, das geht auch besser ;-) ).

©2008

nach oben