SD Lib Roland Riegel Datei leer nach schreiben

#2681054
Lesenswert?

Hallo zusammen,

ich verwende die Lib von Roland Riegel (aktuelle Version) und schreibe 
damit auf eine SD Karte.

Hier die Initialisierung:
1
/* Initialisieren der SD Karte */
2
  sd_raw_init();
3
  // open first partition 
4
  struct partition_struct* partition = partition_open(sd_raw_read, sd_raw_read_interval, sd_raw_write, sd_raw_write_interval, 0);
5
  
6
    // open file system 
7
    struct fat_fs_struct* fs = fat_open(partition);
8

9
    // open root directory
10
  struct fat_dir_entry_struct directory;
11
    fat_get_dir_entry_of_path(fs, "/", &directory);
12
    struct fat_dir_struct* dd = fat_open_dir(fs, &directory);
13

14
  // create file in root dir
15
    const char filename[LENGTH_FILENAME] = {'D', 'a', 't', 'a', '.', 't', 'x', 't'};
16
    check = fat_create_file(dd, filename, &directory);
17

18
  // open file
19
  struct fat_file_struct* filehandle;
20
  filehandle = fat_open_file(fs, &directory);

Das schreiben läuft wie folgt:
1
uint8_t sdbuffer[LENGTH_BUFFER_SDWRITE] = {'x'}; 
2
fat_write_file(filehandle, sdbuffer, LENGTH_BUFFER_SDWRITE);

Die Datei wird allerdings nie geschlossen, sondern es wird irgendwann 
die Versorgungspannung von µC und SD getrennt.

Wenn ich nun die Datei am Rechner anschauen will, wird mir zwar im Total 
Commander der Dateinamen und auch die Dateigröße korrekt angezeigt, aber 
wenn ich die Datei öffnen will, dann erscheint die Fehlermeldung "Datei 
nicht gefunden".

Wenn ich die SD Karte im Windows Explorer anschaue, dann wird auch 
Dateiname und Größe korrekt angezeigt, beim öffnen erscheint dann aber 
eine leere txt Datei.

Hat jemand eine Idee was falsch läuft? Danke schonmal an alle

µC ist ein Atmega324@16MHz bei 3,3V, SD Karte hängt ohne Spannungsteiler 
am SPI.
#2681175
Lesenswert?

Martin Wende schrieb:
> Im 8.3 Format muss der Dateiname komplett aus Großbuchstaben bestehen.
> Sonst zickt win wenns auf der SD Karte liegt.
Juhu, das wars.... !!!
DANKE!!!!!!!!

Meine Einstellungen sind nun:

#define FAT_LFN_SUPPORT 0
#define FAT_DELAY_DIRENTRY_UPDATE 0
#define SD_RAW_SDHC 0
#define SD_RAW_WRITE_BUFFERING 1

und ein sd_raw_sync(); nach jedem schreiben.

Danke euch, ihr habt meinen Tag gerettet...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren