Forum: Mikrocontroller und Digitale Elektronik SD-Card (SPI-Modus) unterschiedlich schnell?


von Peter (Gast)


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 :-)

von holger (Gast)


Lesenswert?

>Woran kann das liegen? Sind manche
>SD-Cards wirklich so langsam ?

Ja, das sind sie. Sonst wären ja alle gleich schnell ;)

von Sabu (Gast)


Lesenswert?

Und wenn Du welche von Hama hast, dann vergiss alle Spezifikationen. Die 
halten sich an garnix...

von Peter (Gast)


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

von Wolfgang Mües (Gast)


Lesenswert?

Peter,

wie groß ist die Datenmenge, die Du am Stück wegschreibst?
Probier mal mit 2KByte oder Vielfachen davon!

von Benedikt K. (benedikt)


Lesenswert?

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.

von Peter (Gast)


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

von Wolfgang Mües (Gast)


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).

von Peter (Gast)


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.

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.