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. --
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.
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
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.
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
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?
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.
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. ---
brt schrieb: > Sorry, ich wusste von keinem Host. Wenn man ein USB-Device baut, gehört zwangsläufig irgendwo ein USB-Host dazu …
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.
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.