Forum: Mikrocontroller und Digitale Elektronik MP3 Player Datenstom


von MartinS (Gast)


Lesenswert?

Hallo,

ich bin dabei einen MP3-Player, mit dem VS1011, zu bauen. Kann ich in
den VS1011 die komplette MP3-Datei schieben oder muss ich den Header
weg lassen?

ciao
Martin

von john (Gast)


Lesenswert?

der nimmt das ganze file

von MartinS (Gast)


Lesenswert?

Danke

von Daniel R. (Gast)


Lesenswert?

Wo bekommst Du die Daten her?

von john (Gast)


Lesenswert?

wahrscheinlich von ner sd oder cf. denke ich mal

von MartinS (Gast)


Lesenswert?

Genau, von einer SD bzw. MMC-Karte.

von Daniel R. (Gast)


Lesenswert?

Läuft das ganze schon?
Ich bin nämlich an einem ähnlichen Projekt(nur mit VS1001).
Mir macht die MMC Sorgen. Ich habe vor den DataOut der MMC(im SPI mode)
direkt auf den Decoder zu hängen und mit dem uC die nötigen
Steuersignale am Decoder zu setzen. Also: Die Daten sollen nicht zuerst
in den uC(AVR) und dann wieder raus zum Decoder, sondern die sollen
direkt von der MMC in den Decoder. Meint ihr das klappt?

von Tommy (Gast)


Lesenswert?

Hallo..

Ich bau auch grad einen mp3-Player.
hab auch ne Frage:
Wie kann ich die Länge eines Titels ermitteln.
Und das möglichst einfach?

Tommy

von Fly (Gast)


Lesenswert?

Wie wärs mit (Dateigrösse in Bits)/Bitrate des Songs ?
Dann hast du als ergebnis die Länge in Sekunden.

von Sebastian (Gast)


Lesenswert?

Und was macht er dann bei VBR? Oder wird das von deim Decoderchip
garnicht unterstüzt?
Ich glaub ich hab mal irgendwo gesehn dass das bei mp3 bei der
Titelinfo usw. dabei steht.

von Tommy (Gast)


Lesenswert?

is es wirklich so einfach?
ID3Tag-Daten und sonstiges Zeugs is ja auch noch irgendwo
gespeichert!?
Die Bitrate finde ich bestimmt auch irgendwo in der Datei?
Wenn ja wo?

Tommy

von MartinS (Gast)


Lesenswert?

Laufen tut mein Projekt noch nicht. Ich puffere die Daten aber zwischen.
Damit soll es dann dauch möglich werden, Playlisten zu verarbeiten.

von john (Gast)


Lesenswert?

wenn es jemanden interresiert ist hier mein projekt ...
http://alpmp3.sourceforge.net/main.php?id=desktop
ich baue die source gerade um damit der vs1011B funktioniert

von Tommy (Gast)


Lesenswert?

Hallo John...

Mich würd die I2C-Button-Erweiterung interessieren.
Kannst du mal bitte einen Schaltplan posten?

Danke Tommy

von john (Gast)


Lesenswert?


von Daniel R. (Gast)


Lesenswert?

Was mir ein bisschen Angst macht ist die Tatsache, dass mei Decoder
32Byte Blöcke braucht. Ich weiß aber nicht, wie ich die aus der MMC
bekommen soll(in kurzer Zeit). SingleBlockRead scheidet da wohl aus, da
schon der Befehl 48us dauert(bei 1MHz SPI Frequenz), oder??
Wäre es möglich der Karte den Befehl zu schicken, dass sie mir einen
kontinuierlichen Datenstrom schickt, und ihr dann den Clock abzustellen
wenn meine 32Byte im Decoder angekommen sind? Blickt die das oder ist
dann Ende, wenn man ihr den Clock abgestellt hat und später wieder
anmacht um die darauffolgenden Daten zu erhalten?

Wie schafft ihr denn die Daten von der MMC/SD in den Decoder?

von john (Gast)


Lesenswert?

guck mal in meinem quell text nach der funktion fplay

von Sebastian (Gast)


Lesenswert?

Hol dir halt von der SD/MMC-Card nen kontinuierlichen Datenstrom,
speicher den dann im MC zwischen und schick ihn in 32Byte-Blöcken an
den Decoder. Oder du setzt den Datenstrom von SD/MMC nach MC aus werend
du von MC nach Decoder sendest.

von MartinS (Gast)


Lesenswert?

Man soll den CLK der Flashkarte zwischendurch auch anhalten können habe
ich gelesen.

Vom Konzept und von den Anforderungen her ist mein Player was ganz
anderes. Mein Player soll in meinem Wagen installiert werden, statt
eines CD Wechslers. Die Bedienung erfolgt über das Radio und die
Titelanzeige im Kombiinstrument. Ausser der SD-Karte soll noch eine
CD-ROM Laufwerk angeschlossen werden, auf dem die MP3s liegen können.

von Daniel R. (Gast)


Lesenswert?

@Sebastian:
Das geht meiner Einschätzung nach nicht und wenn dann nur schlecht.
1.Viel zu langsam
2.Ich hab nur einen SPI Bus...Beim Einlesen der Daten nach deinem
Vorschlag kommt zwischendurch der Decoder und will Daten. Auf einem Bus
also nicht machbar.

@John:
OK, da werd ich mal gucken.

@MartinS

Das wäre ausgezeichnet, wenn man den Clock abstellen könnte.

von john (Gast)


Lesenswert?

als ich habe das folgender massen gemacht:
* vs und mmc am selben bus
* bei der mmc ist ein 74hc08 am mosi zwischen geschaltet
* sector lesen befehl senden
* erstes byte von mmc lesen
* erstes byte an mmc senden und zweites von der mmc lesen
* zweites byte an vs senden un drittes lesen
* wegen dem 74hc08 kommen be der mmc nur 0xff an

von Daniel R. (Gast)


Lesenswert?

Geht das zeitlich so??
Also nochmal langsam:
Du sendest den Befehl einen Sektor zu lesen, oder?
Dann jeweils ein Byte einlesen und an den VS senden...
Wie teilst Du dann der MMC mit, dass sie warten soll, bis Du das Byte
an den VS gesendet hast?
Ich habe ein 7408 am Clock und an einem I/O Pin. Der Ausgang liegt bei
der MMC auf dem Eingangsclock. Somit kann ich alle 3 SPI Busse(SCI,SDI
und MMC) separat ansprechen. Ich kapiere nur nicht, wie die Karte das
machen soll...


>*erstes byte von mmc lesen
>* erstes byte an mmc senden und zweites von der mmc lesen

Hier hast Du dich wohl verschrieben oder stimmt das so, dass Du das
Byte wieder an die MMC sendest?

Erklär mir bitte mal genau, wie Du die Karte zum Warten bringst.

Danke schonmal.

Daniel

von john (Gast)


Lesenswert?

hi,
die mmc wartet nicht.

der spi des avr sendet ja immer 1 byte während es eins liest

deshalb habe ich die an die mosi der mmc ein 74hc08 vorgeschaltet.
der zweite eingang des und gates ist an einen extra pin angeschlossen

das ganze geht dann so :

ich sende sektor lesen an die mmc
ich lese das erste byte der mmc und schalte den extra pin auf low
ab jetzt erhält die mmc nur noch 0x00
jetzt lese ich das zweite byte von der mmc und gleichzeitig sende ich
das erste byte an den vs
das ganze 32 mal
dann auf dreq warten und das ganze wieder von vorne, bis der sektor
fertig ausgelesen ist.

um es anders auszudrücken, durch den 74hc08 ist der vs an mosi und die
mmc an miso angeschlossen.

von Daniel R. (Gast)


Lesenswert?

Achsooo...jetzt is es klar.
Und die 48us(bei 1MHz SPI-Clock), die beim Senden des SingleBlockRead
Befehls draufgehen? Reicht die Zeit dafür aus?
Wenn dreq high geht dann brauch ich ja erst mal 48us bis ich mal Daten
kriege. Ist nicht bis dahin der gesamte Datenbuffer im VS leer??

Wie geht das dann, wenn Du einen Befehl an die MMC schickst? Der
Datenbus vom VS ist ja schließlich immer aktiv. Dann empfängt der die
48 Bit ja auch oder?

von john (Gast)


Lesenswert?

>Und die 48us(bei 1MHz SPI-Clock), die beim Senden des SingleBlockRead
>Befehls draufgehen? Reicht die Zeit dafür aus?
>Wenn dreq high geht dann brauch ich ja erst mal 48us bis ich mal
Daten
>kriege. Ist nicht bis dahin der gesamte Datenbuffer im VS leer??
der buffer ist glaube ich 2048 gross bei den 4mhz die verwende ist das
kein problem



>Wie geht das dann, wenn Du einen Befehl an die MMC schickst? Der
>Datenbus vom VS ist ja schließlich immer aktiv. Dann empfängt der die
>48 Bit ja auch oder?

dafür gibt es bsync

von Daniel R. (Gast)


Lesenswert?

Dem VS ist das also völlig wurscht, was an seinem Datenbus passiert,
solange BSYNC immer Low ist?
OK, dann wäre der Fall erledigt.
Deine Lösung ist echt super!!

von Daniel R. (Gast)


Lesenswert?

>der buffer ist glaube ich 2048 gross bei den 4mhz die verwende ist das
>kein problem

Also mein VS1001 kann nur 1MHz SPI Clock und hat nur 32Bytes "Safety
Buffer" und 32 Bytes wo man dann direkt reinschreibt, also insgesamt
64Bytes.
Außerdem geht DREQ ja erst auf High, wenn weniger als 32 Bytes im
internen Buffer sind...also nicht viel Zeit.
Haben wir irgendwie verschiedene Decoder?
Meiner heißt VS1001k..


Daniel

von Gast (Gast)


Lesenswert?

Ich habe mir das Datenblatt zum 1001er noch nicht angeschaut, aber ich
glaube du hast da was falsch verstanden mit den 32 Byte Buffer.

Von den 4k die vorhanden sind wird die DREQ Leitung auf low geschaltet
wenn nur noch 32 Byte im Buffer sind (VS1011->hey höa ma ich brauch
Daten), dann schiebst du Daten rein bis nur noch 32 Byte frei sind und
DREQ geht wieder auf high (VS1011->willste nicht mal irgendwann
aufhören zu senden). So ist das zumindest beim 1011er. (Ich hoffe ich
habe die Logic verwechselt)

von Gast (Gast)


Lesenswert?

Ich wollte schreiben: "Ich hoffe ich habe die Logic NICHT
verwechselt!"

von Daniel R. (Gast)


Lesenswert?

OK, das mag sein...Im Datenblatt konnte ich nichts dazu finden, wie groß
der Buffer ist.

>Also mein VS1001 kann nur 1MHz SPI Clock...
Das stimmt auch nicht   (schäm)
Ich hab im Datenblatt nochmal richtig gelesen:
ClockIN/4 ist die msx. SPI Frequenz.
D.h. bei 24,nochwas MHz könnte ich bis auf 6 MHz SPI gehen.
Hervorragend!!!

OK, ich denke meine Sorgen haben sich nun aufgelöst.

von Nik Bamert (Gast)


Lesenswert?

Seite 21 in der Grafik :

"Bitstream FIFO" und darunter 16384 bits / 8 => 2048 bytes also :-)

von Daniel R. (Gast)


Lesenswert?

Ah, ok.
Hab ich nie wirklich bemerkt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.