Forum: Mikrocontroller und Digitale Elektronik Diplomarbeit Dataflash AT90USB162 MP3PLAYER


von Thomas (Gast)


Lesenswert?

Hallo!

Ich bin gerade an meiner Diplomarbeit. Es soll eine Sprachausgabe für 
Fahrstühle realisiert werden. Die Audiodaten sollen im MP3 Format über 
USB in ein Datenspeicher abgelegt werden.

Die Bauteile waren weitesgehend vorgegeben, da ich in einer Firma 
schreibe.
Bauteile: VS1011     MPEG Decoder
          AT90USB162 µC
          AT45DB321B Dataflash

Aktueller Stand: -Windows erkennt meine entwickelte Baugruppe als
                  Massenspeicher
                 -wurde mit Windows formatiert (FAT)
                 -Daten können rauf und runter gezogen werden

Frage: Muss ich jetzt eine FAT Bibliothek einbinden(wenn ja welche), 
damit
       ich auf die Daten zugreifen kann, um sie dann anschließend zum
       VS1011 zu schicken?

Ich möchte wissen, ob ich auf den richtigen Weg bin, da ich langsam in 
Zeitnot komme. Vielleicht hat jemand noch ein paar nützliche TIPS.

Danke im Voraus und Grüße Thomas

von Lupin (Gast)


Lesenswert?

8 megabyte ist bischen wenig für MP3.

Hast du die USB Firmware für den AT90USB selbst gestrickt?

Wenn du im Abspielmodus bist, musst du natürlich eine FAT bibliothek 
benutzen um auf die MP3 Datei zugreifen zu können. Windows greift ja als 
Block-device auf den MP3 player zu - ich denke da erledigt windows dann 
das Dateisystem.

Du musst die Daten ja nur noch auslesen und zum dekoder schicken.

Beitrag "Mp3 Player [mega8, SD, VS1001]"

Beitrag "MMC/SD-Karte mit FAT16 an AVR"

von Matthias (Gast)


Lesenswert?

>Frage: Muss ich jetzt eine FAT Bibliothek einbinden(wenn ja welche),
>damit
>       ich auf die Daten zugreifen kann, um sie dann anschließend zum
>       VS1011 zu schicken?

So eine Frage von jemandem, der eine Diplomarbeit macht und schon in 
Zeitnot ist? Wow....

Wie das ganze Zeug funktioniert, von wegen MP3 von PC über uC zum 
Dataflash
ist Dir aber schon klar, oder?

Der Dataflash enthält die Daten in einem entsprechenden Format. Die 
Controllersoftware sorgt dafür, dass der PC das wie ein FAT System 
ansprechen kann. Ob der Controller die Daten 1:1 auf das Flash schreibt, 
oder ein paar Tricks anwendet, sollte entweder aus einer Doku der SW 
rauszulesen sein, oder per Reverse Engineering (falls der Source Code 
verfügbar ist).

Aber wenn der PC das Teil als FAT anspricht, dann ist es sehr 
wahrscheinlich, dass der uC lediglich die Identifikation generiert und 
alles andere als Block read/write drauf schreibt. Das hängt von der 
Methode ab (siehe oben -> Doku).

Eine Bibliothek oder ein paar API Funktionen wirst Du in jedem Fall 
brauchen, um an die Daten zu kommen.

Hast Du die Software auch vorgegeben bekommen, oder aus Codeschnipseln
zusammengesetzt?

Eine Möglichkeit den Dataflashinhalt als Rohdaten ausgeben zu lassen 
wäre auch nicht schlecht + Doku des FAT Dateisystems.

von Thomas (Gast)


Lesenswert?

Erst einmal Danke für die schnellen Antworten!!!!

@Lupin
es sind sogar nur 4 MByte, aber die werden ausreichend sein, da ja noch 
kurze Sprachausgaben, wie z.Bsp. "Tür öffnet sich" in Mono ausgegeben 
werden müssen

@Matthias
Mein Wissen bezüglich des FAT's ist noch sehr beschränkt, aber man kann 
ja auch nicht alles wissen!!!
Ich musste mich ja schon mit USB, RS485(zur Titelauswahl), MP3 usw. 
auseinander setzen...das war schon mehr nützliches Wissen, als im ganzen 
Studium :-)!!!

@Lupin und Matthias
Code war nicht vorgegeben!!! In der Firma kennt sich auch keiner mit USB 
aus!!! So habe ich mich auf die suche gemacht und mir mit den LUFA bzw. 
MyUSB Demo Codes etwas zusammengebastelt!!! Man muss ja nicht alle Räder 
neu erfinden, oder????

Frage: Also bin ich auf den richtigen Weg und kann mir auch mit den 
erwähnten Codeschnipseln etwas zusammenbasteln? Wahrscheinlich muss ich 
nur die jeweiligen Lesezugriffe auf das Dataflash anpassen....ich habe 
noch 5 Wochen Zeit, ich hoffe ich bekomme es in 1 woche hin, bis alles 
läuft, denn ein wenig schreiben muss ich ja auch noch :-)....NOCHMALS 
DANKE

von holger (Gast)


Lesenswert?

>Frage: Muss ich jetzt eine FAT Bibliothek einbinden(wenn ja welche),

Das wird jetzt aber schwierig mit nur 512Byte RAM.
Damit wird kaum eine der gängigen FAT Libs arbeiten.
Du bräuchtest sowas wie ein MiniFAT ;)
Wieviel Flash/RAM Speicher belegt das Programm denn bisher?

von Klaus2 (Gast)


Lesenswert?

"5 Wochen Zeit, ich hoffe ich bekomme es in 1 woche hin, bis alles
läuft, denn ein wenig schreiben muss ich ja auch noch :-)"

hihihi Du meinst das ernst, was?!

Klaus.

von Klaus (Gast)


Lesenswert?

Hi Klaus, :)

ich denke auch das ist eher ein 3 Monats Projekt!

von Thomas (Gast)


Lesenswert?

@holger
Program:    5268 bytes (32.2% Full)
Data:        113 bytes (22.1% Full)

Bin gerade dabei noch ein paar sachen weg zu hauen, da die Demo Codes 
von Lufa sehr aufgebläht sind, aber dafür sehr hilfreich waren.
Solange schwierig nicht unmöglich bedeutet, ist ja alles gut, wenn auch 
nicht perfekt!!!
Danke

Also werde ich mich mit mal FAT's genauer auseinander setzen, mal sehen 
ob ich irgendwie hinbekomme!!!

@Klaus ????

von Michael G. (graf)


Lesenswert?

Moin

USB Betrieb:

USB - MSC Class - Flash
Läuft im Block/Sektor Betrieb mit 512 Byte je Block. (Windows übernimmt 
das mit der Fat)

Achtung wegen Flash Layer und Schreibzyklen. Im normallfall ist da noch 
ein Layer mit Warleveling notwendig. In deinem Anwendungsfall aber wohl 
eher weniger, da ein Update der Datei eher selten vorkommen wird.

MP 3 Betrieb.

FW sucht nach der MP 3 Datei (8.3 Dateinamen, Dateinamen fest 
vorgegeben)
Hierzu ist ein FAT Dateisystem notwendig (FAT12/16). Dieses greift auf 
das Flash zu. Deine Applikation übergibt die daten dann dem Encoder.

Da du kein Dateien Schreiben/anlegen sollt/musst, sollte das mit dem ram 
hinkommen, wird zwar nicht besonders schnell. könnte klappen.

Das Problem wird sein, den nächsten sektor innerhalb der zeit zu finden 
und zu laden, in der der MP3 Dekoder das letzte datenpakte dekodiert 
hat.

Das Problem ist, das Dateien aus einer anzahl von Clustern bestehen. 
Diese müssen nicht in direkter Folge auf dem Flash liegen. Die 
Reihenfolge der Cluster ist anhand der Fat ersichtlich. Die Fat ist 
nichts anderes als eine Verkettungsliste, in der drinnsteht, welcher 
Cluster als nächster in einer Datei kommt (gilt auch für die 
Directories).

1. Möglichkeit, du besorgst dir die sektoren bevor du anfängst die daten 
an den Dekoder zu senden. (ca 12 bis 16Bit je Cluster )
2. du besorgst sie dier zur laufzeit was aber warscheinlich aufwendiger 
werden wird. da ggf paralelle zugriffe auf das flash notwendig werden. 
ggf sogar gar nicht klappt, da du zu wenig speicher hast um zu puffern.

Ein Cluster ist ein 2^n faches eines Sektors (512Byte) Vermutlich bei 4 
MB wird ein Cluster genau einem Sektor entsprechen.

Wird sicher interresant zu implementieren.

Im encoder betrieb, wirst du den Speicher für den USB Part nicht 
zwingend benötigen. Paralelle zugriffe auf die FAT von 2 Seiten sollten 
vermieden werden. Da nur eine seite schreibt nicht ganz so schlimm, es 
könnte nur bei der wiedergabe hacker und hänger geben.

von Thomas (Gast)


Lesenswert?

@Michael Graf
Vielen vielen vielen Dank
für die Anleitung und den Beschreibungen

werde mich gleich darauf stürzen......

von holger (Gast)


Lesenswert?


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.