Hallo Profis,
ich habe eben wieder mal ein Problem und scheine damit der einzige Dödel
auf der Welt zu sein :-(
Ich benutze die MMC-Lib von :
http://www.mikrocontroller.net/articles/AVR_FAT32
und kann damit prima Dateien anlegen, schreiben, lesen.
Jetzt wollte ich auch mal dieses "fat_getFreeBytes()" probieren und das
Teil liefert beim mir immer nur 0.
Wenn ich danach google, dann bekomme ich tatsächlich nur 8 Treffer und
alle haben damit nichts zu tun.
Hardware ist ein ATMega2561V, mit 8MHz --> Siehe:
Beitrag "Re: Atmega128 startet immer neu"
Die Funktion dauert grob 2 Sekunden und dann ist der return Wert eben
immer 0.
Die MMC config sieht so aus:
1 | // schalter die den funktionsumfang aendern bzw, den funktionsumfang einiger funktionen :)
|
2 | #define MMC_WRITE TRUE
|
3 | #define MMC_OVER_WRITE TRUE
|
4 | #define MMC_MULTI_BLOCK FALSE
|
5 | #define MMC_ENDIANNESS_LITTLE TRUE
|
6 | #define MMC_LFN_SUPPORT TRUE
|
7 | #define MMC_RM_FILES_ONLY TRUE
|
8 |
|
9 | // schalter die explizit funktionen mit kompilieren oder nicht!
|
10 | #define MMC_TIME_STAMP TRUE
|
11 | #define MMC_RM FALSE
|
12 | #define MMC_SEEK TRUE
|
13 | #define MMC_MKDIR TRUE
|
14 | #define MMC_GET_FREE_BYTES TRUE
|
15 | #define MMC_LS FALSE
|
16 | #define MMC_CD TRUE
|
17 | #define MMC_FILE_EXSISTS TRUE
|
18 | #define MMC_WRITE_STRING TRUE
|
19 | #define MMC_WRITEN FALSE
|
Also quasi (fast alles) enabled.
Mein Testcode sieht dann so aus:
1 | char puffer[25]; // 20+1 needed
|
2 | uint64_t nFree = 0;
|
3 |
|
4 | CountDown.sec.MMC_Timer = 3;
|
5 | while ((CountDown.sec.MMC_Timer > 0) && (FALSE == bInitDone))
|
6 | {
|
7 | bInitDone = mmc_init();
|
8 | }
|
9 |
|
10 | // Could the MMC card be initialized, or occurred a TimeOut
|
11 | if (FALSE == bInitDone)
|
12 | {
|
13 | SignalErrorCode(ERROR_CODE_MMC_NOT_INITIALIZED);
|
14 | while (1) {;}
|
15 | }
|
16 |
|
17 | // Try to load FAT file system
|
18 | if(FALSE == fat_loadFatData())
|
19 | {
|
20 | SignalErrorCode(ERROR_CODE_FAT_NOT_LOADED);
|
21 | while (1) {;}
|
22 | }
|
23 |
|
24 | nFree = fat_getFreeBytes();
|
25 |
|
26 | uint64toa( nFree, puffer, 10 );
|
27 |
|
28 | uart_puts("Freie Bytes: ");
|
29 | uart_puts(puffer);
|
30 | while(1) {;}
|
Die Ausgabe ist dann eben immer: "Freie Bytes: 0"
Wenn ich statt der Funktion ein "nFree = 17179869184" mache, dann kommt
auch "Freie Bytes: 17179869184".
Diese uint64toa ist auch hier aus dem Forum:
Beitrag "Re: uint64_t nach char[]"
Gibt es eine gewisse Reihenfolge, die ich einhalten muss oder was läuft
da schief? Hat hier schon mal jemand das Problem gehabt?
Ich benutze übrigens eine komplett leere 1GB SD-Karte mit Fat16.
Viele Grüße,
Michael