SD Karte - Geschwindigkeit erhöhen - PIC18F4550

Gast #1689176
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
Gast #1689188
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.
Gast #1689215
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!
Moderator Persönliche Seite #1689305
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.