Hallo,
ich nutze in einem Projekt einen STM32F413VGT6 und möchte gerne sowohl CDC als auch MSD gleichzeitig nutzen. Geht das? In der IDE kann ich nur eines zur Zeit auswählen.
Danke!
|
Anzeige
|
STM32CubeIDE USB mehrere EndpunkteHallo, ich nutze in einem Projekt einen STM32F413VGT6 und möchte gerne sowohl CDC als auch MSD gleichzeitig nutzen. Geht das? In der IDE kann ich nur eines zur Zeit auswählen. Danke!
Geht schon, aber eben leider nicht mit CubeMX.
Das geht so halb - man kann sich mit CubeMX ein Projektsetup für eine Klasse generieren, den erzeugten Code rauskopieren, dann die andere Klasse auswählen, wieder den Code rauskopieren, und dann wieder keine Klasse auswählen. Dann den zuvor gesicherten Code wieder reinkopieren. Natürlich muss man dann die beiden Klassen unter einen Hut bringen und entsprechend registrieren. Nicht wirklich straight-forward.
Stimmt nicht ganz, es gibt eine Composite Device Implementierung: https://github.com/alambe94/I-CUBE-USBD-Composite Die funktioniert an sich, meine Erfahrung war aber, dass beispielsweise die USB CDC Klasse zumindest in Kombination mit MSC nicht ganz zuverlässig funktioniert.
Genau so! Aber das ist alles Andere als trivial.
Jup! Ein ähnlicher Eiertanz ist nötig wenn man eine eigene "vendor specific" Klasse umsetzen möchte. Echt ärgerlich, weil das wäre in CubeMX sehr einfach umsetzbar, die Library unterstützt es sowieso, aber ST macht es unnötig kompliziert. Wollte eigentlich mal nen Artikel schreiben wie das geht, aber die liebe Zeit... PS: Das ist doch garantiert wieder kein echtes Speichermedium, und der CDC-ACM mappt nicht auf ein echtes 56k-Analogmodem, da werden doch bestimmt wieder Standard-Klassen für was anwendungsspezifisches missbraucht - vielleicht wäre es sinnvoller ein ganz eigenes anwendungsspezifisches Protokoll umzusetzen? Seit Win7 braucht man dazu keine Treiber mehr. Also entnehme ich den Antworten, dass es irgendwie hinbekommen muss beiden generierten Code von CDC und MSD gleichzeitig laufen zu lassen.
Ja es geht schon, grundsätzlich. Ich hatte mal ein Composit-Device mit CDC, HID Tastatur und HID Maus gemacht, was schlussendlich super funktioniert hat. Aber das hat mich viele Tage herumdoktern gekostet. Das Hauptproblem waren die verschiedenen USB-Deskriptoren, welche man zusammenführen muss und exakt stimmen müssen, denn sonst werden die Geräte/Endpoints dann beim einstecken nicht erkannt. In den USB-Deskriptoren ist alles sehr generisch aufgebaut, was zwar eine riesen Flexibilität ermöglicht, aber es auch sehr kompliziert macht. https://www.beyondlogic.org/usbnutshell/usb5.shtml
Jup. Erzähl doch mal mehr darüber was du genau machen möchtest. PS: Witzig ist dass auch der ST-Link mehrere Geräteklassen unterstützt, dessen Code können die also auch nicht per CubeMX generieren...
Ja, insbesondere die IAD-Deskriptoren um ein Composite-Device zu erstellen.
Ich möchte eine CDC und ein MSC(SD) gleichzeitig betreiben. Ich habe jetzt bei Klassen nacheinander mit CubeMX generiert und den Code in mein Projekt eingefügt und alles wetwas umbenannt, so dass ich beide Klassen nacheinander nutzen kann. Jetzt müsste ich beide kombinieren.
Beim CDC ist noch gut zu wissen, dass der aus drei Endpoints besteht; einer zum senden von Daten, einer zum empfangen von Daten und einer für Kontrolldaten. Dieses Tool wird dir helfen um deine Descriptoren auf Windows zu überprüfen, bzw. siehst du damit wie es geht: Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|