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.