SD-Card (SPI-Modus) unterschiedlich schnell?

Gast #826181
Lesenswert?
• ▲
▼
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 :-)
Gast #826851
Lesenswert?
• ▲
▼
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
Gast #826941
Lesenswert?
• ▲
▼
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
Gast #826965
Lesenswert?
• ▲
▼
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).
Gast #826985
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren