Forum: Mikrocontroller und Digitale Elektronik Externen Flash/SRAM über USB beschreiben


von Sebastian V. (sebi_s)


Lesenswert?

Hallo,

bei einem aktuellen Projekt möchte ich einen externen NOR Flash und SRAM 
über USB mit Daten füllen. Als µC wird ein STM32F103C8 verwendet. Im 
ersten Anlauf werde ich wohl einfach ein USB CDC Device nutzen und ein 
Programm für den PC schreiben um die Daten zu übertragen.

Allerdings soll das Ganze nacher möglichst ohne zusätzliche Software 
oder Treiber möglich sein. Ich dachte daher an etwas wie ein USB Mass 
Storage Device. Dabei soll der aktuelle Inhalt von Flash und SRAM als 
jeweils eine Datei angezeigt werden. Dabei soll es möglich sein den 
aktuellen Inhalt auszulesen und den Inhalt zu überschreiben. Die 
zuweisung ob Flash oder SRAM soll über die Dateiendung geschehen. Das 
Problem beim Mass Storage Device scheint allerdings zu sein, dass dieses 
auf Dateisystemebene funktioniert. Ich müsste also ein virtuelles 
Dateisystem bereitstellen um den aktuellen Inhalt von Flash und SRAM zu 
präsentieren. Das wäre ja eventuell noch machbar aber ich sehe vor allem 
beim Schreiben die Probleme. Wenn man vom PC aus direkten Zugriff aufs 
Dateisystem hat kann man alles Mögliche anstellen, wie z.B. das Mass 
Storage Device mit NTFS neu formatieren oder Tausend 1KB Dateien drauf 
kopieren. Damit kann man natürlich den SRAM oder Flash nicht sinnvoll 
füllen aber das Ganze soll wenigstens so robust werden, dass man den µC 
dadurch nicht total durcheinander bringen kann und Alles spätestens nach 
einer Neuformatierung mit FAT und maximal 2 Dateien wieder alles richtig 
läuft.

Als die andere Alternative sehe ich das Media Transfer Protocol. Das 
arbeitet auf Dateiebene und ich vermute das Device kann dort 
Dateitransfers ablehnen wenn Dateien mit unbekannter Dateiendung oder 
mehrere Dateien mit gleicher Dateiendung geschrieben werden sollen. 
Nachteil ist leider, dass die Unterstützung unter Linux noch nicht ganz 
so weit fortgeschritten ist, aber das kann ja eigentlich nur besser 
werden. Weiterer Nachteil ist, dass ich keinen Beispielcode finden 
konnten. Es git zwar ein MTP Host Beispiel von ST, aber ein Device 
Beispiel. Wie kompliziert wird es das Device selbst zu Implementieren?

Welcher der beiden Ideen ist einfacher realisierbar? Oder habe ich 
eventuell etwas viel einfacheres übersehen?

von Scelumbro (Gast)


Lesenswert?

Weiß nicht obs hilft, aber für den AVR USB Stack LUFA gibt es einen Mass 
Storage Bootloader, der auch Betriebssystemtreiber für Laufwerke nutzt 
um den internen Flash zu beschreiben. Ähnliches nutzt auch mbed. 
Vielleicht mal reinsehen und adaptieren.

von Sebastian V. (sebi_s)


Lesenswert?

Die LUFA Library kannte ich schon daher hatte ich dort schonmal 
geschaut. Scheinbar habe ich den USB Mass Storage Bootloader aber 
übersehen. Das wäre sicherlich schonmal ein guter Startpunkt. Ich habe 
gerade mal kurz den Code überflogen. Die Implementierung des virtuellen 
FAT12 sieht jetzt nicht so kompliziert aus. Für mich sieht es gerade so 
aus, als ob Schreibzugriffe auf die Verzeichniseinträge ignoriert 
werden. Wenn man bei Mass Storage für bestimmte Bereiche einfach 
Read-Only spielt, dann kann man schonmal alles verhindern was nicht die 
vorhandenen Dateien überschreibt. Es sieht für mich aber gerade so aus, 
als ob die Schreibvorgänge einfach ignoriert werden. Das könnte 
möglicherweise den PC verwirren. Ich habe erst Sonntag Abend wieder 
einen AVR zur Hand um den Bootloader mal zu testen.

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.