SD Lib Roland Riegel Datei leer nach schreiben

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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.