Forum: Mikrocontroller und Digitale Elektronik STM32CubeIDE USB mehrere Endpunkte


von Ada J. Quiroz (inschnier)


Lesenswert?

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
von Harry L. (mysth)


Lesenswert?

Ada J. Quiroz schrieb:
> möchte gerne sowohl
> CDC als auch MSD gleichzeitig nutzen. Geht das?

Geht schon, aber eben leider nicht mit CubeMX.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Kevin M. (arduinolover)


Lesenswert?

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.

von Harry L. (mysth)


Lesenswert?

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.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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
von Ada J. Quiroz (inschnier)


Lesenswert?

Also entnehme ich den Antworten, dass es irgendwie hinbekommen muss 
beiden generierten Code von CDC und MSD gleichzeitig laufen zu lassen.

von Johnny B. (johnnyb)


Lesenswert?

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

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Ada J. Quiroz (inschnier)


Lesenswert?

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.

von Johnny B. (johnnyb)


Lesenswert?

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
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

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
Noch kein Account? Hier anmelden.