Vs1002

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Diese Anleitung beschreibt, was bei der Inbetriebnahme eines VS1002 mp3-Dekoders zu beachten ist. Der Decoder ist beispielsweise auf der im Shop angebotenen mp3-Platine vorhanden. Der VS1002 ist zwar bereits „not recommended for new design“, aber die Ansteuerung der neueren VS10xx dürfte vergleichbar sein. Motiviert ist die Anleitung durch diverse Threads hier im Forum, bei denen die Leute nicht wissen, wie sie dem Dekoder einen Ton entlocken können.

Die Pins

Der Chip verwendet ein SPI-Interface und benötigt 3,3V. Wird der Mikrocontroller mit 5V Betrieben, so ist also ein Pegelwandler (z. B. 74HC4050) nötig.

Für das SPI-Interface werden zunächst drei Datenleitungen benötigt. Hinzu kommen zwei Chip Select Leitungen XCS und XDSC. Wenn man so möchte besteht der Chip also aus zwei Slaves. Ist die eine Leitung (XDCS) low, so können mp3-Daten (SDI) an den Chip gesendet werden. Mit der anderen Leitung (XCS) werden Befehle (SCI) gesendet. Einer der Befehle ermöglicht es, auf die XDCS-Leitung zu verzichten, indem intern die invertierte XCS Leitung verwendet wird. Dies spart zwar einen Pin, hat aber den Nachteil, dass so keine weiteren Slaves (wie eine MMC) mehr am SPI-Bus angeschlossen werden können, weil immer ein Slave mit dem Bus verbunden ist.

Zusätzlich zu dem SPI-Interface gibt es noch die DREQ-Leitung vom Chip zum Mikrocontroller. Diese ist immer dann high, wenn mindestens 32 Byte Daten oder Befehle entgegengenommen werden können. Insbesondere wenn der Mikrocontroller noch viele andere Dinge (Display Menüs, Netzwerkverkehr...) nebenher macht, empfiehlt es sich, diese mit einem Interrupteingang zu verbinden, um auf Rechenzeit intensives Pollen zu verzichten.

Die Chip Select Leitungen dienen auch gleichzeitig der Synchronisation, falls mal ein Takt „übersehen“ werden sollte. Daher empfiehlt das Datenblatt nach dem Senden größerer Datenblöcke die entsprechende Chip Select Leitung einmal auf high zu setzten (und wieder zurück auf low für den nächsten Dateblock).

Die Reset-Leitung muss auf High liegen, damit der Chip lauffähig ist.

Die Pins des Olimex mp3 Headers

Eigentlich sitzt in dem VS1002 ein kompletter eigener Mikrocontroller, der auch eigene Programme ausführen kann. Auf dem Olimex Board wird dies verwendet, um mp3s ohne zusätzlichen Mikrocontroller von einer SD-Karte abspielen zu können. Möchte man aber das Board wie oben als SPI-Slave benutzen, muss man verhindern, dass dieses Programm geladen wird. Hierzu muss der der SWCS1-Pin des Boards auf GND gelegt werden.

Der Reset-Jumper muss gezogen werden und der Jumper für Spannungsversorgung entsprechend auf "extern" umgestellt werden.

Danach sollte das Board wie gewünscht laufen. Tut es aber nicht. Weiters muss der auf dem Board befindliche Jumper DREQ_E entfernt werden, auch wenn der Jumper den DREQ-Pin nur mit den Eingängen der LED, des EEPROMs und des SD-Sockels verbindet. Eigentlich müsste auch die rote ACT-LED nach Entfernen des Jumpers aus sein, ist sie aber nicht. Möglicherweise passt hier also der gelieferte Schaltplan nicht zur Platine.

Die Pins des Olimex-Anschlusses werden etwas anders benannt: Was im VS1002 Datenblatt XCS ist, ist auf der Platine CS. Und XDSC wird DSC genannt.

SCI-Kommandos

Kommandos bestehen aus 4 aufeinander folgende SPI-Bytes. Das erste Byte entscheidet, ob ein Register gelesen (0x03) oder geschrieben (0x02) werden soll und das zweite welche Adresse benutzt wird. Byte 3 und 4 sind beim Schreiben dann der 16-Bit Wert des Registers. Wird gelesen, ist der Inhalt hingegen egal und der Controller empfängt den Registerinhalt. Es wird das höherwertige Byte der 16 Bit zu erst gelesen b.z. geschrieben.

Nach dem Senden eines SCI-Kommandos dürfen in den folgenden 5µs kein weiteren Daten oder Kommandos gesendet werden.

SDI-Daten

Als SDI-Daten wird 1:1 die mp3 Datei gesendet, so wie sie ist - mit Header und allem drum und drann.

Die Initalisierung

SPI kann beispielsweise mit 1 oder 2 MHZ Takt betrieben werden. Der Beispielcode von Olimex für den ARM verwendet 1 MHZ. CPOL und CPHA bleiben 0. Die Initialisierung des Controllers besteht aus 3 SCI-Schreibbefehlen, danach darf begonnen werden die mp3-Datei zu senden, und es sind nicht zwingend weitere SCI Kommandos benötigt.

0x0800 an Adresse 0
Entspricht eigentlich dem Defaultwert, aber stellt alles definitiv richtig ein. Das gesetzte Bit sagt, dass wir den VS1002-Modus und nicht einen VS1001-Kompatiblitätsmodus verwenden wollen.
0x9800 an Adresse 3
Sagt dem Chip welchen Takt der Quarz hat und dass wir den Takt verdoppeln möchten. Im Olimex-Beispiel wird etwas gewartet, bis sich der gesetzt Takt „stabilisiert“ hat, also warten wir auch mal 100ms.
0x2020 an Adresse 0x0B
Stellt die Lautstärke ein. Ein Byte für den linken und ein Byte für den rechten Kanal. 0xFFFF ist ganz leise, 0x0000 ganz laut. 0x2020 ist „recht laut“.

Probleme

Im Dauerbetrieb habe ich ein paar Gemeinheiten gefunden, die man eventuell beachten sollte, und die nicht im Datenblatt stehen:

  • Das Senden von bestimmten ungültigen Daten kann den Chip scheinbar aufhängen, und es hilft nur noch ein Hardware-Reset (ein Software-Reset reicht nicht).
  • Der Decoder zählt die Spielzeit in Sekunden, was sehr praktisch ist wenn man die gespielte Zeit eines Stückes anzeigen möchte, ohne sich um den Aufbau der mp3-Daten zu kümmern. Man könnte davon ausgehen, dass das 16 Bit Registern nach 216 Sekunden (~18 Std) überläuft. In der Praxis tut es dies aber bereits bei 214 Sekunden. Möglich, dass dies bei anderen Vs10xy anders ist.

Weblinks