Forum: Mikrocontroller und Digitale Elektronik SD-Karten Schreibgeschwindigkeit (XMC4500)


von LX (Gast)


Lesenswert?

Hallo,

ich habe auf einem XMC4500 ein SD-Karten Interface implementiert (ohne 
Dave Apps), das funktioniert eigentlich auch wunderbar.
Nur die erreichte Schreibgeschwindigkeit ist mir noch ein Dorn im Auge, 
da sie lediglich 150KB/s für einen Singleblock von 512Byte beträgt. (Die 
Lesegeschwindigkeit ist auch nicht sonderlich berauschend)

Ich verwende gerade den 1-Bit Modus (SD Protokoll, kein SPI) mit aktuell 
12MHz. Dabei is es (fast) egal, ob ich in den 4-Bit Modus wechsle 
und/oder die Frequenz erhöhe.

Im Logic Analyzer habe ich dann gesehen, dass die meiste Zeit auf die SD 
Karte gewartet wird (DAT0 Busy Signal). Bei 12MHz und 1-Bit Bus dauert 
die eigentliche Datenübertragung ca. 350us (512Byte) und das 
anschließende Warten auf das Busy-Ende ca. 3ms.

Ich dachte jetzt, dass ich vielleicht irgendwas in der SD Karte falsch 
konfiguriert hätte, aber ich kann beim besten Willen nichts finden. Die 
Initialisierungsschritte habe ich laut Spezifikation von www.sdcard.org 
durchgeführt.

Die Datenrate wäre zwar für meine Anwendung gut genug, dennoch würde ich 
gerne die Ursache kennen. In Windows erreiche ich übrigens ca. 20MB/s 
mit dieser Karte.

Hat jemand eine Idee?

Grüße

von Rainer U. (r-u)


Lesenswert?

Probier mal die Blöcke vorher mit block erase zu löschen, oder guck, ob 
Du größere Blöcke als 512Byte am Stück schreiben kannst..

von stefan us (Gast)


Lesenswert?

150KB/s entspricht ungefähr meinen Erfahrungen im 1-bit Modus.

Ich hatte es mit 4, 8 und 16 Mhz Takt versucht. Die effektive 
Übertragungsrate bei größeren Dateien wurde dadurch kaum beeinflusst.

Es scheint auch kaum eine Rolle zu spiele, ob man dazu eine uralte 64MB 
karte verwendet, oder eine schnelle 4GB Karte mit Class 10.

von Jim M. (turboj)


Lesenswert?

LX schrieb:
> lediglich 150KB/s für einen Singleblock von 512Byte beträgt.

Wenn Du da mehr rausholen willst, musst Du Multi-Block Schreibmodus 
benutzen. Das wird in den Karten intern anders behandelt, so dass 
deutlich schnellere Schreibraten - auch mit SPI - möglich sind.

Nachteil: Braucht entweder mehr RAM oder komplexere Zugriffsfunktionen 
auf die SD.

von Grundschüler (Gast)


Lesenswert?

ich verweise auf meinen Beitrag
Beitrag "sdio problem mit 4bit-modus"
auf den ich leider nie eine Antwort erhalten habe.

150KB/s Bit oder Byte?, egal, ist jedenfalls unzureichend. Meine 
600kByte/s sind schon entäuschend, erwartet hatte ich mindestens 
2MByte/s.

von LX (Gast)


Lesenswert?

@Grundschüler: Es sind 150KByte/s. Auf welcher Grundlage hast du die 
Geschwindigkeit ermittelt? Auch Single Block mit 512Byte?

Ich werde mal den Multiblockwrite testen und dann die Geschwindigkeit 
ermitteln...allerdings bringt mir das nichts für meine Anwendung, aber 
vielleicht bringt es die Erleuchtung.

von Grundschüler (Gast)


Lesenswert?

LX schrieb:
> Auch Single Block mit 512Byte?

ich habe 1,5MByte große Fotos von der DCMI-Schnittstelle gespeichert. 
Mit den gleichen Karten habe ich im SPI-Modus mit einem LPC1768 
1,2MByte/s erreicht.

von Grundschüler (Gast)


Lesenswert?

Ergänzung:
Meine Erwartung war, SDIO = 4 x SPI => knapp 5MByte/s...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

LX schrieb:
> Ich werde mal den Multiblockwrite testen und dann die Geschwindigkeit
> ermitteln...allerdings bringt mir das nichts für meine Anwendung, aber
> vielleicht bringt es die Erleuchtung.

 Ich glaube mich dunkel zu erinnern (lange her), dass die ungeraden
 Blocks beim schreiben bzw. löschen viel schneller waren, wahrscheinlich
 arbeitet SD intern mit 1KB.

von LX (Gast)


Lesenswert?

Also ich habe gerade mit dem Multiple Block Write 20MB geschrieben, was 
nach 948ms erledigt war :-)
(48MHz, 4-Bit Bus)

Jetzt bin ich zufrieden

von Jim M. (turboj)


Lesenswert?

Marc Vesely schrieb:
> wahrscheinlich arbeitet SD intern mit 1KB.

Das ist IMO stark vom in der Karte verbauten Controller abhängig.

Die Karten haben ein Register für die Page size, was man auslesen kann. 
Normal ist IIRC 1 MByte für SD mit 1-2 GB und 4 MByte für SDHC.

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.