Lahme 2GB SD Karte

Gast #772325
Lesenswert?

Hallo,

endlich funktionieren meine Lese- und Schreibroutinen für SD-Karten an 
meinem uC-Board!

Ich habe sie mit einer neuen 2GB Karte von Intenso und einer 3 Jahre 
alten 256MB von Toshiba (mit HAMA Aufkleber) getestet. Dabei wurden 
jeweils 10000 Blocks a 512Byte an aufeinanderfolgende Addresse 
geschrieben bzw. gelesen. Alle Blöcke waren gleich und mit HEX-Zahlen 
von 0-FF gefüllt (jeweils 2 mal). Die Ergebnisse haben mich erstaunt:

            Toshiba        Intenso
Lesen:      1027kB/s       808kB/s

Schreiben:  419.8kB/s      73.8kB/s

Ich hätte nicht gedacht, dass der Unterschied so gross sein kann. 
Insbesondere die niedrige Schreibrate der Intenso-Karte kommt mir 
merkwürdig vor. Wie können Speicherchips so unterschiedliche 
Zugriffszeiten haben? Da die Toshiba Karte so viel besser ist, glaube 
ich nicht, dass es an meiner Software liegt, oder etwa doch?

Ein Blick auf das TAAC-Feld im CSD-Register bringt auch erstaunliches zu 
Tage:

Toshiba: 0x2B  == 2us Zugriffszeit
Intenso: 0x3E  == 3ms      "

Beide Werte haben wenig mit der tatsächlichen Datenrate zu tun.

Gruss
Mike
Gast #772335
Lesenswert?

Ich habe das Schreiben gerade noch mal getestet. Die Intenso Karte 
steigert sich! Immerhin schafft sie jetzt 178.6 kB/s. Sie muss offenbar 
erst eingefahren werden! Dennoch würde ein komplettes Beschreiben mit 
2GB immer noch ca. 3 Stunden dauern.

Gruss
Mike
#772340
Lesenswert?

@Mike:
Bei diesen niedrigen Schreibraten würde ich dann doch eher noch 
Optimierungspotentiale bei Deiner Software vermuten. Wenn Du die Karte 
z.B. in Windows mit Daten belädst wird die Schreibrate eher mehrere MB/s 
betragen.
Was für ein µC-System verwendest Du denn? Und wie hoch ist Deine 
SPI-Frequenz?

Gruß,
Daniel
Gast #772371
Lesenswert?

@Daniel
Ich benutze einen LPC2378 mit 48Mhz Prozessortakt, die Taktfrequenz der 
SD-Karte beträgt zur Zeit 12Mhz. Dies gibt bei einer Busbreite von 4 bit 
eine maximale Transferrate von 6Mb/s.
Sicherlich ist die Software nicht optimal, ich schreibe jeden Block 
einzelnen, so dass ein gewisser Overhead anfällt. Mit multiple block 
write würde es sicher noch schneller gehen. Ziel ist es aber, die EFSL 
Library zu implementieren, und die unterstützt Mehrfachblöcke leider 
nicht.

Trotzdem ist es auffällig, dass die gleiche Software mit 
unterschiedlichen Karten so grosse Unterschiede zeigt. Es lohnt sich 
also doch, in Markenprodukte zu investieren.

Gruss
Mike
Gast #772375
Lesenswert?

@Daniel,Stefan

Um Missverständnisse zu vermeiden: Meine Karte wird über den SD-Bus, 
nicht über SPI angesprochen. Ich werde noch mal versuchen, den Takt auf 
24 Mhz zu erhöhen, maximal 25 sind ja erlaubt

Gruss
Mike
Gast #772399
Lesenswert?

Testergebnisse mit 24Mhz Kartentakt:

            Toshiba        Intenso
Lesen:      1603kB/s       1130kB/s

Schreiben:  503kB/s        180kB/s

Beim Lesen bringt's was, beim Schreiben wenig.

Letzendlich gehe ich aber wieder zurück auf 12Mhz, da mir die Leserate 
bei weitem ausreicht. Schliesslich soll der Prozessor ja auch was 
Sinnvolles mit den Daten anfangen.
Gast #772410
Lesenswert?

Könnte evtl. an einer "wear-leveling" Technik liegen:
Die neuen günstigen Karten nutzen MLC-Chips, die nur bis ca. 10.000 
Schreibvorgänge spezifiziert werden. Um in dem Speicherbereich in dem 
die FAT-liegt auf ne geeignete Lebensdauer zu kommen werden die 
Blöcke/Cluster laufend in andere Bereiche verlegt.

Hab neulich was über ne Transcend 133x (oder langsamer, mit MLC-Chips 
jedenfalls) gelesen. Die war in den ersten 10-15% des Speicherbereichs 
auch Schneckenlangsam.
Gast #773372
Lesenswert?

Ich habe die SD-Spezifikation noch einmal gründlich studiert. Der Grund 
für die schlechte Schreibperformance liegt wahrscheinlich darin, dass 
die grosse 2GB Karte intern grössere Blöcke als 512 Bytes verwendet 
(z.B. 2kB). Bei jedem Schreiben eines 512er Sektors muss der komplette 
Block gelöscht, die Daten zwischengespeichert und wieder neu 
programmiert werden.
Das kostet natürlich Zeit, un damit ist die Karte gegnüber ihren 
kleineren Schwestern im Nachteil.
Als Gegenmassnahme bietet sich an, grössere Schreiboperationen (Multiple 
Block Write) zu verwenden und eine entsprechende Zahl von Sektoren per 
pre-erase (ACMD23) im Voraus zu löschen. Leider dürfte das in den 
meisten embedded Systemen am fehlenden Puffer-RAM scheitern. Da ich die 
EFSL verwenden möchte, geht's ohnehin nicht, denn die EFSL kann nur 
512-byte Sektoren schreiben.


Gruss
Mike
Gast #773975
Lesenswert?

als ich mal mit SD-Karten 'rumgebastelt hatte, war es sehr entscheidend, 
die Sektoren vorher zu löschen. Dann war das Schreiben wesentlich 
schneller. Wenn es Dir auf Geschwindigkeit ankommt, nimm eine CF-Karte 
(wie in den teureren Fotoapparaten). Mehr Hardwareaufwand, aber viel 
einfacher anzusteuern finde ich (insbesondere das Gezicke bei der 
Initialisierung von SD fällt weg) und viel schneller.
Gast #774152
Lesenswert?

@Thomas:
Hier die neueste Version der Spezifikation für die SD-Karte, direkt von 
der SD Group. Da steht genau drin, wie man auf den 4-bit mode umschaltet 
(mit ACMD6). Es ist ein weit verbreiteter Irrtum, dass die SD-Karten 
Spezifikation nicht öffentlich sei, geheimgehalten wird lediglich der 
Zugriff auf die kryptographischen Spezialfunktionen. Diese finden sich 
in der Security spec, die tatsächlich nur Mitgliedern der SD Group 
zugänglich ist. In der Praxis werden diese Spezialfunktionen so gut wie 
nie genutzt, für die Anwendung als Speichermedium reicht die normale 
Spec völlig aus.

Gruss
Mike
Angehängte Dateien:

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