Hallo, Ich experimentiere gerade mit SD-Karten und benutze den Code von www.elm-chan.org. Dabei ist mir aufgefallen, daß manche Karten nach dem Schreiben, bis sie "Ready" sind (bis 0xff auf MISO erscheint), bis zu 130ms brauchen. Andere wiederum sind superschnell und haben praktisch keine Wartezeit. Im Original-Code wird maximal 500ms darauf gewartet, dass die Karten "Ready" sind. Woran kann das liegen? Sind manche SD-Cards wirklich so langsam oder mache ich etwas falsch? Danke :-)
>Woran kann das liegen? Sind manche >SD-Cards wirklich so langsam ? Ja, das sind sie. Sonst wären ja alle gleich schnell ;)
Und wenn Du welche von Hama hast, dann vergiss alle Spezifikationen. Die halten sich an garnix...
Hallo und danke für eure Antworten,
> Ja, das sind sie. Sonst wären ja alle gleich schnell
Naja, daß alle gleich schnell sind, habe ich nicht erwartet. Aber diese
Unterschiede finde ich schon sehr extrem. Haben einige einen fetten RAM
als Puffer drin oder geht bei denen des physikalische Beschreiben des
Flash-Speichers einfach schneller? Gibt es denn irgendwelche Tricks, mit
denen man die langsamen Karten beschleunigen kann? Vielleicht indem man
einen Puffer im Mikrocontroller spendiert, der die Daten erstmal sammelt
und dann größere Mengen schreibt.
Zur Info: Ich baue mir einen Dataenlogger, der in der Lage sein soll,
44000 Bytes pro Sekunde wegzuschreiben. Zur Zeit schafft er's aber nicht
mit allen Karten. Wie kann ichs in den Griff bekommen, daß er auch mit
langsamen Karten arbeiten kann?
TIA,
Peter
Peter, wie groß ist die Datenmenge, die Du am Stück wegschreibst? Probier mal mit 2KByte oder Vielfachen davon!
Größere Datenmengen auf einmal schreiben, also nicht nur 1 Sektor, sondern 4 Sektoren (2kByte, da dies häufig die Pagegröße der Flash Speicher ist). Dazu muss aber die Routine entsprechend angepasst werden, und der µC muss ausreichend RAM haben.
Hallo Leute, Danke, das werde ich so machen. Zur Zeit gibt's zwar meine Architektur nicht her, daß ich einen 2kB-Buffer am Stück freimachen kann, aber ich kann es erstmal mit 1536 Bytes versuchen. Wenn das nicht reicht, werde ich eben ein bisschen umstrukturieren müssen. Viele Dank nochmal, Peter
2 KByte! Nicht weniger! Kurze Erklärung: Wenn Du < 2 KByte schreibst, muss der Controller auf der Karte die Sektoren stückeln, denn in eine Page eines heutigen NAND-Flashes passen 2 KByte Nutzdaten. Das Stückeln kostet viel Zeit. Benutzt Du ein Filesystem? Mit einer Bibliothek, z.B. für FAT? Dann solltest Du darauf achten, dass beim Schreiben von mehr als 512 Bytes auch das Kommando zum Schreiben von mehreren Blöcken hintereinander verwendet wird (und nicht in einer Scheife immer Sektor für Sektor geschrieben wird).
Hallo Wolfgang, OK, dann werde ich deinen Rat mal beherzigen und die Daten in einem 2K-Buffer sammeln. Und ja, ich benutze ein FS. Die Low-Level Routinen sind auf Multi-Sector Writes ausgelegt und benutzen die entsprechenden CMDs. Das sollte eigentlich passen.
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.