Forum: Mikrocontroller und Digitale Elektronik STM32 FatFS + USB-Stick


von Michael S. (Gast)


Lesenswert?

Hi Leute,
ich habe mir mit CubeMX ein Projekt zusammengebaut und darin auch den 
USB-Host und FatFS eingebunden.
Leider finde ich weder Doku noch vollständige Beispiele, wie man diese 
beiden zusammen verwendet.
Wenn ich einen Stick einstecke, wechselt der State des USB-Hosts im 
User-Process auf HOST_USER_CONNECTION.

Prinzipiell scheint der Stick also erkannt zu werden.

Wenn ich daraufhin im Main-Loop
1
if(FATFS_LinkDriver(&USBH_Driver, mynewdiskPath) == 0)
2
{
3
  if(f_mount(&mynewdiskFatFs, (TCHAR const*)mynewdiskPath, 0) == FR_OK)
4
  {
5
    test=f_open(&MyFile, "STM32.TXT", FA_CREATE_ALWAYS | FA_WRITE);
6
    if( test == FR_OK)
7
    {
8
      if(f_write(&MyFile, wtext, sizeof(wtext), (void *)&wbytes) == FR_OK);
9
      {
10
  f_close(&MyFile);
11
      }
12
    }
13
  }
14
}
ausführe, endet das f_open mit dem Fehler FR_DISK_ERR.

Was mache ich falsch? Kennt jemand ein vollständiges 
Implementierungsbeispiel?
Ich habe mich bei obigem an das Beispiel aus
http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105259.pdf
gehalten.

Irgendwas wichtiges scheint aber noch zu fehlen.

Jemand eine Idee?

Michael

von Jim M. (turboj)


Lesenswert?

Das ist auch ein Stick <= 32 GB mit FAT32? Größere Sticks haben mitunter 
kein FAT Dateisystem.

von Peter II (Gast)


Lesenswert?

Jim M. schrieb:
> Das ist auch ein Stick <= 32 GB mit FAT32? Größere Sticks haben mitunter
> kein FAT Dateisystem.

doch haben sie, exFat ist für größer Sticks als Standard vorgeschrieben,

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Peter II schrieb:
> Jim M. schrieb:
>> Das ist auch ein Stick <= 32 GB mit FAT32? Größere Sticks haben mitunter
>> kein FAT Dateisystem.
>
> doch haben sie, exFat ist für größer Sticks als Standard vorgeschrieben,

Seit wann ist denn exFat ein FAT Dateisystem? Außer 3 Buchstaben im 
Namen haben sie wenig bis nichts gemein.

von Michael S. (Gast)


Lesenswert?

Hi,
es ist ein Stick <32GB mit FAT. Dieser Stick funktioniert an einem 
anderen Gerät mit STM32 mit USB und FatFs einwandfrei.
Da an diesem älteren Gerät aber Probleme mit anderen Sticks auftauchen, 
möchte ich den USB-Teil komplett neu aufsetzen und die HAL-Treiber 
verwenden.

Bisher scheitere ich.

Michael

von Peter II (Gast)


Lesenswert?

Frank M. schrieb:
> Seit wann ist denn exFat ein FAT Dateisystem? Außer 3 Buchstaben im
> Namen haben sie wenig bis nichts gemein.

naja und der FAT Tabelle.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> doch haben sie, exFat ist für größer Sticks als Standard vorgeschrieben,

Nein, das ist nicht "vorgeschrieben". Microsoft hätte das gerne so, aber 
FAT32 lässt sich auch bei deutlich größeren USB-Massenspeichern 
verwenden. Auch mit Windows; lediglich das Formatieren bzw. Anlegen der 
Partitionen verweigern die Windows-Bordmittel.

Eine Vorschrift von exFAT im Standard gibt es hingegen bei SDXC-Karten, 
die müssen damit formatiert sein (so wie SDHC-Karten mit FAT32 und 
SD(SC)-Karten mit FAT16 formatiert sein müssen).

von Peter II (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Eine Vorschrift von exFAT im Standard gibt es hingegen bei SDXC-Karten,
> die müssen damit formatiert sein (so wie SDHC-Karten mit FAT32 und
> SD(SC)-Karten mit FAT16 formatiert sein müssen).

das meinte ich doch

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> das meinte ich doch

Es war von USB-Sticks die Rede.

von Michael S. (Gast)


Lesenswert?

Ich habe inzwischen rausgefunden, dass sich der State in der 
User_Process einige Sekunden nach dem Einstecken nochmal ändert auf 
HOST_USER_CLASS_SELECTED.

Ich habe versucht, obigen Code erst auszuführen, wenn sich der USB-Host 
in diesem State befindet. Das resultiert aber leider im gleichen Fehler.

Ist jemand beim ergoogeln eines Beispiel-Codes erfolgreicher als ich?

Grüße
  Michael

von Jim M. (turboj)


Lesenswert?

Peter II schrieb:
> Jim M. schrieb:
>> Das ist auch ein Stick <= 32 GB mit FAT32? Größere Sticks haben mitunter
>> kein FAT Dateisystem.
>
> doch haben sie, exFat ist für größer Sticks als Standard vorgeschrieben,

In welchem Standard (Quelle)? Wir reden von USB Sticks, nicht von SD 
Karten.

von esTem32 (Gast)


Lesenswert?

Michael S. schrieb:
> dass sich der State in der
> User_Process einige Sekunden nach dem Einstecken nochmal ändert auf
> HOST_USER_CLASS_SELECTED.

Der Thad ist zwar schon etwas älter, aber vielleicht hilft es trotzdem 
jemanden.

Der State HOST_USER_CLASS_SELECTED bedeutet, dass eine gültige 
Device-Class gefunden wurde. Anschließend wird aber der "Treiber" für 
die jeweilige Klasse vom USB-Stack noch initialisiert. Das kann 
teilweise mehrere Sekunden dauern (ich habe einen USB-Stick der ~10 
Sekunden braucht).
Erst wenn der State HOST_USER_CLASS_ACTIVE erreicht ist, kann das 
USB-Device richtig verwendet werden. Dann sollte auch das Mounten gehen, 
wenn du ein gültiges Dateisystem hast.

LG

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.