Externen Flash/SRAM über USB beschreiben

OP #4129523
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?
Gast #4129531
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.
OP #4129838
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.