Forum: Mikrocontroller und Digitale Elektronik 4xCDC+HID per STM32?


von The A. (the_a343)


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.
--

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Thomas Z. (usbman)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bei den größeren STM32F7 scheint es zwei voneinander unabhängige 
Fullspeed und Highspeed USB Cores zu geben. Damit hättest du insgesamt 
genügend Endpoints, müsstest aber immer noch einen USB-Hub-Chip mit auf 
dem Board vorsehen.

von brt (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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?

von brt (Gast)


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.

von The A. (the_a343)


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.
---

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

brt schrieb:
> Sorry, ich wusste von keinem Host.

Wenn man ein USB-Device baut, gehört zwangsläufig irgendwo ein USB-Host 
dazu …

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jörg W. schrieb:
> Bei den größeren STM32F7 scheint es zwei voneinander unabhängige
> Fullspeed und Highspeed USB Cores zu geben

Die gibt es auch schon beim STM32F4xx.

von The A. (the_a343)


Lesenswert?

Dann hab ich ja immernoch  den HUB zusätzlich.
WEnn, dann sollte es eine Ein-Chip-Lösung sein.

Ansonsen, muss ich mir halt was anderes überlegen. ...
oder wieder sie alten Module.
Schade, dass es vom FT4232 keinen FTX-Nachfolger gibt.

Adib.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

The A. schrieb:
> WEnn, dann sollte es eine Ein-Chip-Lösung sein.

Dann kannst du noch einen SAME70 mitsamt dem oben skizzierten "shared 
interrupt endpoint" probieren, falls es nicht unbedingt STM sein muss.

Dafür sollten dessen 10 Endpoints gerade so genügen.

von Johnny B. (johnnyb)


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.

von Thomas Z. (usbman)


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

von Frank K. (fchk)


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

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.