4xCDC+HID per STM32?

OP #6166564
Lesenswert?

Hallo Leute,

ich habe den Auftrag ein existierendes Design zu erneuern.
Gebraucht werden 4 serielle Schnittstellen und eine Möglichkeit zum 
Ansteuern von GPIO Ein/Ausgängen.
Bisher wurde ein FTDI4232 und ein UHID Baustein mit einem USB Hub 
verbunden.

Das soll per STM32 ersetzt werden. Ich nehme statndardmäßig den 
STM32F437.
Der hat 8 Endpoints.
irgendwo wurde hier mal diskutiert; für ein CDC braucht man 3Endpoints.
Damit reichen aber die 8 Endpoints nicht aus ....

Gibt es eventuell ein STM32-Derivat, was das kann oder
Habt Ihr andere Empfehlungen?

Danke und Grüße,

Adib.
--
Moderator Persönliche Seite #6166583
Lesenswert?

The A. schrieb:
> irgendwo wurde hier mal diskutiert; für ein CDC braucht man 3Endpoints.

So ist es.  In und Out für die Daten, Interrupt aus eher historischen 
Gründen. Wenn der aber fehlt, lehnen die meisten Betriebssysteme das 
Teil als ungültiges CDC ab.

Schätzungsweise wird bei den 8 Endpoints auch der obligatorische control 
endpoint noch mit gezählt werden müssen, also stehen nur 7 Stück für die 
eigentlichen Devices zur Verfügung.

Habe hier gerade einen SAME70 in der Mache, der hat 10 Endpoints, damit 
könnte man zumindest 3 CDCs aufsetzen. Du bräuchtest dagegen mindestens 
13.
#6166589
Lesenswert?

ohne Gewähr da ich deinen Chip nicht kenne und keine Lust habe mich 
durchs Datenblatt zu wühlen:

Folgendes könnte funktionieren falls dein Chip das kann.
VCP braucht 2 Bulk eps (1 in 1 out) + 1(fast immer) unbenutzter 
Interrupt EP um spec konform zu sein.

Man könnte das Bulkpaar mit einer EP Nummer machen wenn dieser EP für In 
und Out funktioniert.
Für den Interrupt EP benutzt man 4 mal den gleichen EP für alle 4 Eps. 
macht insgesammt 5 EPs.
Ob sowas funktioniert must du wohl ausprobieren, ich sehe da aber erst 
mal keinen Grund warum das nicht gehen sollte.

Thomas
Gast #6166630
Lesenswert?

The A. schrieb:
> Gebraucht werden 4 serielle Schnittstellen und eine Möglichkeit zum
> Ansteuern von GPIO Ein/Ausgängen

Der STM hat doch 4 UARTS und etliche GPIOs. Warum das ganze USB-Zeug?
Du brauchst doch nur 2*MAX3232 o.Ä. und irgendwelche 
Schutzschaltungen/Transistoren/Relais für die GPIOs.

Grüße, Brt
Gast #6166640
Lesenswert?

Jörg W. schrieb:
> brt schrieb:
>> Warum das ganze USB-Zeug?
>
> Vielleicht, weil der Host, an den das Ganze dran soll, eben keine vier
> RS-232-Schnittstellen bietet, an die man deine UARTs hängen könnte?

Sorry, ich wusste von keinem Host. Ich habe das für ein Gerät mit 4 
RS232 und GPIOs gehalten was neu gebaut werden soll.
OP #6166646
Lesenswert?

brt schrieb:
> The A. schrieb:
>> Gebraucht werden 4 serielle Schnittstellen und eine Möglichkeit zum
>> Ansteuern von GPIO Ein/Ausgängen
>
> Der STM hat doch 4 UARTS und etliche GPIOs. Warum das ganze USB-Zeug?
> Du brauchst doch nur 2*MAX3232 o.Ä. und irgendwelche
> Schutzschaltungen/Transistoren/Relais für die GPIOs.
>
> Grüße, Brt

Ja das Ganze soll an einem PC hängen.
Ein Prozess beschäftigt sich mit den GPIOs, der andere mit den 
Schnittstellen.

Der Controller sollte jetzt eventuell mehrere Komponenten zusammenfassen 
zu einem Chip.
also FTDI + HID + USBHub.

HTH, Adib.
---
#6166674
Lesenswert?

The A. schrieb:
> Ja das Ganze soll an einem PC hängen.
> Ein Prozess beschäftigt sich mit den GPIOs, der andere mit den
> Schnittstellen.

Also wenns nur ein Prozess ist der mit den 4 Stück CDC's hantiert, dann 
reichts doch wenn Du nur einen CDC verwendest und die Daten 
zusammengefasst überträgst und dann auf dem Computer wieder 
auseinandernimmst.
#6166881
Lesenswert?

ich hab das gerade mal mit dem 3 fach VCP von Niklas
https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32
auf einem bluepill getestet. Man kann den Interrupt EP problemlos 
mehrfach verwenden.
1
static constexpr auto confDescriptor = EncodeDescriptors::USB20::configuration (
2
      6,      // bNumInterfaces
3
      1,      // bConfigurationValue
4
      0,      // iConfiguration
5
      0x80,    // bmAttributes
6
      250,    // bMaxPower (500mA)
7

8
      // Füge die Deskriptoren für die VCPs hinzu
9
      //vcpDescriptor (0, 1, 2),
10
      //vcpDescriptor (2, 3, 4),
11
      //vcpDescriptor (4, 5, 6)
12
      vcpDescriptor (0, 1, 2),//interface,intEp,bulkEp
13
      vcpDescriptor (2, 1, 3),
14
      vcpDescriptor (4, 1, 4)

Ein 4. VCP sollte also möglich sein

Thomas
#6167178
Lesenswert?

The A. schrieb:

> Ja das Ganze soll an einem PC hängen.
> Ein Prozess beschäftigt sich mit den GPIOs, der andere mit den
> Schnittstellen.
>
> Der Controller sollte jetzt eventuell mehrere Komponenten zusammenfassen
> zu einem Chip.
> also FTDI + HID + USBHub.

Dann mache das ganze doch über Ethernet und mehrere TCP oder 
UDP-Verbindungen. Die Möglichkeit, viele von einander unabhängige 
Verbindungen über eine Leitung zu multiplexen, ist da ja seit Anfang an 
eingebaut.

fchk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren