Ist es normal, dass eine Micro-SD-Karte für die ersten Blöcke eine höhere Schreibgeschwindigkeit hat?

Ich verwende eine Micro-SD-Karte mit 4 GB von Kingston in einem Embedded-Projekt und greife mit einem Low-Level-SPI-Treiber darauf zu.

Alles läuft gut, bis auf ein seltsames Verhalten: Nach einem bestimmten Block (ca. 16 Kb der Karte) sinkt die Schreibgeschwindigkeit auf 1/3 der Geschwindigkeit des ersten Blocks .

Ist das normal? Vielleicht sind die ersten Blöcke einer SD-Karte von einem Speicher mit höherer Geschwindigkeit, ich weiß es nicht. Hat jemand Infos dazu?

Antworten (2)

Ja, das ist normal. Viele SD-Karten haben einen Schreibpuffer (stellen Sie sich das wie einen Festplatten-Cache vor). Wenn Sie das Datenblatt für die spezifische Komponente lesen, sollte es die Größe des Caches und die Zugriffsgeschwindigkeiten des Geräts im Allgemeinen detailliert beschreiben.

Wenn Sie denken, dass die Geschwindigkeit auf dem Block basiert, ist der Test einfach: Schreiben Sie auf die SD-Karte mit einem gewissen Versatz hinter dem, wo Sie denken, dass die "schnellen Blöcke" sind - sie sollten für die ersten Schreibvorgänge genauso schnell sein.

Eine SD-zu-Flash-Schnittstelle muss einen Sektor, der geschrieben wird, im RAM behalten, bis der Schreibvorgang abgeschlossen ist, um die Möglichkeit zu berücksichtigen, dass der geschriebene Sektor ausfallen könnte (was es erforderlich macht, die Daten an anderer Stelle zu speichern). Wenn dies die einzige Pufferung auf dem Chip wäre, würde das Schreiben kontinuierlicher Daten erfordern, dass das System abwechselnd Daten in den Chip einspeist (während das Flash-Speicherarray im Leerlauf ist) und darauf wartet, dass die Daten geschrieben werden (dh der Rest des Systems). wäre untätig). Das Hinzufügen eines zweiten Puffers und das Zulassen, dass er geschrieben wird, während Daten im Flash gespeichert werden, ermöglicht eine Überlappung der Prozesse. Wenn der langsamere der beiden Prozesse isoliert die Zeit t1 und der schnellere die Zeit t2 benötigen würde, würde dies die Zeit zum Schreiben jedes Sektors von (t1+t2) bis t1 verbessern, eine Einsparung von t2/(t1+t2). .

Das Hinzufügen zusätzlicher Pufferung kann in einigen Szenarien hilfreich sein, bietet jedoch selten das Preis-Leistungs-Verhältnis dieses zweiten Puffers. Es bietet eine Geschwindigkeitssteigerung von 25 % oder mehr, wenn die Zeit zum Laden der Daten eines Sektors in den Controller zwischen 1/3 und 3x der Zeit beträgt, die der Controller benötigt, um sie im Speicherarray zu speichern. Angesichts der relativ geringen Kosten eines Puffers dieser Größe gibt es wenig Grund, ihn nicht hinzuzufügen. Das Hinzufügen zusätzlicher Pufferung hilft jedoch nicht so sehr; Wenn man zusätzlichen Speicher zur Verfügung hat, kann er besser für das Zwischenspeichern von Teiladressen verwendet werden [eine SD-Karte jeder Größe muss in der Lage sein, jeden 512-Byte-Sektor unabhängig neu zuzuordnen, und eine 32-GB-Karte hat auch 64 Millionen solcher Sektoren viele für eine einzige "flache" Datenstruktur; still,