Forum: Mikrocontroller und Digitale Elektronik XMEGA SPI SD Karte Übertragungsgeschw.


von Matthias (Gast)


Lesenswert?

Hallo,

wir testeten heute die Übertragungsgeschwindigkeit eines SPI Interfaces 
vom XMEGA zu einer Verbatim SD Karte mit einer SPI Clock von 8 MHz.

Dazu haben wir 1024 x 512 Bytes auf die SD Karte geschrieben und mittels 
Timer die Zeit gemessen.

Wir erhalten somit eine Schreibdatenrate von ca: 300 kbit/s.

Dies erscheint uns noch ein wenig langsam. Wir konnten durch die 
Timerfunktion schließlich herausfinden, dass bis zu 70% der Zeit beim 
Warten auf das Busy-Signal (oxFF) der SD Karte nach Sendung von 512 
Bytes verbraten wird.

Unsere Schlussfolgerung wäre nun, dass die verwendete SD Karte im SPI 
Modus sehr lahm ist, wir verwenden eine 2GB Verbatim SD Karte.

Habt ihr bessere Erfahrungen mit anderen Karten gemacht?

Vielen Dank für die Antworten.

von holger (Gast)


Lesenswert?

>Wir erhalten somit eine Schreibdatenrate von ca: 300 kbit/s.

Das sind ja nur 37kB/s. Ein bißchen langsam. 100-200kB/s sollte
da schon drin sein. Das schafft man schon mit einem ATMEGA.
Es gibt aber tatsächlich extrem langsame Karten. Eine 64MB
Nokia hat bei mir nie mehr als 30kB/s gebracht. Und das mit einem
ARM7 und 20MHz SPI. MultiBlock Write bringt in der Regel noch
ordentlich was.

von Matthias (Gast)


Lesenswert?

Multiblock Write bedeutet wahrscheinlich das mehrere 512 Blöcke auf 
einmal geschrieben werden.

Ist es beim Fat16 nicht nötig nach 512 Bytes auf ein 0xFF der SD Karte 
zu warten, um danach erst weitere 512 Bytes schreiben zu können?

Danke für die Auskunft, also 100 kByte/s sollten somit durchaus machbar 
sein, morgen werden wir eine andere SD Karte testen.

Nochmals die Frage:

Gibt es favorisierte SD Karten Typen bzw. Hersteller ?

Velen Dank für die Auskunft

von holger (Gast)


Lesenswert?

>Gibt es favorisierte SD Karten Typen bzw. Hersteller ?

Bei SPI Betrieb taugen die alle nicht so richtig.
Große Karte, schnelle Karte: Nö.
Neue Karte, schnelle Karte: Kannste knicken.

Meine schnellste Karte ist eine uralte 256MB MMC.
Das Mittelfeld liegt da so bei 100 bis 250kB/s.

Kauf halt keine NoName Karten. Verbatim ist NoName.

von Hamid (Gast)


Lesenswert?

Hallo,

Beim schreiben auf die SD-Karte in XMEGA  über den SPI schreibe ich 
momentan auch einzelne Blöcke von 512 Bytes und erreiche dabei eine 
zieml8ich langsame Geschwindigkeit:  nur 38 MB/s. ich werde gerne die 
MultiBlock Write Option verwenden, nur ich weiss leider nicht wie ich 
sie verwenden kann.  Hat schon jemand Erfahrung dabei gehabt?

Vielen Dank im Voraus.

Hamid

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


Lesenswert?

Multiblockmode per Kommando einschalten, Anzahl an Blöcken 
lesen/schreiben, nach jedem Block Flags abfragen, nach gesamtem 
Datentransfer Multiblockmode per Kommando wieder ausschalten. Mehr ist 
es nicht.

von Hamid (Gast)


Lesenswert?

Vielen Dank  Travel Rec.

> Multiblockmode per Kommando einschalten, Anzahl an Blöcken
> lesen/schreiben, nach jedem Block Flags abfragen, nach gesamtem
> Datentransfer Multiblockmode per Kommando wieder ausschalten. Mehr ist
> es nicht.

ich habe jetzt die Daten im Multiblock-Modus wie hier Beschrieben 
verwndet:
http://elm-chan.org/docs/mmc/mmc_e.html

und kann jetzt Geschwindigkeiten bis ca. 230 KBytes/s erreichen. ich 
habe aber ein anderes Prblem festgestellt: wenn ich die Daten in den 
ersten Sektoren (ab 4096) liegt die Geschwindigkeit bei ca. 230 KBytes/s 
und wenn ich die Daten in höheren Adressen schreibe (5000) sinkt sie bis 
zum 1/5.

verwnde ich die Commands zum schreiben von Multiblocks falsch ? oder 
gibt es eine andere Erklärung?

Ich habe das Gefühl, dass wenn ich eine Adresse überschreibe dauert es 
länger als wenn ich sie zum ersten mal schreibe.

P.S. Momentan schreibe ich direkt auf die SD-Karte (2GB von Kingston) 
(Ohne Fat-Funktionen) um einfach eine höhere Geschwindikeit zu 
erreichen.

Vielen Dank im Voraus

Hamid

von Matthias (Gast)


Lesenswert?

>100-200kB/s sollte
>da schon drin sein. Das schafft man schon mit einem ATMEGA.

Kann mir einer einen Beispiel-Code nennen, mit dem diese Datenrate 
erreicht werden kann?

von Hamid (Gast)


Lesenswert?

ich habe jetzt einen Timer während des Schreibens eines Blocks von 512 
Bytes eingeschaltet und bekomme 6ms. Davon gehen 4ms nur für das Busy, 
was eigentlich ziemlich lang ist.
Hat schon mal jemand das Problem gehabt bzw. wie man diese Zeiten 
beschleunigen kann?

Merci

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Schreibzeit kann über einen großen Zeitraum variieren, weil die 
Karten-Logik ein Wear-Leveling vornimmt, sodass alle Speicherzellen 
gleichoft beschrieben werden.

von Hamid (Gast)


Lesenswert?

Simon K. schrieb:
> Die Schreibzeit kann über einen großen Zeitraum variieren, weil die
> Karten-Logik ein Wear-Leveling vornimmt, sodass alle Speicherzellen
> gleichoft beschrieben werden.

Kannst du es bitte genauer erklären?

Danke

von Thomas K. (muetze1)


Lesenswert?

Informier dich doch einfach selbst: 
http://de.wikipedia.org/wiki/Solid_State_Drive#Verschlei.C3.9F_und_Ausfallvorhersage_.28S.M.A.R.T..29

Es ist ein Fachbegriff und lässt sich leicht finden.

von Hamid (Gast)


Lesenswert?

Thomas K. schrieb:
> http://de.wikipedia.org/wiki/Solid_State_Drive#Ver...

Danke für den Link. Nur ich kann damit die SD-Karte noch nicht schnell 
schreiben.

Könnte mir jemand bitte einen schnellen getesteten code empfehlen?

Merci

von holger (Gast)


Lesenswert?

>Danke für den Link. Nur ich kann damit die SD-Karte noch nicht schnell
>schreiben.
>
>Könnte mir jemand bitte einen schnellen getesteten code empfehlen?

Du brauchst keinen schnelleren Code sondern eine schnellere Karte.

>Davon gehen 4ms nur für das Busy,

Warte mal ab bis du da sporadisch mehr als 100ms siehst;)
Und du wirst das irgendwann mal sehen. Diese Busy Zeiten braucht die
Karte selbst. Daran kannst du nichts ändern, ausser wie oben gesagt eine
schnellere Karte suchen.

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


Lesenswert?

Das geht nur mit größeren RAM-Puffern flüssig. Für meinen 
SD-Wave-Recorder, der 192kByte/s aufbringt bzw. abholen will, verwende 
ich 128kByte 12ns-RAM, die abhängig von der Karte sporadisch bis zu 70% 
gefüllt werden, nominal werden aber nur etwa 5% gebraucht. Deine 
Beobachtung bezüglich der ersten Blöcke einer Karte kann ich teilen, 
allerdings ist es bei mir genau andersherum: die ersten 4096 Blöcke sind 
eher langsam, die nachfolgenden Adressen durchgehend schnell. Nach einem 
Datenstop und nachfolgendem Schreiben gibt es anfangs auch einige 
kleinere Verzögerungen, die der Puffer ausgleichen muß. Ich verwende 
Karten von EMTEC, SANDISK, LEXAR, PLATINUM und KINGSTON.

von Hamid (Gast)


Lesenswert?

Vielen Dank für die Antwort. Ich werde jetzt andere Karten besorgen und 
testen.

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.