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.
Hi Klaus, :) ich denke auch das ist eher ein 3 Monats Projekt!
@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.
@Michael Graf Vielen vielen vielen Dank für die Anleitung und den Beschreibungen werde mich gleich darauf stürzen......
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.