SD-Card

Hallo liebe Experten,

hier habe ich eine ziemlich spezielle Frage:

ich entwickle gerade ein Meßgerät, das Meßdaten auf einer SD-Karte speichert. Dabei werden die Meßwerte in einen Doppel-Puffer von der Größe zweier 512-Byte-Blöcke geschrieben, abwechselnd wird jeweils ein vollgeschriebener Block in die SD-Karte übertragen (das ist je nach Abtastrate etwa alle 25 - 300 msec der Fall).

Der Prozessor ist ein ATmega32, die SD-Karte wird im SPI-Modus betrieben (ca. 900 kHz SPI-Takt), das ganze habe ich programmiert wie beschrieben in den „SD Specifications Part 1 Physical Layer Simplified Specification…“.

Es funktioniert auch, nur fällt mir auf, daß es nicht mit allen SD-Karten gleich gut funktioniert.

Keine Probleme gibt es mit der Traveler 512 MB SD-Card, da gehen Datenraten bis gegen 20 kByte/sec ohne Datenverlust.
Dann habe ich noch die Kingston Karten (1 GB und 2 GB) ausprobiert, und anscheinend gibt es bei jedem 32. Sektor (512-Byte-Block) eine zeitliche Verzögerung, sodaß die Karte die Daten erst nach ca. 100 msec übernimmt. Bei höheren Datenraten (mehr als ca. 10 512-Byte-Datenblöcke in der Sekunde) gehen dadurch immer beim Beschreiben jedes 32. Blocks Daten verloren, weil die SD-Karte die Daten dann nicht schnell genug abholen kann. Dies tritt besonders bei der 2GB-Karte auf, nicht ganz so schlimm auch bei der 1GB-Karte.

Kennt jemand das Problem? Gibt es da eine Abhilfe, oder muß ich mich damit abfinden, daß dafür nur bestimmte SD-Karten zufriedenstellend funktionieren?

Grüße,

I.

Hallo,
die Computerzeitschrift c’t macht immer mal wieder Tests mit Speicherkarten und USB-Sticks. Jedesmal das gleiche Ergebnis: es gibt langsame und schnelle Varianten. Teilweise sogar unter der selben Typenbezeichnung. Und: man kann’s von außen nicht sehen.
Da wirst Du wohl selektieren und vom funktionierenden Typ einen Vorrat anlegen müssen.
Gruß
loderunner

Hallo Loderunner,

danke für die Antwort.

Ja blöd. Anscheinend muß der Controller in der SD-Karte beim Beginn eines neuen 32-Blöcke-Bereich (16 kB) irgendetwas machen, was dann zusätzlich ein wenig Zeit braucht, bei manchen Karten mehr als bei anderen.

Ich werde folgendes machen: statt des ATmega32 einen ATmega644 verwenden (gleiche Pins, aber 4 kB RAM statt 2 kB), und mache damit einen Ringpuffer für fünf oder sechs Blöcke, sodaß das Meßgerät mehr Toleranz gegenüber solchen zeitlichen Verzögerungen bekommt. Dann sollten auch die langsameren Speicherkarten mit höheren Abtastraten gut funktionieren.

Grüße,

I.

Hallo,

Dann sollten auch die langsameren
Speicherkarten mit höheren Abtastraten gut funktionieren.

wir haben auch die Erfahrungen gemacht, dass die Qualität sowohl in
Bezug auf Geschwindigkeit, als auch in Bezug auf Zuverlässigkeit
und besonders auf Schreibzyklen recht unterschiedlich ist.
Wir haben deshalb entscheiden, dass wir für unsere Zwecke nur noch die
die etwas teureren ExtremeIII von Sandisk nehmen.
Die sind in jeder Beziehung ziemlich gut.

Nach deiner ViKa entwickest du ja wohl keinen Billigkram für den
Consumermarkt, oder? Da ist es durchaus legitim, nicht jeden Müll
mit einzubeziehen, sondern eben eine enge Auswahl festzulegen.
Damit spart man sich evtl. auch später viel Stress beim Support.
Gruß