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
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
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.
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.
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!!!
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
DanielZeuter schrieb: > ohne Unterbrechung Davon war bisher nicht die Rede. Aber lass dann mal hören, ob es klappt.
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.
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!
@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.
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
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.
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?
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
>> 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;)
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.
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
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.