Moin und Guten Tag an alle Leser, ich komme momentan bei meinem Projekt nicht weiter und benötige Hilfe! Es geht um folgendes: Ich habe eine eigene Platine mit einem STM32F205RET6 entworfen, auf dem eine microSD Karte per SPI mit dem Controller verbunden ist. Des Weiteren habe ich eine USB Schnittstelle für die Verbindung zum PC. Da ich wenig Erfahrung mit STM32 habe, habe ich das Programm mit CubeMX angefangen und bin der folgenden Anleitung zum Lesen/Schreiben von/auf der SD Karte gefolgt: https://blog.naver.com/eziya76/221188701172 Auf diese Weise bin ich nun so weit, dass ich .txt Dateien (Messdaten) wie gewünscht auf der SD Karte ablegen kann. Nun fehlt mir aber die USB Massenspeicherfunktion um direkt per USB-A Stecker auf die SD Karte zugreifen zu können, ich brauche quasi einen integrierten SD Kartenleser. In CubeMX habe ich unter dem Reiter USB_OTG_FS Device_Only vorkonfiguriert und und unter dem Reiter USB_DEVICE die Mass Storage Class. In der durch CubeMX generierten Datei usbd_storage_if.c habe ich die STORAGE_GetCapacity_FS Funktion erfolgreich angepasst, die STORAGE_Read_FS/STORAGE_Write_FS Funktionen scheinen leider nicht zu funktionieren und ich denke das genau hier das Problem liegt. Wenn ich die Platine an meinen Rechner stecke, erscheint das "Laufwerk muss formatiert werden" Fenster. Wenn ich dann weiter klicke erscheint im Formatieren Fenster sogar die korrekte Kartenkapazität. Wenn ich aber dann auf Formatieren klicke dauert es eine Weile bis es letztendlich zu einer Fehlermeldung kommt. Ich habe dann stundenlang verschiedene Beiträge gelesen und immer wieder andere Ansätze getestet, leider ohne Erfolg. Es scheint mir so als gäbe es im ganzen Internet einfach kein Lösungsbeispiel um eine SD Karte via SPI per USB zu lesen, deswegen nun dieser Beitrag. Am liebsten wäre mir eine einfache Lösung in der usbd_storage_if.c. Ich bin für jede Hilfe dankbar.
:
Bearbeitet durch User
Du kannst nicht parallel mit dem µC und per USB auf der Karte arbeiten. Ein einfaches nutzen der SD Karte als "USB Stick" müsste sogar bei den Beispielen von ST dabei sein.
Mike R. schrieb: > Du kannst nicht parallel mit dem µC und per USB auf der Karte arbeiten. Ich möchte ja gar nichts parallel machen, ich möchte entweder Messwerte aufnehmen und diese auf der Karte speichern, ODER mich per USB mit dem PC verbinden um die Daten von der Karte zu lesen. >Ein einfaches nutzen der SD Karte als "USB Stick" müsste sogar bei den >Beispielen von ST dabei sein. Habe nichts gefunden für die Verbindung via SPI..
:
Bearbeitet durch User
Anscheinend glaubst du, man könne sich funktionierende Programme einfach so zusammen klicken und sie würden dann schon ganz alleine das tun, was du gerne hättest. So läuft das aber nicht. Im Prinzip hast du nun zwei halbfertige Schnittstellen von Cube MX bekommen: 1) Für den Zugriff auf die SD Karte 2) Für die Verbindung zum PC Jetzt musst du aber die Verbindung dazwischen selbst programmieren. Das wird CubeMX mit Sicherheit nicht automatisieren.
moin, der PC legt auf der SD z.B. ein FAT32 an, nur damit kann er arbeiten. Der MC kann bei Dir nur Blockzugriffe von 512 Bytes, nix mit FAT32. Das musst Du dem MC beibringen.
Pieter schrieb: > moin, > > der PC legt auf der SD z.B. ein FAT32 an, nur damit kann er arbeiten. > Der MC kann bei Dir nur Blockzugriffe von 512 Bytes, nix mit FAT32. > Das musst Du dem MC beibringen. Ein FAT32 Treiber ist aber IMHO unter "Middlewares" in Cube MX enthalten (fatfs). Nur wird der nicht automatisch mit dem Mass-Storage USB Treiber verbunden.
Wie sieht den z.B. deine Funktion
1 | SD_disk_write(1,buf,blk_addr,blk_len); |
denn aus mit der du versuchst Daten auf die Karte zu schreiben?
>Anscheinend glaubst du, man könne sich funktionierende Programme einfach >so zusammen klicken und sie würden dann schon ganz alleine das tun, was >du gerne hättest. Nein, ich glaube nicht das man so einfach jedes Problem lösen kann, aber einige eben schon. Wenn du gerne jede Zeile selber schreibst ist das ja ok. Ich verwende gerne libs oder code beispiele in meinen Projekten um Zeit zu sparen. > Ein FAT32 Treiber ist aber IMHO unter "Middlewares" in Cube MX enthalten > (fatfs). Nur wird der nicht automatisch mit dem Mass-Storage USB Treiber > verbunden. Ja ganz genau da liegt doch mein Problem, fatfs funktioniert, ich kann ja auch schon Daten auf der SD Karte ablegen, diese dann in einen Card Reader stecken und am PC anschauen. Es geht mir hier wirklich nur um die Verbindung zum Mass-Storage USB Treiber.
Freddy M. schrieb: > Ich verwende gerne libs oder code beispiele in meinen Projekten um Zeit > zu sparen Mein Chef benutzt gerne das Wort "Glue-Code". Wir benutzen so weit wie möglich fertige Bibliotheken und schreiben nur den "Glue-Code" dazwischen. Ganz so einfach ist es natürlich nicht, aber es verdeutlicht schon, wie sich die Softwareentwicklung in den vergangenen 50 Jahren verändert hat. Wenn der PC auf die SD Karte zugreift, musst den fatfs Treiber "abmelden". Ich denke/hoffe das war dir bereits klar.
Mike R. schrieb: > Wie sieht den z.B. deine Funktion >
1 | > SD_disk_write(1,buf,blk_addr,blk_len); |
2 | >
|
> denn aus mit der du versuchst Daten auf die Karte zu schreiben? Ich habe die Datei mal angehängt. Sie stammt allerdings wie oben beschrieben nicht von mir sondern von: https://blog.naver.com/eziya76/221188701172
Stefan ⛄ F. schrieb: > Freddy M. schrieb: >> Ich verwende gerne libs oder code beispiele in meinen Projekten um Zeit >> zu sparen > > Mein Chef benutzt gerne das Wort "Glue-Code". Wir benutzen so weit wie > möglich fertige Bibliotheken und schreiben nur den "Glue-Code" > dazwischen. Und genau das fehlt hier, der Code, der die funktionierenden SD Karten Routinen mit dem USB MSC verbindet. Dafür muss man aber die Interfaces der beiden Bibliotheken verstehen um den passenden Code zu schreiben, oder Glück haben, dass jemand schon vorher genau diese beiden verheiratet hat.
Auf den ersten Blick sehen die Routinen und die Verbindung nicht komplett falsch aus. Vielleicht solltest du mal die Rückgabewerte der SD_* Funktionen auswerten um zu sheen, ob die denn tatsächlich erfolgreich ausgeführt werden. Und eine weitere Frage: Wie ist USB_OK definiert?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.