Forum: Mikrocontroller und Digitale Elektronik AVR SD Lib von R.Riegel Probleme


von Alex (Gast)


Lesenswert?

Hallo zusammen,

In meinem GPS Tracker hatte ich bisher die Version 2009-03-30 der SD Lib 
von Roland Riegel problemlos verwendet.
Ich habe einen ATmega32 @ 16MHz.
Die GPS Daten werden in 512 Byte "Blöcken" auf die SD Karte geschrieben.

Gestern habe ich auf die aktuelle Version geupdated (2011-04-23), 
seitdem habe ich folgendes Problem:

Schiebe ich die SD Karte in einen PC, wird die geschriebene Datei 
(*.txt) angezeigt mit richtigem Zeitstempel und Größe, aber wenn ich sie 
öffne ist KEIN Inhalt zu sehen.

Ich habe daraufhin in der FAQ von Roland Riegel folgenden Punkt 
gefunden:
"Writing to the card returns no failure, but when checking the file's 
content the data is not there. What happens?

For performance reasons, writing to the card is always buffered. Before 
pulling the card out of its socket (or issuing a reset of the MCU), make 
sure sd_raw_sync() gets called such that all buffered data is written 
out to permanent card storage."

Also habe ich sd_raw_sync() nach jedem aufruf von fat_write_file() 
aufgerufen. Das Fehlerbild bleibt aber das gleiche.

Hier ein Auszug meines Codes:
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
  while(check != 1)
16
  {
17
    const char filename[LENGTH_FILENAME] = {'D', 'a', 't', 'a', filenr[2] + 48, filenr[1] + 48, filenr[0] + 48, '.', 't', 'x', 't'};
18
    check = fat_create_file(dd, filename, &directory);
19
    filenr[0]++;
20
    if(filenr[0] == 10) {
21
      filenr[0] = 0;
22
      filenr[1]++;
23
    }
24
25
    if(filenr[1] == 10) {
26
      filenr[0] = filenr[1] = 0;
27
      filenr[2]++;
28
    }
29
    // Abbruch von Schleife falls keine Karte drin
30
    if(filenr[2] == 10)
31
      break;
32
  }
33
34
  // open file
35
  struct fat_file_struct* filehandle;
36
  filehandle = fat_open_file(fs, &directory);
37
  
38
  /* Endlosschleife */
39
  while(1)
40
  {
41
    GetGPSData(&sync, &no_saved_sdlines, &newdata, filehandle);
42
    sd_raw_sync();
43
  }

in GetGPSData wird dann noch fat_write_file() aufgerufen.


Hat jemand eine Idee was hier schiefläuft?

Vielen Dank schon mal an alle

von Alex (Gast)


Lesenswert?

Hat niemand eine Idee?
Fehlen euch noch Infos?

von Alex (Gast)


Lesenswert?

hoch damit ;)
Bin am verzweifeln... hat niemand ähnliche Problem mit der Lib ?

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.