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
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"
>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.
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
>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?
"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.
@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 ????
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.