der zugriff auf ne SD karte passiert ja per SPI was du da siehst ist quasi das FAT format als rohdaten (auslesen tut man immer 512Byte große sektoren) also müsste man tehoretisch nur die datei nach FAT spezifikation zusammensetzen
ich bin dabei, meinen avr-webserver zu programmieren. wenn ich nun zb ein bild oder eine andere große datei senden will, kann ich ja wohl kaum alle daten der datei in eine array packen und versenden. gibt es gute libs für den sd zugriff, mit denen das problem gelöst werden kann?
mfg roboman
...and always remember...
...AVR RULES...
der zugriff auf ne SD karte passiert ja per SPI was du da siehst ist quasi das FAT format als rohdaten (auslesen tut man immer 512Byte große sektoren) also müsste man tehoretisch nur die datei nach FAT spezifikation zusammensetzen
Dazu gibt es Treiber (als Libs). Such mal im Netz.
ich habe gesucht, aber immer nur funktionen gefunden, mit denen ich den inhalt einer ganzen datei auslesen kann. ein bild zb ist aber zu groß, um es auf einmal auszulesen. gibt es dafür eine lib?
...and always remember...
...AVR RULES...
gib mal link, die lib würde mich schwer interessieren und so schwer kanns nich sein das umzuschreiben um sequentiell zu lesen ... mind. 512 byte spreicher musste sowieso vorsehn
Die Lib umzuschreiben ist bestimmt nicht sooo schwer.
Hier ein Beispiel vom Ulrich Radig: http://www.ulrichradig.de/home/index.php/avr/mmc-sd
Es gibt sicherlich noch weitere Libs, evtl. auch vom Ulrich Radig.
di lib ist doch schon fast perfekt,
void fat_read_file(...) aus der fat_16.c
gibt dir in 512 byte blöcken die datei wieder, das ist doch ideal ... aber die 4MB grenze ist schwierig, wenn da mal wirklich n etwas größeres bild iss wirds eng
ok, danke. wenn ich den code richtig verstehe, muss ich den cluster angeben, wo die datei anfängt( den krieg ich mit fat_search_file raus), den buffer wo der cluster gespeichert werden soll und den block, der gespeichert werden soll.
ich hab noch ne frage zu fat_search_file: ich versteh nicht, was ich in der variable unsigned int *Cluster angeben muss.
mfg roboman
...and always remember...
...AVR RULES...
Ich hab die FAT-Libs von Roland Riegel. Da kann ich mit dem Read-Befehl auswählen, wie viele Bytes ich haben will.
Zum Anzeigen von Bildern auf nem GLCD hol ich mir auch nur die einzelnen Bytes nacheinander und dübel die aufs Display.
Vorteil: Kein extra Puffer nötig.
Nachteil: Bildaufbau durch "Langsame" Karte sichtbar.
#ifndef MfG
#define MfG
Der * in dieser Definition zeigt, dass es ein Pointer ist, d.h. die Funktion ist in der Lage, diese Variable zu füllen (d.h. zu schreiben) und nicht nur zu lesen. Ergo steht in dieser Variable nach dem Ausführen der Funktion der gesuchte Cluster. Dafür musst Du das aber mit '&' aufrufen, um den Pointer und nicht die Variable selbst zu übergeben:Zitat von Roboman93
Code:char cluster = 0; fat_search_file(..., &cluster, ...); if (cluster > 0) // AHA! Der gesuchte Cluster!
@Jaecko:
Danke für den Tipp, werd ich mir merken. Puffer sind eh immer ein Problem auf µC.
Lesezeichen