mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SD Karte - Geschwindigkeit erhöhen - PIC18F4550


Autor: Clemens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich verwende eine SD Karte um messwerte zu speichern.

Der zurzeit verwendete µC ist ein PIC18F4550, der später durch einen 
dsPIC30F6010 ersetzt werden soll.

ich verwende den low-level-driver vom ccsc compiler, mmc_sd.c als 
header.

kein fat system, die daten werden einfach in 512Byte blöcken zuerst in 
den puffer der karte und dann in den eigentlichen speicher geschrieben. 
Das dauert über die SPI schnittstelle 30µs.

das brennen eines blockes dauert 5ms.

wenn man die 30us vernächlässigt, kommt man bei 512byte * 200 auf 
100kbyte/s.

das ist zu wenig, wie kann ich die geschwindigkeit erhöhen?

es muss möglich sein, wenn ich die sd karte in meine pc stecke und ein 
file daraufkopiere kann man es mit 1,5mByte/s schreiben.

danke für eure hilfe,

lg clemens

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wenn man die 30us vernächlässigt, kommt man bei 512byte * 200 auf
>100kbyte/s.

Mit nem AVR komm ich auf 450kb/s. Aber nicht mit jeder Karte!

>das ist zu wenig, wie kann ich die geschwindigkeit erhöhen?

Was anderes nehmen als ne SD Karte. Das Wear Levelling kann einem
ganz schön den Tag versauen. 300ms Päuschen sind da keine Seltenheit.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. mit FPGA oder CPLD.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>z.B. mit FPGA oder CPLD.

Vergiss es. Das einzige was ein bißchen was bringt ist
ein Arsch voll RAM und im Multiblock Mode schreiben.

>es muss möglich sein, wenn ich die sd karte in meine pc stecke und ein
>file daraufkopiere kann man es mit 1,5mByte/s schreiben.

Dann nimm doch einen PC!

Autor: Clemens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen PC zu verwenden ist keine Option, die platine soll in einen 
zylinder mit 5cm höhe und 20cm durchmesser.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Clemens schrieb:
> hallo,
>
> ich verwende eine SD Karte um messwerte zu speichern.
>
> Der zurzeit verwendete µC ist ein PIC18F4550, der später durch einen
> dsPIC30F6010 ersetzt werden soll.
>
> ich verwende den low-level-driver vom ccsc compiler, mmc_sd.c als
> header.

.c als header??

Gibt es den Quellcode zu sehen? Wird darin eine "spi_read_write" 
Funktion für jedes Byte aufgerufen auch beim Schreiben/Lesen von ganzen 
Blocks?

> kein fat system, die daten werden einfach in 512Byte blöcken zuerst in
> den puffer der karte und dann in den eigentlichen speicher geschrieben.
> Das dauert über die SPI schnittstelle 30µs.
>
> das brennen eines blockes dauert 5ms.

Das ist optimistisch. Es mag für viele Blocks so sein aber unbedingt 
testen (=mehrere Megabytes in aufeinanderfolgende Blöcke schreiben und 
die Maximalzeit festhalten). Wie von holger schon angemerkt, kann 
Schreiben eines Blocks auch mal sehr viel länger dauern.

> wenn man die 30us vernächlässigt, kommt man bei 512byte * 200 auf
> 100kbyte/s.
>
> das ist zu wenig, wie kann ich die geschwindigkeit erhöhen?

Im Mittel: SPI-Takt so hoch wie möglich (<=25MHz bei SDC), SPI so wenig 
wie möglich pollen. Kenne PIC32 nicht aber die bieten mglw. DMA oder 
zumindest einen kleinen SPI FIFO. Vielleicht gibt es ja auch ein 
"ausgewachsenes" MCI für SD-Card-Bus bei den Teilen. Multiblock hilft 
auch, manchmal sogar deutlich, wurde ja ebenfalls schon von holger 
geschrieben.

Wie auch schon von holger angemerkt, hilft zur Überbrückung der längeren 
Block-Schreibzeiten (max. 250ms in zumindest einem SDC Datenblatt) nur 
ausreichend RAM zum Puffern der zwischenzeitlich auflaufenden Daten. 
Firmware muss dann quasi parallel Daten sammeln, puffern und vorhandene 
Daten wegschreiben bzw. auf Karte warten.

> es muss möglich sein, wenn ich die sd karte in meine pc stecke und ein
> file daraufkopiere kann man es mit 1,5mByte/s schreiben.

Mit hohem SPI-Takt, Controllern mit SPI-DMA oder SPI-FIFO und halbwegs 
schnellen Karten kommt man schon in den Bereich von >1000kBytes/sec aber 
halt nur im Mittel, dazwischen kurzzeitig auch mal nur ca. 
2,5kBytes/sec.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei man auf SD-Cards nicht nur per SPI sondern auch per 4-Bit SDIO 
schreiben kann und es µCs gibt, die solch ein Interface besitzen.

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.