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
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..
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.
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.
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.
@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.
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.
Ergänzung: Meine Erwartung war, SDIO = 4 x SPI => knapp 5MByte/s...
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.
Also ich habe gerade mit dem Multiple Block Write 20MB geschrieben, was nach 948ms erledigt war :-) (48MHz, 4-Bit Bus) Jetzt bin ich zufrieden
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.