Forum: Mikrocontroller und Digitale Elektronik SD Lib Roland Riegel Datei leer nach schreiben


von Alex K. (derheld2k1)


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.

von Torsten S. (tse)


Lesenswert?

Probier mal nach einem Schreibvorgang

sd_raw_sync();

von Alex K. (derheld2k1)


Lesenswert?

Torsten S. schrieb:
> Probier mal nach einem Schreibvorgang
>
> sd_raw_sync();

Das Problem besteht weiterhin

Die SD Karte ist übrigens 2GB groß und funktioniert nachweislich.

von Torsten S. (tse)


Lesenswert?

Bei mir gehts. Teste mal

#define FAT_DELAY_DIRENTRY_UPDATE 0

von Alex K. (derheld2k1)


Lesenswert?

> #define FAT_DELAY_DIRENTRY_UPDATE 0

War bereits so eingestellt

von Alex K. (derheld2k1)


Lesenswert?

Auch wenn ich das Puffern ausschalte:

#define SD_RAW_WRITE_BUFFERING 0

besteht das Problem weiterhin

von Torsten S. (tse)


Lesenswert?

Merkwürdig. Vielleicht weils ne SDHC ist
#define SD_RAW_SDHC 1

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Im 8.3 Format muss der Dateiname komplett aus Großbuchstaben bestehen.
Sonst zickt win wenns auf der SD Karte liegt.

Dei Datei zu schließen wär jedenfalls auch nicht schlecht =P

von Alex K. (derheld2k1)


Lesenswert?

Torsten S. schrieb:
> Merkwürdig. Vielleicht weils ne SDHC ist
> #define SD_RAW_SDHC 1

Das hat leider auch nicht geholfen

von Alex K. (derheld2k1)


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...

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
Noch kein Account? Hier anmelden.