Forum: Mikrocontroller und Digitale Elektronik elm chan FAT-Dateisystem auf MSP430


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan S. (mexakin)


Lesenswert?

Hallo,

ich habe mehr oder weniger ein Problem, wobei mir vielleicht jemand mit 
mehr Erfahrung einfach weiterhelfen kann:


Ich habe einen MSP430F5529, der kann direkt USB, und daran hängt über 
SPI eine SD-Karte.

Es gibt genügend Beispielcode direkt auch von TI, damit habe ich schon 
ein MAssenspeicher über USB erstellt, funktioniert alles mehr oder 
weniger gut, aber das ist nicht mein Problem.

Ich greife intern auf die SDKarte zu, weil ich eben Daten loggen möchte, 
das funktioniert.

Extern über PC und USB möchte ich nun diese Daten am PC auslesen können, 
funktioniert auch noch.

Was ich nicht zum funktionieren bringe:
ICh erstelle "live" neue Dateien auf der SD-Karte, diese neuen Daten 
sind dann aber im Windows Explorer nicht sichtbar, dass heisst, der 
MAssenspeicher aus USB Sicht wird nicht aktualisiert, wenn ich die 
SD-Karte ziehe und wieder stecke, oder USB ziehen und wieder stecke, 
sind die aktuellen Daten korrekt auf der Karte lesbar.

Ich hab schon gelesen, dass eventuell nur eine Funktion mit elm chan zur 
Verfügung steht, ich davon noch recht wenig Ahnung, vielleicht wisst ihr 
ja mehr oder habt sogar schon genau meinen Fall auch gehabt.

Zur Not werde ich dem Code eben vorspielen nach jeder Dateimanipulation, 
dass die SD KArte gerade eingesteckt wurde, das würde ich aber gerne 
vermeiden,weil dann immer ein Windows Popup käme.

Vielen Dank und viele Grüße.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> ICh erstelle "live" neue Dateien auf der SD-Karte, diese neuen Daten
> sind dann aber im Windows Explorer nicht sichtbar, dass heisst, der
> MAssenspeicher aus USB Sicht wird nicht aktualisiert

Wie sollte das auch funktionieren? Solange der Massenspeicher mit dem 
Wirt (dem PC) verbunden ist, steht er unter der Kontrolle des Wirts und 
darf clientseitig (d.h. vom µC aus) auch nicht verändert werden.

Es ist nicht vorgesehen, daß zwei Seiten gleichzeitig im Dateisystem 
herumrühren.

Du musst vor Schreibzugriffen Deines µCs das Ding USB-seitig abmelden 
und danach wieder anmelden.

von Falk B. (falk)


Lesenswert?

@Stefan Schmitt (mexakin)

>ICh erstelle "live" neue Dateien auf der SD-Karte, diese neuen Daten
>sind dann aber im Windows Explorer nicht sichtbar, dass heisst, der
>MAssenspeicher aus USB Sicht wird nicht aktualisiert,

Das liegt dann aber an der USB-Seite, kaum an der SD-Karten Seite.

> wenn ich die
>SD-Karte ziehe und wieder stecke, oder USB ziehen und wieder stecke,
>sind die aktuellen Daten korrekt auf der Karte lesbar.

Da fehlt irgendwo ein Refresh oder Update, welche dem USB-Teil der 
Software sagt, dass die mal die Directories neu lesen soll.

>Zur Not werde ich dem Code eben vorspielen nach jeder Dateimanipulation,
>dass die SD KArte gerade eingesteckt wurde, das würde ich aber gerne
>vermeiden,weil dann immer ein Windows Popup käme.

Eben. Es geht sicher auch intelligenter. Suche nach Synch oder Update 
Funktionen im USB-Teil, nicht bei Elm Chan.

von Stefan S. (mexakin)


Lesenswert?

merci für die schnellen tips, bisher habe ich viel elm chan 
update-funktionen versucht wild im Code zu verstreuen :)

Jetzt test ich dasselbe mal mit den USB refresh-Funktionen.

von Jim M. (turboj)


Lesenswert?

USB Mass storage kennt removable Medien. Damit kann man dem Host OS 
signalisieren, dass "keine Karte einelegt" ist. Das macht man dann immer 
nach Schreiboperationen für so min. 10 Sekunden, dann liesst der Host 
das Dateisystem neu ein.

Achtung: Nicht jede USB mass storage Implementation hat dieses Feature 
eingebaut.

Vorsicht: Wenn der Host auf dem Mass storage schreiben darf, dann darf 
der µC nicht mehr schreiben, sonst kracht es schnell.

: Bearbeitet durch User
von Stefan S. (mexakin)


Lesenswert?

Ok ich hab mir jetzt was zusammengestrickt, was ehrlichgesagt unschön 
aber doch funktioniert.

Ich hab mir aus verschiedenen Funktion zusammengestückelt, dass die 
SD-Karte quasi als neu gesteckt erkannt wird, ehrlichgesagt hätte ich 
das gerne anders, aber zumindest funktinoiert es mal prinzipiell.

Ich kuck morgen nochmal ein wenig drüber, zur Not bleibt das halt so und 
muss wann anders erledigt werden, wenn mal mehr Luft ist.

Trotzdem Danke für die Hilfe, der Tip mit Usb war schon hilfreich.

von Stefan S. (mexakin)


Lesenswert?

Ja das TI Forum sagt dasselbe, keine Möglichkeit vom Slave aus dem PC 
Host zu signalisieren dass er doch aktualisieren möchte, das ist bitter.

Ich komme selber auch auf keinen grünen Zweig im USB Stack debug, wär 
hätte das erwartet :)

Also wird es wohl beim nervigen popup nach jedem schreibzugriff bleiben, 
vorerst.

Kennt jemand ein Produkt wo eiine SD Karte drin ist, die beschrieben 
wird und gleichzeitig vom PC ausgelesen wird und wo das was ich 
beschreibe funktioniert?
Mein Smartphone kann ja theoretisch auch Dateien erstellen und wird 
gleichzeitig vom PC ausgelesen, vlt test ich mal später ob ich dort neu 
erstellte dateien am PC dargestellt bekomme ohne neu anzustöpseln, 
könnte ja ähnlich sein.


#Update:
Hab getestet an meinem Android, da weiss ich natürlich nicht was der USB 
controller alles kann udn als was er sich meldet, aber es sieht auch aus 
wie ein MSC, also Massenspeicher.
Da kann ich eine txt Datei erstellen die sofort am PC erkannt wird ohne 
dass ich aktualisieren muss etc, was merkwürdig ist, wenn ich einfach 
Ordner erstellt habe auf dem Telefon, wurden diese nicht erkannt am PC, 
erst nach ziehen stecken vom USB.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Kennt jemand ein Produkt wo eiine SD Karte drin ist, die beschrieben
> wird und gleichzeitig vom PC ausgelesen wird und wo das was ich
> beschreibe funktioniert?

Als USB-Massenspeicher ist so etwas nicht möglich.

Aber dafür gibt es das "Media Transfer Protocol" - das wird von einigen 
Digitalkameras und auch SmartPhones verwendet.

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

von Stefan S. (mexakin)


Lesenswert?

Rufus Τ. F.
> Aber dafür gibt es das "Media Transfer Protocol" - das wird von einigen
> Digitalkameras und auch SmartPhones verwendet.
>
> https://de.wikipedia.org/wiki/Media_Transfer_Protocol


jap, dankeschön, wollte ich gerade schreiben, dass ich das 
herausgefunden habe. Man lernt eben nie aus. Und das MTP oder PTP auf 
nem kleinen MSP430 16bitter zu versuchen, hatte ich nie vor, soll aber 
auch nicht gehen, ich nehme an auf nem ARM würde das schon 
funktionieren, die Smartphones laufen ja auch auf ARM Technologie, aber 
das nur am Rande.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> soll aber auch nicht gehen,

Woher kommt diese Information?

von Stefan S. (mexakin)


Lesenswert?

> Woher kommt diese Information?


e2e Forum: meinte jemand dass das nicht gehen würde, hab ich so 
angenommen, aber jetzt wo dus erwähnst kann natürlich sein dass es geht, 
aber so auf anhibe finde ich nichts was ich innerhalb eines Arbeitstages 
implementieren könnte, bzw. ich finde gar keinen open source stack etc.

update: es gibt wohl ien paar Firmen die das anbieten, ich hab mal 
angefragt ob es was fertiges kommerzielles gibt MTP USB stack für den 
MSP430, allerdings fangen zumindest bei hitex die prozessoren alle bei 
32 bit an, also schon ne andere Klasse als mein kleiner Texas chip, aber 
mal sehen, vielleicht kommt ja was raus.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Rufus Τ. F. schrieb:
> Woher kommt diese Information?

Von mir. Dabei habe ich "the product is supposed to be running in 2 
weeks" berücksichtigt.

Stefan S. schrieb:
> ich finde gar keinen open source stack

veraltet: https://wiki.merproject.org/wiki/Buteo/MTP
nur Lesen: http://git.denx.de/?p=ptp-gadget.git;a=summary

Beide laufen auf Linux, und benötigen die entsprechenden Dateisystem- 
und USB-Gadget-Frameworks.

Und fallst du es schaffst, Windows 7 auf MSP430 zu portieren: 
https://msdn.microsoft.com/en-us/library/windows/hardware/Dn614016.aspx

: Bearbeitet durch User
von Stefan S. (mexakin)


Lesenswert?

hab noch ne Stunde, also das sollte reichen um win7 laufen zu lassen, 
wirkt grad am einfachsten auf mich, das andere ist zu kompliziert :)

von Stefan S. (mexakin)


Lesenswert?

Nur zur Info, ich habe den TI stack soweit verändert bekommen, dass ich 
im Code erstellte Dateien im Windows Explorer angezeigt bekomme, OHNE 
dass ein popup kommt, einfach indem ich zu schnell arbeite, wenn ich 
länger verweile in meinem Code durch Schleifen, dann merkt der PC das, 
ansonsten merkt er es nicht hat aber neue Daten mitbekommen.
Allerdings nur wenn man aktualisiert F5 oder eben einen neuen Explorer 
öffnet, jetzt versuche ich mal den Code soweit zusammenzuschrumpfen wie 
möglich, mal sehen was da noch drin ist.

von c-hater (Gast)


Lesenswert?

Stefan S. schrieb:

> Kennt jemand ein Produkt wo eiine SD Karte drin ist, die beschrieben
> wird und gleichzeitig vom PC ausgelesen wird und wo das was ich
> beschreibe funktioniert?

So ein Produkt kann es nicht geben, denn die auf SD-Karten verwendeten 
Filesysteme sind nicht Multihost-fähig. Es darf immer nur eine Instanz 
die Kontrolle über die Strukturen des Dateisystems haben.

Was allerdings möglich ist: Festzustellen, wann ein fremder Host einen 
konsistenten Zustand des Filesystems hergestellt hat. Und was auch 
möglich ist: Nicht das USB-Storage-Gerät als Ganzes "abzumelden", 
sondern nur das Medium auszuwerfen, bzw. einzulegen.

Das beides zusammen führt (zumindest bei Windows als Fremdhost) zu einer 
Lösung, die sehr nahe dran ist, an dem, was dir vorschwebt. Man muß bei 
Windows eigentlich nur noch das sowieso sicherheitstechnisch äußerst 
bedenkliche Autorun/Autoplay abstellen, um nervdialogfrei zu bleiben.

Aber klar: mindestens ca. 90% der Windows-User kommen dann nicht mehr an 
die Inhalte ihrer USB-Stick, Speicherkarten usw., weil beim 
Einlegen/Anstöpseln nix mehr von alleine aufpoppt...

von Henrik H. (Firma: TU Chemnitz) (heha)


Lesenswert?

Hallo,
das "Media Transfer Protocol" passt problemlos in vier Kilobyte eines 
8-Bit-Mikrocontrollers ATmega32U4. Da ist's aufgezeigt:
http://www.tu-chemnitz.de/~heha/pg/Wild%20GIF12/#7.1

Dessen frei bleibender Flash-Speicher von 24 KByte wird als 
Speichermedium benutzt, welches hier simpel gestrickt ist und keine 
Verzeichnisse unterstützt: Der EEPROM dient als FAT, und die 
Clustergröße ist gleich der Flash-Sektorengröße des ATmega32U4 von 128 
Byte.

MTM sollte also locker in einen MSP430F5529 passen! Da der o.a. 
Quelltext ohne LUFA und ohne Interrupts auskommt, lässt er sich leicht 
auf MSP430 umsetzen.

Mit 128 KByte Flash und guter Analogperipherie eignet sich so ein MSP430 
sicherlich hervorragend für einen Datenlogger.

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.