Forum: Mikrocontroller und Digitale Elektronik Wie schnell kann ein AVR von SD-Karte lesen?


von DanielZeuter (Gast)


Lesenswert?

Hallo,


kann mir jemand sagen, wie schnell ein M32 o.ä. (mit 20MHz-Takt)  Daten 
von einer SD-Karte lesen kann?

(am besten in Bytes pro Sekunde)

Super wäre auch eine Erklärung, wie man das für andere Controller 
rausfinden/errechnen kann!


Danke Euch,

Daniel

von richie (Gast)


Lesenswert?

DanielZeuter schrieb:
> kann mir jemand sagen, wie schnell ein M32 o.ä. (mit 20MHz-Takt)  Daten
> von einer SD-Karte lesen kann?

die langsamsten karten schaffen 3,6 MB/s (lesen)

was der avr schafft (ob schneller oder langsamer), weiß ich nicht

mehr zur sd-karte:
http://de.wikipedia.org/wiki/SD-Karte#.C3.9Cbertragungsgeschwindigkeit

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

Mit einem AT91SAM7 kannst froh sein, wenn du 500 Kb/s hinkriegst.
Und der arbeitet mit 48MHz.

Die Karten können mehr, der AVR weniger.
Errechnen lässt sich soetwas schlecht, sind eher Erfahrungswerte.
z.B. hängt es auch davon ab, was der uC zusätzlich rechnet, oder
was für Zugriffe auf das Dateisystem erfolgen.

von Εrnst B. (ernst)


Lesenswert?

DanielZeuter schrieb:
> Super wäre auch eine Erklärung, wie man das für andere Controller
> rausfinden/errechnen kann!

Ok... Du steuerst die Karte im SPI-Modus an. Der ist (inzwischen) 
hauptsächlich zur Initialisierung gedacht, und bringt nie die volle 
Geschwindigkeit. Mehr Performance gibts nur gegen NDA... oder mit einem 
Controller, der die SD-Karten-Ansteuerung schon mitbringt.

Im SPI-Modus kriegst du mindestens 400kHz Taktfrequenz hin. Fast alle 
Karten können (nach der Initialisierung) zwar auch mehr, aber garantiert 
ist das nicht. (MicroSD-Karten dürfen IIRC sogar den SPI-Modus ganz 
weglassen, macht aber keine)...

d.H. Milchmädchen-Rechnung: 400/8=50 kByte/Sekunde.

Benchmark mit der Elm-Chan-FAT-Implementierung:
http://elm-chan.org/fsw/ff/img/rwtest.png

Es geht also auch ein bischen mehr.

von Konrad S. (maybee)


Lesenswert?

ATxmega128A1 bei 32MHz Takt: 425 kByte/s
Beitrag "Re: ATxMega Stick"

von DanielZeuter (Gast)


Lesenswert?

Danke für die Antworten!!!

Ich brauche ca. 30kB/s, die aber ohne Unterbrechung während des 
Auslesens.

Könnte also realistisch sein... dann werde ich mal einen 
"SD-Karten-Sockel" bestellen und ausprobieren.

Noch mal Danke für die Antworten!!!

von Sascha W. (sascha-w)


Lesenswert?

DanielZeuter schrieb:
> Danke für die Antworten!!!
>
> Ich brauche ca. 30kB/s, die aber ohne Unterbrechung während des
> Auslesens.
die entscheidende Frage ist, was der AVR mit den gelesenen Daten weiter 
anstellen soll. Ein copy from /sd to /dev/null mit nnn kByte/s hat ja 
keinen praktischen Nutzen.

Sascha

von Konrad S. (maybee)


Lesenswert?

DanielZeuter schrieb:
> ohne Unterbrechung

Davon war bisher nicht die Rede. Aber lass dann mal hören, ob es klappt.

von Konrad S. (maybee)


Lesenswert?

Sascha Weber schrieb:
> was der AVR mit den gelesenen Daten weiter
> anstellen soll

Bei 650 Takten pro Byte lässt sich einiges machen.
Das Problem ist eher "ohne Unterbrechung", bzw. wieviele Puffer benötigt 
werden, damit der Datenstrom nicht abreißt. Kommt sehr auf die SD-Karte 
drauf an und ggf. auf das verwendete Filesystem.

von Falk B. (falk)


Lesenswert?

Milchmädchenrechnung die 2. Da SD-Karten sektorweise gelesen werden, 
schafft der AVR mit 20 MHz = 10 MHZ SPI-Takt=1,2Mbytes/s, wenn er einen 
Sektor a 512 Byte liest. Dann kommt der nächste Sektor. Wenn der AVR 
weiß, welcher es sein soll, geht die Adressierung relativ schnell, wie 
schnell genau weiß ich nicht. Die Langsamkeit vieler SD-Karten Projekt 
liegt eher daran, dass man das FAT-Dateisystem mit seiner Logik 
verarbeiten muss, und dazu braucht es einigermassen Speicher, um die 
ganzen Informationen aufzudröseln. Hat man nicht viel Speicher, muss man 
viele Sachen durch ständiges Neu lesen und Auswerten erledigen, das 
frisst massig Zeit. Also frei nach Goethe

MEHR RAM!

von Konrad S. (maybee)


Lesenswert?

@Falk Brunner
Hier Beitrag "Re: Wie schnell kann ein AVR von SD-Karte lesen?" habe ich eine 
Angabe gemacht und auf 
Beitrag "Re: ATxMega Stick" verwiesen. Auf einen 
Blick: 425 kByte raw read mit ATxmega128A1 bei 32MHz Takt.
Hier Beitrag "Re: Wie schnell kann ein AVR von SD-Karte lesen?" dagegen bezog 
ich mich mit den 650 Takten pro Byte auf die Verarbeitbarkeit von 
30kByte/s bei 20MHz Takt. Setzt man die Werte zueinander ins Verhältnis, 
so kann man abschätzen, dass einiges an Rechenleistung für die 
Verarbeitung der Daten übrigbleibt.

Falk Brunner schrieb:
> wie
> schnell genau weiß ich nicht

Nun, bei 16MHz SPI-Takt kamen bei der getesteten SD-Karte 425 kByte/s 
raus. Was die SD-Karte bei nicht-sequenziellem Zugriff macht, ob sie 
zwischendurch mal ein paarhundert ms Zigarettenpause macht usw. ist 
nochmal eine ganz andere Geschichte.

von Sascha W. (sascha-w)


Lesenswert?

Konrad S. schrieb:
> @Falk Brunner
> Hier Beitrag "Re: Wie schnell kann ein AVR von SD-Karte lesen?" habe ich eine
> Angabe gemacht und auf
> Beitrag "Re: ATxMega Stick" verwiesen. Auf einen
> Blick: 425 kByte raw read mit ATxmega128A1 bei 32MHz Takt.
> Hier Beitrag "Re: Wie schnell kann ein AVR von SD-Karte lesen?" dagegen bezog
> ich mich mit den 650 Takten pro Byte auf die Verarbeitbarkeit von
> 30kByte/s bei 20MHz Takt.
> Setzt man die Werte zueinander ins Verhältnis,
> so kann man abschätzen, dass einiges an Rechenleistung für die
> Verarbeitung der Daten übrigbleibt.
ja nur kann man ja nicht sagen, das die 650 Takte "übrig sind", bremst 
hier wirklich die Karte, dann hängt der AVR während der Zeit und wartet 
bis die SD-Karte meint bereit zu sein.
Klar könnte man während der Wartezeit mit einigen Kniffen auch was 
anderes machen, aber das dürfte recht umständlich werden - außer die 
anderen Sachen würden in einer ISR laufen.

Sascha

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Also mit 6MHz SPI Takt bekommt man locker ne 320kbit MP3 von SD Karte 
mit FAT32 in RAM und von da in nen MP3 Decoder IC (VS1053).
320kbit/s/8 = 40kbyte/s
Also passt das für dein Anliegen (darfst auch gerne mal erklären was du 
genau vorhast).

Der Atmega644 hatte 12MHz Takt, da direkt an 3,3V.

von Konrad S. (maybee)


Lesenswert?

Sascha Weber schrieb:
> ja nur kann man ja nicht sagen, das die 650 Takte "übrig sind", bremst
> hier wirklich die Karte, dann hängt der AVR während der Zeit und wartet
> bis die SD-Karte meint bereit zu sein.
> Klar könnte man während der Wartezeit mit einigen Kniffen auch was
> anderes machen, aber das dürfte recht umständlich werden - außer die
> anderen Sachen würden in einer ISR laufen.

Oder andersrum: ein Teil der 650 Takte geht für den SPI-Interrrupt weg 
...

Martin Wende schrieb:
> Also mit 6MHz SPI Takt bekommt man locker ne 320kbit MP3 von SD Karte
> mit FAT32 in RAM und von da in nen MP3 Decoder IC (VS1053).
> 320kbit/s/8 = 40kbyte/s

Das ist doch mal ein Wort.
Kannst du sagen, wieviel RAM für SPI bzw. SD-Karte bzw. FAT32 notwendig 
war?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Aufdröseln kann ichs jetz nicht komplett, hier mal was der Compiler 
sagt:
AVR Memory Usage
----------------
Device: atmega644p

Program:   17992 bytes (27.5% Full)
(.text + .data + .bootloader)

Data:        974 bytes (23.8% Full)
(.data + .bss + .noinit)

Das Programm nimmt per UART nen Dateiname entgegen und spielt die Datei 
dazu dann ab.
Sind folgende Buffer drinne die noch abgezogen werden müssen:
UART: 96 byte
MP3: 32 byte
UART String: 10 byte
Strings im RAM (Teststadium ;)): 117 byte

Also ungefähr 720byte für normale Variablen und den Sektorpuffer

von holger (Gast)


Lesenswert?

>> Also mit 6MHz SPI Takt bekommt man locker ne 320kbit MP3 von SD Karte
>> mit FAT32 in RAM und von da in nen MP3 Decoder IC (VS1053).
>> 320kbit/s/8 = 40kbyte/s
>
>Das ist doch mal ein Wort.

Kaum. Mit meiner schnellsten Karte kann ich auch mit einem
ATMega32 und 16MHz Takt (SPI 8MHz) mit 450kB/s ins RAM lesen.
Dann aber schön alle Interrupts abschalten!
Dann sind die Daten aber nur im RAM und wurden nicht weiter
bearbeitet. So viel mal zu Benchmarks. Bei Martin übernimmt
der VS1053 dann die Ausgabe mit seinem 2kB? internen Buffer
völlig selbstständig ohne das der AVR da was machen müsste.
Na gut er muss die da noch vom RAM reinschieben. Geht vieleicht
auch noch mit 450kB/s. Netto waren es dann 220kB/s.

Im Endeffekt hat der AVR die Daten dann nur kopiert.
Und der VS1053 überbrückt mit seinem internen Buffer
dann die Latenzzeiten der SD Karte. Wenn der AVR die
Daten selber noch bearbeiten muss bleibt ganz schnell nichts
mehr über an Takten.

Von einer unterbrechungsfreien Übertragung kann man da
nicht ausgehen.

>Oder andersrum: ein Teil der 650 Takte geht für den SPI-Interrrupt weg

SPI Interrupt und schnell schliessen sich gegenseitig aus;)

von Konrad S. (maybee)


Lesenswert?

Martin Wende schrieb:
> Also ungefähr 720byte für normale Variablen und den Sektorpuffer

holger schrieb:
> der VS1053 dann die Ausgabe mit seinem 2kB? internen Buffer

Ah, ja. Mit Puffer für nur einen Sektor allein wäre es wohl nicht 
machbar.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

512kB muss sone SD Lib ja immer einlesen, da das die größe eines Sektors 
ist.
Dann hat die Lib noch ne Menge 32bit Variablen für FAT, Seek und 
Sektorenadressen.

Wieso sollen das nicht 40kbyte/s kontinuierlich sein?
Natürlich läuft das mit ner Menge Puffern, aber wärn nich 40kbyte/s 
drinne, dann würds knacksen (war bei 2MHz SPI der Fall).
Die Frage war ja ob er diese Daenrate auslesen kann, was der TE damit 
noch im AVR machen will wissen wir ja noch nicht.

Der MP3 Puffer meiner Software hat nur 32byte, weil man nach jedem 
Data_Request des VS1053 auf jeden Fall 32 byte rüberschubsen kann.

Wenn der TE also die 2kB Puffer in AVR legt, kann er da immer seine 
40kb/s rauslesen und beackern. Da bieten sich dann m644 (4kb RAM) und 
m1284 (16kb!!) an

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

>Super wäre auch eine Erklärung, wie man das für andere Controller
>rausfinden/errechnen kann!

Mit einem STM32F103Zxx schafft man ca. 4MByte/s bei 12,5Mhz CLK und 4Bit 
Mode.

Grüsse

von frichter (Gast)


Lesenswert?

Easy: Mit dem P8X32 von Parallax kann man mit den meisten Karten 900KB/s 
(raw) und 600KB/s (durch den FAT16-Layer) per SPI lesen und schreiben. 
Dabei sind dann noch sieben andere Cores frei, um die Daten parallel zu 
verarbeiten.

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.