USB-Laufwerk implementieren

Gast #3896628
Hi,

ich habe aktuell eine Mikrocontroller, auf dem Flash vorhanden ist und 
auf welches ich mittels Chan's FatFS bereits problemlos zugreifen kann. 
USB hat das gute Stück ebenfalls.

Im nächsten Schritt soll sich der Controller jetzt auf einem Host-System 
als Laufwerk melden, wenn er per USB angeschlossen wird. Hier suche ich 
nun ein paar Anhaltspunkte, wie das zu bewerkstelligen ist/wo ich 
anfangen kann zu suchen, z.B.:

- welche Daten sind an den Host-PC zu übertragen, werden da irgendwie 
die nackten Flash-Zugriffe durchgereicht und der Host-PC kümmert sich um 
das Filesystem?

- welcher USB-Typ ist hier zu verwenden - Bulk-Transfer?

Jeder Hinweis/Einstiegspunkt/Link ist willkommen!
Persönliche Seite
Warper schrieb:
> - welche Daten sind an den Host-PC zu übertragen, werden da irgendwie
> die nackten Flash-Zugriffe durchgereicht und der Host-PC kümmert sich um
> das Filesystem?

Wenn Du mit "nackten Flash-Zugriffen" die Zugriffe auf Speicherblöcke 
meinst: Ja, genau so ist das. Der µC braucht dafür keinerlei Dateisystem 
zu kennen.

Sofern Du vorhast, die vom Host auf Deinem USB-Device gespeicherten 
Daten mit dem µC auszuwerten (oder andersherum Daten vom µC auf den Host 
zu übertragen), musst Du darauf achten, daß immer nur einer der 
Beteiligten das Dateisystem verwalten darf.

Dein µC kann erkennen, ob er an einen Host angeschlossen ist; ist das 
der Fall, hat er tunlichst jeden schreibenden Dateisystemzugriff zu 
unterlassen. Er darf erst dann im Dateisystem herumrühren, wenn der Host 
weg ist. Es genügt nicht, lediglich Schreibzugriffe des Hosts 
auszusitzen, der µC muss wirklich vom Host getrennt sein.

Der Host nämlich kann nicht erkennen, daß Dein µC im Dateisystem 
herumschreiben möchte, und wird aus Performancegründen bestimmte Teile 
des Dateisystems cachen (wie z.B. die FAT), so daß auch bei reinen 
Lesezugriffen seitens des Hosts sehr interessante Nebeneffekte auftreten 
können. Bei Schreibzugriffen durch den Host wird das noch ... lustiger.
Du mußt ein USB mass storage device implementieren. Die Übertragung 
verwendet selbstverständlich bulk transfers.

Natürlich kriegt der Host den nackten Speicher zu sehen (macht die 
Interpretation von Filesystem und evtl. Partitionstabelle also selber)
Gast
Axel Schwenke schrieb:
> Du mußt ein USB mass storage device implementieren. Die Übertragung
> verwendet selbstverständlich bulk transfers.
>
> Natürlich kriegt der Host den nackten Speicher zu sehen (macht die
> Interpretation von Filesystem und evtl. Partitionstabelle also selber)

er könnte auch MTP nutzen, dann braucht er kein Filesystem und kann 
selber gleichzeitig lesen und schreiben.

http://de.wikipedia.org/wiki/Media_Transfer_Protocol

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.