Forum: Mikrocontroller und Digitale Elektronik FatFS: fopen fehler nach "f_findfirst"


von FCF (Gast)


Lesenswert?

Hallo zusammen,
FatFS mit STM32 und USB-Stick geht reibungslos solange der Dateiname in 
der Firmware festcodiert ist (E511.DAT). Wenn ich aber anhand von 
"f_findfirst" beliebige Datei mit der Endung ".DAT" suche und danach 
versuche diese zu öffnen, scheitert die Funktion "f_open".
wo liegt der Fehler? muss irgendwas zwischen f_findfirst und f_open 
geschehen? reinitialisiert?
Danke für eure Hilfe.
Gruß

      fr = f_findfirst(&dp, &fno, "", "*.DAT");
      if (fr == FR_OK && fno.fname[0])
          strcpy(file_ndesc[0].file_name, fno.fname);
      ....

      if(f_open(&fp,file_ndesc[0].file_name,FA_READ)==FR_OK)
      {
         printf("Ok");
      }
      else
      {
         printf("Fehler");
      }

von FCF (Gast)


Lesenswert?

oder andersrum formuliert, was ist zu beachten wenn "f_findfirst()" von 
FatFS verwendet wird? in der Online-Doku bin ich nicht schlauer 
geworden.
Danke

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Vermutlich musst Du das von f_findfirst verwendete "directory object" 
(wird als erster Parameter an f_findfirst übergeben, bei Dir also "dp") 
auch wieder schließen.

Das geschieht mit f_closedir.

Siehe Beispielcode:
http://elm-chan.org/fsw/ff/doc/findfirst.html

von FCF (Gast)


Lesenswert?

Erstmal Danke Rufus für die Antwort.
ich habe f_closedir schon danach aufgerufen. Leider hat nichts gebracht.
Ein anderer Vorschlag vielleicht?
Danke.

      fr = f_findfirst(&dp, &fno, "", "*.DAT");
      if (fr == FR_OK && fno.fname[0])
          strcpy(file_ndesc[0].file_name, fno.fname);


      if(f_open(&fp,file_ndesc[0].file_name,FA_OPEN_EXISTING)==FR_OK)
      {
         printf("Ok");
      }
      else
      {
         printf("Fehler");
      }

      f_closedir(&dp);

von FCF (Gast)


Lesenswert?

wenn ich debugge finde ich in den tiefen "Dschungel" von FatFS einen 
Rückgabefehler RES_NOTRDY beim Aufruf voin disk_read(....). Ist es ein 
Hindweis auf Timming fehler oder lege ich falsch?
Danke für eure Hilfe.
Gruß

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.