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


von Clemens (Gast)


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

von holger (Gast)


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.

von Manuel (Gast)


Lesenswert?

z.B. mit FPGA oder CPLD.

von holger (Gast)


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!

von Clemens (Gast)


Lesenswert?

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

von Martin T. (mthomas) (Moderator) Benutzerseite


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.

von (prx) A. K. (prx)


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.

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.