Hallo zusammen, beim Zugriff auf eine SD-Karte via Microcontroller (SPI, direkter Zugriff auf Blöcke, ohne Filesystem) kommt es bei mir öfter zu Schreibfehlern. Das Schreiben dauert dann sehr lange und wenn ich die Daten wieder auslese, steht da Murks drin. Es hat wochenlang ohne Probleme funktioniert. Dann ging es sporadisch mal nicht. Inzwischen klappt es gar nicht mehr. Ich hatte angenommen, dass die Karte defekt ist, aber wenn ich mit dem PC über einen Card-Reader dieselben Blöcke beschreibe oder lese, funktioniert alles. Auch das Schreiben mit dem PC und Lesen derselben Daten mit dem Microcontroller klappt. Zusammengefasst: - Initialisierung funktioniert (zumindest reagiert die Karte immer wie erwartet) - Lesen funktioniert - Schreiben dauert sehr lange (ca. 170-240 ms pro Block! Als es noch funktionierte waren es ca. 3 ms) - es werden Daten geschrieben, aber völlig andere als die, die ich übertrage - ansonsten sieht es gut aus: - das CMD24 wird mit 0x00 beantwortet - nach dem Übertragen der Block-Daten an die Karte antwortet sie mit 0x05 ("data response byte") - unmittelbar danach kommt das "busy flag" - ein CMD13 im Anschluss wird mit 0x0000 beantwortet Ich habe zwei kommentierte Saleae-Files angehängt: eins nur mit Lesezugriff, eins mit lesen + schreiben. Der Analyzer hing direkt am Card-Reader. Ich habe es auch mit unterschiedlichen Card-Readern versucht. Könnt ihr euch dieses Verhalten erklären? Mache ich etwas falsch, so dass es mal funktioniert, mal nicht? Und kann es sein, dass es doch an der Karte liegt, obwohl über den Zugriff über den PC alles ok ist? Ich bin etwas verzweifelt und freue mich über eure Tipps. Viele Grüße, Dennis
Dennis D. schrieb: > Und kann es sein, dass es doch an > der Karte liegt, obwohl über den Zugriff über den PC alles ok ist? Eher nicht. > Ich bin etwas verzweifelt und freue mich über eure Tipps. Wie sieht deine Hardware aus? Alles solide? Gescheite Pegelwandler? Deine Dateien werden nur sehr Wenige lesen können, welche die passende Software haben. >- Schreiben dauert sehr lange (ca. 170-240 ms pro Block! Als es noch >funktionierte waren es ca. 3 ms) Das ist ggf. normal, den je nach Organisation muss die SD-Card den Flash vorher sektorweise löschen. Ein direktes Beschreiben von Blöcken ohne FAT Filesystem ist eher nicht so empfehlenswert, denn damit kommt möglicherweise der optimierte Algorithmus für das wear leveling durcheinander. Das könnte die langen Schreibzeiten erklären. Was soll der direkte Zugriff bringen? Performance? Eher nicht. Tu dir einen Gefallen, nimm eine der bewährten FAT-Libs und nutze die. Die von Elm Chan ist weit verbreitet und seit langer Zeit stabil. Dann kannst du auch die Dateien problemlos an jedem PC lesen und schreiben. http://elm-chan.org/fsw/ff/00index_e.html
Danke für Deine Tipps Falk! Die Idee hinter dem direkten Block-Zugriff war, den Code schlank und simpel zu halten. Wenn der Zugriff via FAT-Filesystem aber sogar Vorteile für das Wear-Leveling bringt, versuche ich das. Ich werde die elm-chan-Lib einbinden und hoffe, dass dann das Problem nicht mehr auftritt.
Dennis D. schrieb: > Schreiben dauert sehr lange (ca. 170-240 ms pro Block! Als es noch > funktionierte waren es ca. 3 ms) Dann wurde nicht korrekt gemessen. Die 240ms sind nix ungewöhnliches - wenn man bedenkt das die SD Karte nicht mit 512 Byte sondern mit 1 oder 4 MB Blöcken intern arbeitet. Überschreitet man eine solche Grenze wird der nächste Schreibzugriff langsam. Die langsamsten Karten hier hatten Schreibzugriffe im Sekundenbereich. Und ja, das gäbe die SDHC Spec her. Die besseren Sandisk oder Samsung liegen aber im Bereich um ca. 300ms beim "langen" Schreiben.
Ich habe auch Zugriffszeiten im Bereich von 100 bis 300ms. Das ist normal.
Stefan ⛄ F. schrieb: > Ich habe auch Zugriffszeiten im Bereich von 100 bis 300ms. Das ist > normal. Du hast vor allem mal wieder keine Ahnung, wie man technische Sachverhalte gescheit kommuniziert. Der Begriff "Zugriffszeit" sagt alles und nichts! Jim M. hat es korrekt formuliert!
Danke Falk, mit deiner gewählten Ausdrucksweise machst du dich sehr beliebt.
Stefan ⛄ F. schrieb: > Danke Falk, mit deiner gewählten Ausdrucksweise machst du dich sehr > beliebt. Wahre Worte sind nicht schön, schöne Worte sind nicht wahr. Laotse Vielleicht versuchst du es mal mit der Hälfte der Antworten pro Tag? Dann hast du doppelt soviel Zeit über diese und deren Formulierungen nachzudenken.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.