mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD-Card (SPI-Modus) unterschiedlich schnell?


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich experimentiere gerade mit SD-Karten und benutze den Code von 
www.elm-chan.org. Dabei ist mir aufgefallen, daß manche Karten nach dem 
Schreiben, bis sie "Ready" sind (bis 0xff auf MISO erscheint), bis zu 
130ms brauchen. Andere wiederum sind superschnell und haben praktisch 
keine Wartezeit. Im Original-Code wird maximal 500ms darauf gewartet, 
dass die Karten "Ready" sind. Woran kann das liegen? Sind manche 
SD-Cards wirklich so langsam oder mache ich etwas falsch?
Danke :-)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Woran kann das liegen? Sind manche
>SD-Cards wirklich so langsam ?

Ja, das sind sie. Sonst wären ja alle gleich schnell ;)

Autor: Sabu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn Du welche von Hama hast, dann vergiss alle Spezifikationen. Die 
halten sich an garnix...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke für eure Antworten,

> Ja, das sind sie. Sonst wären ja alle gleich schnell

Naja, daß alle gleich schnell sind, habe ich nicht erwartet. Aber diese 
Unterschiede finde ich schon sehr extrem. Haben einige einen fetten RAM 
als Puffer drin oder geht bei denen des physikalische Beschreiben des 
Flash-Speichers einfach schneller? Gibt es denn irgendwelche Tricks, mit 
denen man die langsamen Karten beschleunigen kann? Vielleicht indem man 
einen Puffer im Mikrocontroller spendiert, der die Daten erstmal sammelt 
und dann größere Mengen schreibt.

Zur Info: Ich baue mir einen Dataenlogger, der in der Lage sein soll, 
44000 Bytes pro Sekunde wegzuschreiben. Zur Zeit schafft er's aber nicht 
mit allen Karten. Wie kann ichs in den Griff bekommen, daß er auch mit 
langsamen Karten arbeiten kann?

TIA,
 Peter

Autor: Wolfgang Mües (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter,

wie groß ist die Datenmenge, die Du am Stück wegschreibst?
Probier mal mit 2KByte oder Vielfachen davon!

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Größere Datenmengen auf einmal schreiben, also nicht nur 1 Sektor, 
sondern 4 Sektoren (2kByte, da dies häufig die Pagegröße der Flash 
Speicher ist). Dazu muss aber die Routine entsprechend angepasst werden, 
und der µC muss ausreichend RAM haben.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Danke, das werde ich so machen. Zur Zeit gibt's zwar meine Architektur 
nicht her, daß ich einen 2kB-Buffer am Stück freimachen kann, aber ich 
kann es erstmal mit 1536 Bytes versuchen. Wenn das nicht reicht, werde 
ich eben ein bisschen umstrukturieren müssen.

Viele Dank nochmal,
Peter

Autor: Wolfgang Mües (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2 KByte! Nicht weniger! Kurze Erklärung:

Wenn Du < 2 KByte schreibst, muss der Controller auf der Karte die
Sektoren stückeln, denn in eine Page eines heutigen NAND-Flashes passen 
2 KByte Nutzdaten. Das Stückeln kostet viel Zeit.

Benutzt Du ein Filesystem? Mit einer Bibliothek, z.B. für FAT?
Dann solltest Du darauf achten, dass beim Schreiben von mehr als 512 
Bytes auch das Kommando zum Schreiben von mehreren Blöcken 
hintereinander verwendet wird (und nicht in einer Scheife immer Sektor 
für Sektor geschrieben wird).

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfgang,
OK, dann werde ich deinen Rat mal beherzigen und die Daten in einem 
2K-Buffer sammeln. Und ja, ich benutze ein FS. Die Low-Level Routinen 
sind auf Multi-Sector Writes ausgelegt und benutzen die entsprechenden 
CMDs. Das sollte eigentlich passen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.