Forum: Mikrocontroller und Digitale Elektronik Schnelle SD-Karte im SPI-Modus?


von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hallo liebe Leser und Schreiber,

bei meinen Experimenten bezüglich eines Stereo-Wave-Recorders mit dem 
ATXMega128 bin ich über die verschiedenen Schreib- oder besser 
Busy-Zeiten verschiedener SD-Karten gestolpert, die ich über SPI-Modus 
betreibe. Einige Karten (alte Platinum 256MB) sind wirklich fix dabei, 
die 512 Bytes eines Blocks wegzuspeichern (5-10ms), andere Karten, wie 
zum Beispiel eine Lexar 2GB braucht dafür fast ewig (50...250ms). Hat 
jemand Erfahrungen gemacht, welche Karten bis 4GB besonders schnell beim 
Schreiben sind? Sind die Karten im Multi-Block Modus bedeutend 
schneller, oder relativiert sich das? Ich muß dazu sagen, daß der 
Controller nicht besonders viel Zeit hat, da bei der Aufnahme pro 
Sekunde etwa 130kb bei 44kHz Samplerate anfallen, die gespeichert werden 
müssen. Auf das Anschließen von externem RAM würde ich gerne verzichten.

Grüße!
TravelRec.

von holger (Gast)


Lesenswert?

>eine Lexar 2GB braucht dafür fast ewig (50...250ms).

Ja, eine sehr unangenehme Eigenschaft dieser Karten.
Mein Highscore liegt bei 310ms. Ich denke das ist noch nicht
das Ende der Fahnenstange :(

>Sind die Karten im Multi-Block Modus bedeutend
>schneller, oder relativiert sich das?

Ich hatte mit elm-chan mal in der Richtung rumgespielt.
Wenn man von 1024 Bytes auf 4096 Bytes pro f_write()
geht kann sich die Schreibrate bei einigen Karten fast
verdoppeln. Aber eben nur bei einigen. Diese sporadisch
auftretenden langen Busy-Zeiten waren aber immer noch vorhanden!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Shit happens... Zumal die Busy-Zeiten keinesfalls immer dieselben sind. 
Bei der Lexar schwanken sie von 50 bis 250ms wild umher - jeder Zyklus 
sieht auf dem Speicheroszi anders aus. Sind die Busy-Zeiten bei 
Multiblock-Write genau so lang wie bei Single-Block oder länger oder 
wie? Im Moment kann ich´s leider nicht ausprobieren, da die teure 
Technik auf Arbeit steht ;-). Laut Internetrecherche sollen die 
Transcend Karten ganz ordentlich am Bus kleben, kann das jemand 
bestätigen?

von Arc N. (arc)


Lesenswert?

Travel Rec. wrote:
> Shit happens... Zumal die Busy-Zeiten keinesfalls immer dieselben sind.
> Bei der Lexar schwanken sie von 50 bis 250ms wild umher - jeder Zyklus
> sieht auf dem Speicheroszi anders aus. Sind die Busy-Zeiten bei
> Multiblock-Write genau so lang wie bei Single-Block oder länger oder
> wie? Im Moment kann ich´s leider nicht ausprobieren, da die teure
> Technik auf Arbeit steht ;-). Laut Internetrecherche sollen die
> Transcend Karten ganz ordentlich am Bus kleben, kann das jemand
> bestätigen?

Theoretisch sollten Multiblock-Writes eigentlich schneller sein.
Die verwendeten NAND-Flash haben üblicherweise Page-Größen zw. 2 kiB und 
8 kiB, wenn die, bei vielen vorhandene, Möglichkeit zu partiellen 
Page-Writes genutzt wird, sollten auch 512 Bytes schnell geschrieben 
werden können (einige Teile lassen auch nur sequentielle Page-Writes 
innerhalb eines Blocks zu).
Das Hauptproblem ist aber, das dies nur dann geht, wenn der Block in dem 
sich die Page befindet, gelöscht ist. Ansonsten muss der gesamte Block a 
128(512) kiB umkopiert, gelöscht und neu beschrieben werden.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hm - das mit den größeren Blocks bzw. Pages als den angenommenen 512 
Bytes scheint insofern auch bei meinen Karten so zu sein, da alle 4 
Blöcke (also 2kiB) das Busy etwas länger dauert, als bei den anderen 3 
Blöcken.  Würde es hier Sinn machen, jeweils 4 Blöcke zu schreiben?

von Frank G. (embedded-os)


Lesenswert?

Das Problem hierbei ist die Verknüpfung von "verwendetes Flash" und 
"verwendetes WearLeveling". Denn in jeder Karte wird eine lizensierte 
Variante des WearLeveling (FlashTranslationLayer) verwendet. Diese 
Kombination bestimmt die Busy-Time am Ende einer physikalische Page 
(z.B. 2kB). Und selbst innerhalb eines Karten-Types wie 2GB von 
Hersteller XYZ kann verschiedenes Flash Verwendung finden. Nur innerhalb 
eines Produktions-Cycles kann man dies als "stabil" ansehen. Denn die 
FlashEigenschaften können dem WearLeveling zu Produktionszeit in ein 
EE-Field übergeben werden. Einige Hersteller geben außerdem extrem 
grenzwertige Werte für Nac und Nbs in Ihren Card-CSD an - siehe Tabelle:
http://www.embedded-os.de/index.html?pcfat_port.htm

Was auf jeden Fall Sinn macht ist "WRITE/READ MULTIPLE_SECTORS". Da aber 
zwischen Sector(s) und wirklich verwendeter phys. Page das WearLeveling 
der Karte sitzt, bleibt leider das alle PageSize "BusyWait" des jeweils 
enthaltenen Fash-Bausteins.
Ansonsten, viel Glück beim "Trial- and TimeOut-Buy" von möglichen 
besonders schnellen Karten.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Danke für die Hinweise, bin auf dem Gebiet SD-Karte noch nicht so lange 
unterwegs ;-). Bevor ich neue Karten kaufe, versuche ich noch eine 
optimierte Buffer-Nutzung, in der Hoffnung, damit noch einige 
Busy-Lücken erschlagen zu können. Ich habe ja noch etwas Platz im RAM.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hallo nochmal!

Also unter Verwendung des CMD25 und einer leicht geänderten 
Bufferstruktur funktionieren die Karten schnell genug. Testweise werden 
520kB/s sicher weggespeichert, 4x so viel, wie ich eigentlich brauche 
:-). Das einzige Problem, welches bei der 2GB-Karte auftaucht, ist ein 
unregelmäßiges Schreiben der Blöcke unter $800 - darüber läuft´s wie 
geschmiert.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Update: ich habe jetzt noch einige originale SanDisk-Karten 1GB und 2GB 
im Test. Standard-Modelle (etwa 6EUR/2GB, 5EUR 1GB) laufen zuverlässig 
und ähnlich schnell, wie das Lexar-Modell. In den Sektoren unter $800 
gibt es 2-3 unregelmäßige Sprünge. Die UltraII (etwa 8EUR/2GB) verhält 
sich im SPI-Modus recht fix, in den Sektoren unter $800 gibt es 2 
Sprünge, die aber vom 6kB Puffer ausgeglichen werden können. Im Bereich 
darüber liegen die Busy-Zeiten im MultiBlockWrite sämtlich unter 
2ms/Block. Die ExtremeIII (etwa 12 EUR/2GB) läuft im SPI-Modus 
ausgesprochen schnell und zuverlässig. Es gibt keine Sprünge im unteren 
Bereich, die Busy-Zeiten liegen deutlich unter 1ms/Block. Im 
professionellen Bereich werde ich deshalb gerne auf die ExtremeIII 
zurückgreifen, für den Hausgebrauch kann ich die günstigeren 
SanDisk-Karten emfehlen. Während der Tests kamen mir auch noch CN-Memory 
SD-Karten aus dem MediMax/ProMarkt unter (Premium Silver, Premium Gold), 
die nach einigen wenigen Tagen im Rechner und in der Digitalkamera 
schwere Störungen (CRC-Schreibfehler) verursachten und sich nun nicht 
mehr beschreiben ließen. Eine von MediMax umgetauschte Karte war nach 
einigen Tagen ebenfalls defekt, so daß man auf eine komplett vermurkste 
Serie schließen muß. Ich habe die Karten keinem Streß außer den 
Geschwindigkeitstests ausgesetzt und wie gesagt, in Consumer-Geräten 
verwendet. Davon abgesehen waren die CN-Memory Teile sehr langsam. Also 
davon besser die Finger lassen.

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.