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!
:
Bearbeitet durch User
Ada J. Quiroz schrieb: > möchte gerne sowohl > CDC als auch MSD gleichzeitig nutzen. Geht das? Geht schon, aber eben leider nicht mit CubeMX.
Harald L. schrieb: > 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.
Harald L. schrieb: > Geht schon, aber eben leider nicht mit CubeMX. 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.
Niklas G. schrieb: > 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. Genau so! Aber das ist alles Andere als trivial.
Harald L. schrieb: > 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.
:
Bearbeitet durch User
Also entnehme ich den Antworten, dass es irgendwie hinbekommen muss beiden generierten Code von CDC und MSD gleichzeitig laufen zu lassen.
Ada J. Quiroz schrieb: > 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
Ada J. Quiroz schrieb: > Also entnehme ich den Antworten, dass es irgendwie hinbekommen > muss > beiden generierten Code von CDC und MSD gleichzeitig laufen zu lassen. 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... Johnny B. schrieb: > Das Hauptproblem waren die verschiedenen USB-Deskriptoren, welche man > zusammenführen muss Ja, insbesondere die IAD-Deskriptoren um ein Composite-Device zu erstellen.
Niklas G. schrieb: > Jup. Erzähl doch mal mehr darüber was du genau machen möchtest. 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.
Ada J. Quiroz schrieb: > eine CDC 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.
:
Bearbeitet durch User
Dieses Tool wird dir helfen um deine Descriptoren auf Windows zu überprüfen, bzw. siehst du damit wie es geht: https://www.uwe-sieber.de/usbtreeview.html
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.