PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schnellerer SD-Karten-Treiber?



IRQ
06.01.2009, 23:40
Hallo zusammen,

ich verwende den SD-Treiber von Roland Riegel (http://www.roland-riegel.de/sd-reader/index.html) um mit einem AT90CAN128 @16MHz (128kb Flash / 4kb SRAM) Daten auf eine SD-Karte zu loggen. Funktioniert prima, allerdings etwas langsam :-/

Wenn ich den Controller nichts anderes tun lasse, als auf die Karte zu schreiben was das Zeug hält, so erreicht er etwa Geschwindigkeiten von 77 Kilobyte / Sekunde.

Ist das ein realistischer Wert, mit dem man sich abfinden muss oder ist da mehr drin (anderer Treiber)? Der Controller soll nämlich so ca. alle 10ms diverse Sensorwerte (z.B. Federwegspotis) loggen, da kommt schon etwas zusammen. Und wenn er nebenher noch was anderes tut, wird die Geschwindigkeit wohl noch sinken...

Mich würde daher interessieren ob ihr da Erfahrungswerte besitzt, und welche Treiber ihr verwendet. Ich fand bei dem von Roland Riegel ganz praktisch, dass er mit FAT16 umgehen kann, dann steckt man die Karte einfach in den Rechner. Wirkt sich das wesentlich negativ auf die Geschwindigkeit aus?

Braucht man ein Dateisystem, um die Daten am Rechner später auszulesen?

Ich wäre für Gedankenanstöße jeglicher Art dankbar!

Jaecko
07.01.2009, 10:28
Also ich verwend auch den Treiber von R.R. und dessen Geschwindigkeit reicht mir eigentlich. Wenns ne SD-Karte ist, könnte man in den schnelleren Modus umschalten (Name weiss ich grad nicht), aber der geht halt dann nicht mehr per SPI.


In nem Temperaturlogger schreibt mir das Programm die Daten direkt als .csv formaiert. Kann man dann einfach mit Excel öffnen.
Ein Dateisystem brauchst du nicht unbedingt. Du kannst die Daten auch "roh" auf die Karte werfen. Ist beim Schreiben dann schneller, aber am PC nicht mehr ganz so komfortabel auszuwerten.

IRQ
07.01.2009, 14:51
Meinst du SDHC? Ich weiß nicht, ob das was bringen würde, die normale SD-Karte ist ja mit 77kb/s noch nicht ausgereizt, denke eher, dass der Controller da der Flaschenhals ist.

Wie ist das mit der Geschwindigkeit ohne Dateisystem? Wirkt sich das so stark aus, dass sich der Aufwand lohnt? Wir haben nämlich eh vor eine Art GUI in Java zu schreiben, um die Daten auszuwerten. Wenn man mit Java quasi roh auf die Karte zugreifen könnte, wäre das hervorragend, ich bezweifle jedoch, dass das so einfach möglich ist.

Jaecko
07.01.2009, 15:15
Ne direkte Messung hab ich noch nie gemacht. Nur da beim "roh"-Schreiben der ganze Aufwand für die Verwaltung der FAT wegfällt (Einträge aktualisieren) könnte da schon ein subjektiv merklicher Geschwindigkeitsvorteil drin sein.

Wenn es eh egal ist, wie die Daten auf den PC kommen (roh auslesen geht z.B. mit HxD; oder vom Controller aus einfach wieder von der Karte lesen und formatiert per UART schicken), dann wär die Version ohne FAT insofern auch besser, als dass man sich nen Haufen Flash-Speicher spart. So ein Fat-Treiber ist ja nicht gerade klein (relativ...).
Da muss man aber halt wieder aufpassen, dass man die richtigen Sektoren erwischt. Also braucht man da wieder ne Art kleine Verwaltung, dass man nicht Sektoren eines anderen Logs überschreibt.
(Wenns eh nur 1 Logaufgabe ist, dann fällt das Problem auch weg)

Ich hab mich halt für FAT entschieden, weil im ATMega2560 bzw. 128 genug Flash frei ist und mir der Datenaustausch über Excel per .csv am besten passt, bzw. ich einfach Bilder/Icons o.ä. draufziehen kann.

Besserwessi
07.01.2009, 17:23
Ein der Zeit beim Schreiben auf die SD Kartenist das warten auf den Schreibevorgang. Da wartet der Controller und kannn anderes machen. Die eigentliche Übertragung der Daten sollte rechts schnell gehen, vor allem wenn man Hardware SPI nutzt. Langsam wirds eventuell durch die FAT, vor allem wenn man wenig Puffer nutzen will.

Die 77 KBytes/s sind etwa das maximum was der AVR AD Wandler an daten liefern kann, selbst wenn man die 10 Bits als 16 Bit wert Speichert. Das sollte also ausreichen.

Bernhard667
07.01.2009, 18:18
Hallo,

ich verwende den Treiber von Holger Klabunde.
Geschwindigkeit ist für meine Anwendung nicht so wichtig, deswegen habe ich es noch nie gemessen.
In seinem readme.txt schreibt er aber von bis zu 122 KByte pro Sekunde.
Schau doch mal da nach

Bernhard

the_Ghost666
08.01.2009, 08:04
Wenn dir die Geschwindigkeit immernoch nciht reicht, dann solltest du versuchen einen Treiber zu finden oder zu schreiben, der den anderen Modus der SD-Karte, wie oben schon gesagt, verwendet. Damit ist nicht SDHC gemeint, sondern der normale 4Bit Bus, für den jede SD-Karte ausgelegt ist. SPI ist eigentlich nur für die Konfiguration gedacht und nicht für den Datentransfer. Da im Bereich der Microcontroller aber selten so hohe Datenraten in Hobbyanwendungen gebraucht werden, und die Ansteuerung schwieriger ist und mehr Pins verbraucht, hat kaum jemand damit gearbeitet. Schau mal in die Spezifikation, dieses nette 500 Seiten PDF, dass es per google gibt, dort steht das genaue Protokoll drin. Es kann sein, dass du dann jedoch auf jeden Fall blockorientiert arbeiten musst, dh 512Byte auf einmal schreiben musst. Wenn du eh soviel, oder besser 2x 512Byte über hast, macht das nichts, da du einen Block als Arbeitskopie nutzen kannst , während der andere gerade in oder von der Karte geladen wird.
Damit ist ne höhere Datenrate realisierbar, einfach weil ein Byte in 2 Takten verschoben ist, die wohl auch in Software noch etwas schneller, als das SPI gesendete Byte sein können. Dafür hast du beim SPI keinen Stress mit der Übertragung, macht ja alles das Modul, dabei kannst du auch ohne Verzögerung Interrupts ausführen.