Forum: Mikrocontroller und Digitale Elektronik Kann keine datei auf sd card estellen


von herrmann (Gast)


Lesenswert?

Hallo

Habe die libs von Roland Regel und kann die sd card im fat 16 lesen aber 
nicht schreiben

struct partition_struct* partition = partition_open(sd_raw_read,
                                                        sd_raw_read_interval,
                                                        sd_raw_write,
                                                        sd_raw_write_interval,
                                                        0
                                                       );

    if(!partition)
    {
        /* If the partition did not open, assume the storage device
         * is a "superfloppy", i.e. has no MBR.
         */
        partition = partition_open(sd_raw_read,
                                   sd_raw_read_interval,
                                   sd_raw_write,
                                   sd_raw_write_interval,
                                   -1
                                  );
        if(!partition)
        {

            uart_puts_p(PSTR("opening partition failed\n"));
return(0);

        }
    else
    {
       uart_puts_p(PSTR("opening partition OK\n"));
}
}
  struct fat16_fs_struct* fs = fat16_open(partition);
    if(!fs)
    {

        uart_puts_p(PSTR("opening filesystem failed\n"));

    }
  else
  {
  uart_puts_p(PSTR("opening filesystem OK\n"));


  }

    /* open root directory */
    struct fat16_dir_entry_struct directory;
    fat16_get_dir_entry_of_path(fs, "/", &directory);

    struct fat16_dir_struct* dd = fat16_open_dir(fs, &directory);
    if(!dd)
    {

        uart_puts_p(PSTR("opening root directory failed\n"));


    }
  else
  {
        uart_puts_p(PSTR("opening root directory OK\n"));

  }


  struct fat16_dir_entry_struct dir_entry;
            while(fat16_read_dir(dd, &dir_entry))
            {
                uint8_t spaces = sizeof(dir_entry.long_name) - 
strlen(dir_entry.long_name) + 4;

                uart_puts(dir_entry.long_name);
                uart_putc(dir_entry.attributes & FAT16_ATTRIB_DIR ? '/' 
: ' ');
                while(spaces--)
                    uart_putc(' ');
                uart_putdw_dec(dir_entry.file_size);
                uart_putc('\n');
            }

  struct fat16_dir_entry_struct file_entry;
            if(!fat16_create_file(dd,"test.txt", &file_entry))
            {
                uart_puts_p(PSTR("error creating file: "));
                 uart_putc('\n');
            }
      else
      {
               uart_puts_p(PSTR("ok creating file: "));
                 uart_putc('\n');


      }      }

ales ergebnis kommt ok creating file.

aber auf der sd ist nichts drauf.

von Latissimo (Gast)


Lesenswert?

blöde frage, aber muss man ja auch ausgrenzen:

Ist die Karte schreibgeschützt? Also ich meine hardware-mäßig?

von herrmann (Gast)


Lesenswert?

Hallo

nein karte ist nichtt schreibgeschützt.
Ist die definition des dateinamens so wie oben koreckt???

Liegt es daran???

Den ich bekomme keinen Fehler zurückgeliefert.
Kann er den dateinamen nicht auswerten und legt einen leeren dateinamen 
an denn sieht man ja nicht.


Danke

von Pete K. (pete77)


Lesenswert?

Schau mal im Headerfile nach. Da gibt es m.W. einen Schalter für 
read-only.

von herrmann (Gast)


Lesenswert?

hallo

also wenn du das meinst

#define FAT16_WRITE_SUPPORT 1

ist auf eins.

wat nun??

gibt es noch andere gute fat16 implementationen???


danke

von Tilo (Gast)


Lesenswert?

Ich finde das hier ist ganz brauchbar:
http://elm-chan.org/fsw/ff/00index_e.html

Kann sogar FAT32. Läuft auf meinem ARM7 ohne Probleme.
Zu anderen uCs kann ich nichts sagen.

von herrmann (Gast)


Lesenswert?

mir ist aufgefallen wenn ich die obige funktion 2 mal aufrufe schreibt 
er die test.txt warum????


wenn ich die test.txt ins / verzeichniss mit dem pc schreibe und nur 
einmal die funktion aufrufe dann kommt kein fehler das die datei schon 
vorhanden ist erst wenn ich die obige funktion wieder zweimal aufrufe
ist schon komisch..

von herrmann (Gast)


Lesenswert?

Habe noch herausgefunden das ich ein Verzeichniss ertsellen kann wenn 
ich darin eine datei erzeugen will kommt kein fehler aber ich sehe diese 
datei nicht und das blöde ist ich kann das verzeichniss am pc nicht 
löschen da es nicht leer ist da muß doch was sein aber wo????

Danke

von herrmann (Gast)


Lesenswert?

Habe noch eins gefunden aber ich begreife nicht warum es so ist.

ich muß nach dem ich die Partition schließe die Partition noch mal 
öffnen und schleißen danach ist die datei auf der SD card.

wenn ich die Partition nicht nochmal öffne dann wird die datei nicht 
erzeugt.

warum weiß ich nicht????


Aber so gehts erstmal.


Danke

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.