Forum: Mikrocontroller und Digitale Elektronik Lahme 2GB SD Karte


von Mike (Gast)


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

von 6635 (Gast)


Lesenswert?

Es ist nicht die Zugriffszeit, sondern die Schreibzeit. Tja. Irgenwo 
muss/kann man sparen...

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Intenso is ja auch der letzte Rotz den man kaufen kann... da solltest 
Dich nicht wundern.

von Frank (Gast)


Lesenswert?

@Michael
...und Hama...

von Mike (Gast)


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

von Daniel P. (ppowers)


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

von Stefan O. (stefano)


Lesenswert?

Ein vergleich mit dem schreiben am PC ist hier soweit ich weis nicht 
zulaessig, da die Karte vom Pc ja nicht im SPI Modus angesprochen wird.

lg Stefan

von Mike (Gast)


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

von Mike (Gast)


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

von Stefan O. (stefano)


Lesenswert?

Achso - entschuldigung.

Dachte mir das du die Karte (so wie fast alle hier) im SPI Modus 
betreibst. Wenn dem nicht so ist dann verwundet mich die Datenrate 
ebenfalls.

lg Stefan

von Mike (Gast)


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.

von Stephan Hochberger (Gast)


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.

von Mike (Gast)


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

von Thomas (kosmos)


Lesenswert?

@Mike: habe noch nirgends Infos zum 4 Bit Modus gefunden, da man dafür 
anscheinend löhnen muss. Könntest du mir diese Infos bitte zukommen 
lassen. kosmos at mayn punkt de

von Aufnehmer (Gast)


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.

von Andreas W. (Gast)


Lesenswert?


von Mike (Gast)


Angehängte Dateien:

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

von OMeGA (Gast)


Lesenswert?

Ja aber es ist die simplified version !!!

von Mike (Gast)


Lesenswert?

Simplified ja,
aber völlig ausreichend, um die Karte anzusteuern

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.