www.mikrocontroller.net

Forum: PC-Programmierung Daten immer neu von USB-Stick lesen - und nicht aus dem cache!


Autor: S. Matlok (smatlok)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe auf einem AT90USB einen Flashspeicherstick implementiert 
(MassStorage Demo von Atmel).
Funktioniert auch, jedoch werden die Daten unter WindowsXP nur einmal 
vom "Usbstick" gelesen - danach wird auch per F5 o.ä. nicht mehr erneut 
auf den Stick zugegriffen.

Das Problem ist nun, dass ich die gespeicherten Daten auf dem Stick 
manipuliere und wieder auslesen möchte. Und hier der Punkt: Die 
modifizierte Datei wird wie gesagt nicht erneut ausgelesen. Schreibe ich 
die modifizierten Daten aber z.B. in einer anderen Datei, so kann ich 
die neuen Daten auslesen - jedoch eben halt auch nur einmal, danach hat 
sie WinXP irgendwie gecached und gibt auch nurnoch den erstmals 
gelesenen Inhalt aus.

Hat jmd eine Idee wie ich das Problem lösen könnte ? Kann ich per 
Software das erneute auslesen irgendwie "forcen" ? (Notepad kanns nicht 
:D) Kann ich irgendwelche Optionen für den Stick/Dateien setzen, dass er 
immer neu ausgelesen wird?
-- Oder irgendeine ganz andere Idee um immer aktuell an die vom Stick 
selbst erstellten Daten zu kommen, OHNE ihn an und abstecken zu müssen ?

Erschwerend kommt hinzu, dass eine Lösung auch Plattformunabhängig 
funktionieren soll, also für Win, Unix, Mac usw..

grübel

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim öffnen der Daten kann man jeweils angeben, wie das Caching ablaufen 
soll. Geht natürlich nur, wenn du das zugreifende Programm erstellst.

Windows:
http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx
"Caching Behavior

Several of the possible values for the dwFlagsAndAttributes parameter 
are used by CreateFile to control or affect how the data associated with 
the handle is cached by the system. They are:

FILE_FLAG_NO_BUFFERING
FILE_FLAG_RANDOM_ACCESS
FILE_FLAG_SEQUENTIAL_SCAN
FILE_FLAG_WRITE_THROUGH
FILE_ATTRIBUTE_TEMPORARY

If none of these flags is specified, the system uses a default 
general-purpose caching scheme. Otherwise, the system caching behaves as 
specified for each flag.
...."

Linux:
http://linux.die.net/man/2/open
"O_DIRECT
Try to minimize cache effects of the I/O to and from this file. In 
general this will degrade performance, but it is useful in special 
situations, such as when applications do their own caching. File I/O is 
done directly to/from user space buffers. The I/O is synchronous, i.e., 
at the completion of a read(2) or write(2), data is guaranteed to have 
been transferred. Under Linux 2.4 transfer sizes, and the alignment of 
user buffer and file offset must all be multiples of the logical block 
size of the file system. Under Linux 2.6 alignment to 512-byte 
boundaries suffices.

A semantically similar (but deprecated) interface for block devices is 
described in raw(8).
..."

Von Macs hab ich keine Ahnung, wird aber wohl auch wie in Linux gehen

Autor: Roland Praml (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Problem ist nun, dass ich die gespeicherten Daten auf dem Stick
> manipuliere und wieder auslesen möchte.

halte ich für eine SEHR schlechte Idee. Das Filesystem geht dadurch 
wohl schneller kaputt als du schauen kannst...

Das einzige was mir einfällt, ist dass sich das Mass-storage-device vom 
PC abmeldet (aber nur, wenn keine Dateien geöffnet sind) die 
Manipulation durchführt und dann wieder anmeldet.

Gruß
Roland

Autor: Roland Praml (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab hier noch was gefunden (habs mir nicht genau durchgelesen, 
könnte aber interessant sein)
http://www.officesoon.com/doc/36681-Implementation...

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die lesende Anwendung unter Kontrolle hast, kannst du es sicher 
da versuchen. Ansonsten ist die Antwort, dass dein Stick kein "Mass 
Storage Device" in dem Sinne ist, weil diese per Definition die Daten 
nicht von sich aus verändern. Vielleicht kannst du also etwas erreichen, 
indem sich der Stick als ein anderer Gerätetyp ausgibt.

Autor: Mars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
Doch das geht schon, du musst dem Host nur mitteilen, dass sich die 
Daten auf dem Stick verändert haben.
Für genaueres muss ich dich leider auf die USB Mass Storage Specs 
verweisen, da ich die Infos auch nicht im Kopf habe.

Lg

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Matlok wrote:

> Das Problem ist nun, dass ich die gespeicherten Daten auf dem Stick
> manipuliere und wieder auslesen möchte. Und hier der Punkt: Die
> modifizierte Datei wird wie gesagt nicht erneut ausgelesen.

Dann machst Du etwas grundlegendes falsch.

Autor: S. Matlok (smatlok)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tobi H
Ja, die Software welche die Daten auslesen soll wird auch selbst 
geschrieben - gottseidank aber nicht allein von mir :-) Aber deine Info 
wäre dann schonmal die PC-Seitige Lösung, fallses nicht anders geht, 
Danke !

@ Roland Praml
Die Daten werden nicht auf Flashspeicher zwischengespeichert, sondern 
bei einem read-request neu generiert.
Dein Link ist echt informativ aber für mich doch etwas schwere Kost^^ - 
Ich muss mir das nochmal genauer durchlesen, evtl find ich darin eine 
Lösung :-)

@ Morin (Gast)
Ja, alternativplan ist es, das ganze über ein HIDgerät zu lösen, aber 
das setzt dann noch mehr Arbeit auf der PC-Softwareseite vorraus,.. 
Notlösung!

@ Mars (Gast)
Ja, das wär super :-) Aber wie könnte das funktionieren ? Wenn ich das 
System richtig verstanden hab, dann sind die Rückgabeinformationen 
einerseits die Nutzdaten, andererseits die Command Status Word Infos - 
evtl lässt sich damit was machen ?


Ich versuch jetz erstmal noch ein paar Stunden Rolands Link zu 
verinnerlichen und mehr über CSW zu erfahren - mal schaun ob ich 
weiterkomme.

Und Danke für die Hilfe!

Autor: S. Matlok (smatlok)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, Cool, ich habs! (zumindest eine Möglichkeit)

Für alle die es auch interessiert:

Der PC sendet regelmäßig (ca 2x pro Sekunde) einen CommandBlockWrapper - 
im Normalfall ein "Unit Test Ready"- Request. Der Stick antwortet 
daraufhin mit einem "good status".

Sendet man aber nun ein "Fail" zurück, so erfragt der PC einen "Request 
Sense" um herauszufinden was für ein Problem der Stick hat.

Daraufhin kann man dann mit einem "Unit Attention" Fehlercode und der 
erweiterung "not-ready to ready transition" ein Update des Caches 
herbeiführen..

In Roland's Link steht das es auch einen "Medium Changed" CSW gibt, aber 
ich kann nichts derartiges in der CSW-Befehlsliste für einen "Request 
Sense" finden. An dieser Stelle 
https://www.usb.org/phpbb/viewtopic.php?t=13777 sendet einer angeblich 
auf einen "Unit Test Ready" direkt einen "Media Changed" ?! kann aber 
sonst keine Quelle/Spezifikation für dieses Vorgehen finden. Ebenfalls 
hab ich noch nirgends gesehen wie so ein "Media Changed" Response 
aussehen soll.

Naja auf jeden fall scheint das schonmal zu funktionieren.. Frage ist 
nurnoch ob das eine gute "standart" Methode ist..

Rolands Link nochmal:
http://www.officesoon.com/doc/36681-Implementation...

(CBW) SCSI Befehle:
http://en.wikipedia.org/wiki/SCSI_command

CSW Antworten auf einen "Request Sense":
http://en.wikipedia.org/wiki/SCSI_Request_Sense_Command

Mit den Entsprechenden Sense-Keys:
http://en.wikipedia.org/wiki/KCQ

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Frage ist nurnoch ob das eine gute "standart" Methode ist..

Ob das jeder PC Host versteht und ob es jeden Host dazu bringt, das 
Dateisystem zu aktualisieren? Ich habe da so meine Zweifel, gerade, daß 
MS ein so potentiell praktisches Feature auch tatsächlich im MSD-Treiber 
seiner Betriebssysteme unterstützt.

Unklar bleibt jetzt nur noch, was das mit der Art des Stehens zu tun 
hat. Leicht vornübergebeugt oder doch eher aufrecht? Stramm oder lässig?

Autor: S. Matlok (smatlok)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus t. Firefly wrote:
> Unklar bleibt jetzt nur noch, was das mit der Art des Stehens zu tun
> hat. Leicht vornübergebeugt oder doch eher aufrecht? Stramm oder lässig?

zäärfix, sorry^^ - oh man, kann man nicht mehr editieren.. naja..

In dem PDF ( ftp://ftp.legato.com/pub/NetWorker/German/gener_69.pdf) 
steht an einer Stelle:
"NOT READY TO READY TRANSITION(MEDIUM MAY HAVE CHANGED)" - das ist mein 
einziger Zusammenhang zwischen dem Status-Response und "Media(-um) 
Changed" - und funktioniert, aber bisher leider nur auf WinXP getestet..

Trotzdem kommt es mir auch eingermaßen logisch vor, z.B. könnte in einen 
Kartenleser ja stillschweigend ohne abzumelden eine neue Speicherkarte 
reingesteckt werden, welche dann auch neu ausgelesen werden muss..

Naja da bastel ich nächste Woche weiter drann..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.