Forum: Mikrocontroller und Digitale Elektronik Serielle Kommunikation zwischen zwei MCUs


von Keith S. (ksau)


Lesenswert?

Hallo liebe Experten,

ich möchte Logdaten, die eine Teensy-Applikation generiert, mit einem 
ESP32 weiterverarbeiten. Die Daten werden über die USB-Schnittstelle des 
Teensy ausgegeben.

Was ist die einfachste Möglichkeit, da eine Kommunikation hinzukriegen? 
USB-Hub und auch den ESP über die USB-Schnittstelle anschließen? 
USB-UART-Adapter und eine serielle Schnittstelle des ESP verwenden? Ganz 
praktisches Problem bei letzterer Lösung: die Adapter haben in aller 
Regel USB Typ A-Stecker, genau wie das micro-USB Kabel, das im Teensy 
steckt. Brauche ich dann einen Hub? Der Adapter muss ja auch versorgt 
werden 🤔

Freu mich über jede Hilfe,
Keith

von STK500-Besitzer (Gast)


Lesenswert?

Keith S. schrieb:
> Was ist die einfachste Möglichkeit, da eine Kommunikation hinzukriegen?
> USB-Hub und auch den ESP über die USB-Schnittstelle anschließen?
> USB-UART-Adapter und eine serielle Schnittstelle des ESP verwenden? Ganz
> praktisches Problem bei letzterer Lösung: die Adapter haben in aller
> Regel USB Typ A-Stecker, genau wie das micro-USB Kabel, das im Teensy
> steckt. Brauche ich dann einen Hub? Der Adapter muss ja auch versorgt
> werden 🤔

Du brauchst einen USB-(CDC-)Host (bzw. OTG-Funktionalität) in einem der 
Controller.
Also einen weiteren Controller, der diese Funktion zur Verfügung stellt, 
und dann die Daten an den ESP weiterleitet.

Sowas zum Beispiel:
https://www.hobbytronics.co.uk/usb-host-board-v24?search=USBHOST

von Stefan F. (Gast)


Lesenswert?

Der Weg über USB ist sehr viel komplizierter, als UART Schnittstellen 
der beiden Mikrocontroller miteinander zu verbinden.

von Keith S. (ksau)


Lesenswert?

Danke für die Info! Meinst Du sowas könnte funktionieren, wenn ich 
direkt mit dem micro-USB Stecker in den ESP gehe? Wäre eine schöne 
Lösung, weil keine UART-Pins kontaktiert werden müssen. Nur: wer 
versorgt dann den Adapter?

Rankie USB-OTG Adapter für Smartphones, Handy und Tablet, Micro USB 
Anschluss, 3 Stück, Schwarz 
https://smile.amazon.de/dp/B00YOX4JU6/ref=cm_sw_r_apan_glt_i_CHV5XFC80B9BSTR060N7

von Keith S. (ksau)


Lesenswert?

Stefan ⛄ F. schrieb:
> Der Weg über USB ist sehr viel komplizierter, als UART Schnittstellen
> der beiden Mikrocontroller miteinander zu verbinden.

Ja, vermutlich hast Du Recht. Nur ist der Teensy für mich in diesem 
Projekt ne Blackbox, an die ich eigentlich nicht ran möchte.

von Stefan F. (Gast)


Lesenswert?

Keith S. schrieb:
> Meinst Du sowas könnte funktionieren, wenn ich
> direkt mit dem micro-USB Stecker in den ESP gehe?

Nein, das wird so nicht gehen. Einer der beiden Mikrocontroller braucht 
ein USB-Host interface. Das haben aber beide nicht. Und selbst wenn es 
so wäre, bräuchtest du dann auch noch auf dem Host einen Treiber der zur 
USB-Seriell Emulation des anderen Boardes passt.

von Frank K. (fchk)


Lesenswert?

Was für ein Teensy? Der 4.1 hat ein USB Host Interface auf einer 
separaten Stiftleiste. Genau da musst Du ran.

Dies ist die passende Library für den Host-Port:

https://github.com/PaulStoffregen/USBHost_t36

fchk

von Keith S. (ksau)


Lesenswert?

Frank K. schrieb:
> Was für ein Teensy? Der 4.1 hat ein USB Host Interface auf einer
> separaten Stiftleiste. Genau da musst Du ran.
>
> Dies ist die passende Library für den Host-Port:
>
> https://github.com/PaulStoffregen/USBHost_t36
>
> fchk

Ok, aber ich müsste dann die Applikation auf dem Teensy verändern, oder?

von Stefan F. (Gast)


Lesenswert?

Keith S. schrieb:
> Ok, aber ich müsste dann die Applikation auf dem Teensy verändern, oder?

Ja.

Vor allem brauchst du auf beiden Seiten neben den USB Treibern auch 
US-Seriell Emulationen die paarweise zusammen passen. Am PC brauchst du 
ja auch zusätzlich zum USB Treiber noch einen für die serielle Port 
Emulation.

An deiner Stelle würde ich dieses Fass gar nicht auf machen, sondern 
anstelle des ESP32 einen Raspberry Pi (oder ähnlich) verwenden.

von Keith S. (ksau)


Lesenswert?

Stefan ⛄ F. schrieb:
> Keith S. schrieb:
>> Ok, aber ich müsste dann die Applikation auf dem Teensy verändern, oder?
>
> Ja.
>
> Vor allem brauchst du auf beiden Seiten neben den USB Treibern auch
> US-Seriell Emulationen die paarweise zusammen passen. Am PC brauchst du
> ja auch zusätzlich zum USB Treiber noch einen für die serielle Port
> Emulation.
>
> An deiner Stelle würde ich dieses Fass gar nicht auf machen, sondern
> anstelle des ESP32 einen Raspberry Pi (oder ähnlich) verwenden.

Das würde ich auch gerne vermeiden... Komplizierter als gedacht, schön, 
dass einem das hier zumindest so schnell klar gemacht wird 😉

Andere Idee: die Daten, die der Teensy über die USB-Schnittstelle 
ausgibt, kann man die vielleicht "vorher" über ein Uart-Interface 
abgreifen? Ist nicht die USB-Schnittstelle über ein onboard 
UART/USB-Interface realisiert?

von Stefan F. (Gast)


Lesenswert?

Keith S. schrieb:
> die Daten, die der Teensy über die USB-Schnittstelle
> ausgibt, kann man die vielleicht "vorher" über ein Uart-Interface
> abgreifen?

Wo denn? Willst den Chip aufsägen um den Inhalt eines Pufferbereiches im 
RAM mit Nadeln ab zu greifen? Ohne Softwareänderung wird das nichts.

> Ist nicht die USB-Schnittstelle über ein onboard
> UART/USB-Interface realisiert?

Nein, nicht bei Teensy Boards.

Informiere dich doch erstmal vorher über grundsätzlichen Eigenschaften 
der Produkte, bevor du Änderungen planst.

von Harald (Gast)


Lesenswert?

Wenn der Teensy nicht verändert werden soll bliebe die Möglichkeit über 
ein USB Host IC:
https://www.hobbytronics.co.uk/usb-host-serial

Das Host IC emuliert sozusagen den PC und gibt auf seiner UART den 
seriellen Datenstrom aus. Diesen kann man dann an den ESP32 weitergeben. 
Das USB-Host IC ist für dich auch eine Black-Box, mit der du nichts zu 
tun hast.

von Keith S. (ksau)


Lesenswert?

> Informiere dich doch erstmal vorher über grundsätzlichen Eigenschaften
> der Produkte, bevor du Änderungen planst.

Mache ich doch gerade 😉 Nix für ungut, hast ja Recht, ich danke Euch für 
die schnelle Hilfe!

Ich gebe dem von "STK500-Besitzer" empfohlenen Adapter mal ein Chance, 
denke ich.

von Harald (Gast)


Lesenswert?

Hobbytronics ist closed-source und Du musst den Controller von denen 
kaufen, wenn Du Open-Source möchtest geht es auch über den CH559. Der 
hier hatte offensichtlich ein ähnliches Problem:
https://www.hackster.io/news/add-usb-support-to-any-project-using-bitluni-s-cheap-usb-host-microcontroller-c23ad2ae9a0f

von Stefan F. (Gast)


Lesenswert?

Harald schrieb:
> https://www.hobbytronics.co.uk/usb-host-serial

Offenbar sind da die von mir genannten notwendigen Treiber für 
einigeUSB-UART Wandler bereits enthalten. Allerdings hat der Teensy 
keinen davon.

Bleibt als nur das CDC Protokoll. Nun die Gretchenfrage: Nutzt dein 
Teensy das CDC Protokoll?

von Harald (Gast)


Lesenswert?

Ah Entschuldgung, hatte den Beitrag von STK500 nicht gesehen, von mir 
doppelt verlinkt.

von Wolfgang (Gast)


Lesenswert?

Keith S. schrieb:
> Was ist die einfachste Möglichkeit, da eine Kommunikation hinzukriegen?

Indem du USB USB sein lässt und die Daten über eine andere Schnittstelle 
des Teensies ausgibst.
Um welchen Teensy handelt es sich und was ist das für eine 
"unanfassbare" Teensy-Applikation?

von Harald (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bleibt als nur das CDC Protokoll. Nun die Gretchenfrage: Nutzt dein
> Teensy das CDC Protokoll?

An einem Barcode-Reader funktionierte es z.B. leider nicht, ist immer 
etwas Glückssache, ob die CDC-Implementation funktioniert. In meinem 
konkreten Fall konnte ich den Umweg über HID-Keyboard nehmen, den auch 
jeder Barcode-Reader beherrscht.

von STK500-Besitzer (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Bleibt als nur das CDC Protokoll. Nun die Gretchenfrage: Nutzt dein
> Teensy das CDC Protokoll?

Das sollte sich doch herausfinden lassen, wenn man es an einem PC 
anschließt.

Das Adapter verwenden wir in der Firma um Netzteile anzusteuern, für die 
es zwar auch eine (optionale) RS232-Schnittstelle gibt, die im Gegensatz 
zu dem Hobbytronics-Adapter unverschämt teuer ist.

Wenn ich wüsste, um welche Teensy-Applikation es sich handelt (Hardware 
+ Software), könnte ich den Aufbau auch mal testen (wobei ich dazu erst 
mal ein Teensy bräuchte...).

von STK500-Besitzer (Gast)


Lesenswert?

Harald schrieb:
> An einem Barcode-Reader funktionierte es z.B. leider nicht, ist immer
> etwas Glückssache, ob die CDC-Implementation funktioniert. In meinem
> konkreten Fall konnte ich den Umweg über HID-Keyboard nehmen, den auch
> jeder Barcode-Reader beherrscht.

Barcodereader treten ja auch eher als HID auf.
Die seriellen sind doch so gut wie ausgestorben.

Harald schrieb:
> Hobbytronics ist closed-source und Du musst den Controller von denen
> kaufen

Der Schaltplan liegt offen:
https://www.hobbytronics.co.uk/datasheets/ht/usb%20host%20v2_3.pdf

Es ist ein PIC24FJ64GB002 mit Hühnerfutter.
Unser Steuercontroller hat zwar schon zwei USB-OTG-Kanäle, aber wir 
brauchten mehr. Deswegen der externe UART-USB-CDC-Konverter.

Man könnte natürlich auch den Weg über einen MAX3421E (am ESP) gehen:
https://www.arduino.cc/reference/en/libraries/usb-host-shield-library-2.0/

Ob das mit dem ESP funktioniert, weiß ich nicht.
Ich habe es nur mit einem Arduino UNO (oder sowas) und einem 
Gamecontroller erfolgreich getestet.

von Harald (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Barcodereader treten ja auch eher als HID auf.
> Die seriellen sind doch so gut wie ausgestorben.

Das kann man so nicht sagen, es gibt verschiedene Anwendungsszenarien in 
der Industrie. Und weil es die gibt, kann man jeden handelsüblichen 
professionellen Reader mittels Barcodes aus dem Handbuch sehr einfach 
auf den Bedarf parametrieren. Baudraten oder Codetables bei Keyboard 
etc.

von STK500-Besitzer (Gast)


Lesenswert?

Harald schrieb:
> Das kann man so nicht sagen, es gibt verschiedene Anwendungsszenarien in
> der Industrie. Und weil es die gibt, kann man jeden handelsüblichen
> professionellen Reader mittels Barcodes aus dem Handbuch sehr einfach
> auf den Bedarf parametrieren. Baudraten oder Codetables bei Keyboard
> etc.

Da gebe ich dir Recht.
Unsere waren standardmäßig HIDs.
Dass man USB-Geräte auch "umprogrammieren" kann, sollte 
selbstverständlich sein.
Im Falle des Teensy sollte sich die USB-KLasse per Windows 
Geräte-Manager oder per lsusb etc. feststellen lassen.

von Harald (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Im Falle des Teensy sollte sich die USB-KLasse per Windows
> Geräte-Manager oder per lsusb etc. feststellen lassen.

Wenn er partout nicht ran kann oder will muss er halt auf die CDC 
Implementation hoffen (Hobbytronics) oder den etwas steinigeren Weg über 
den CH559 gehen. Der MAX3421 mag auch funktionieren, dazu kann ich aber 
nichts sagen.

von Keith S. (ksau)


Lesenswert?

> Im Falle des Teensy sollte sich die USB-KLasse per Windows
> Geräte-Manager oder per lsusb etc. feststellen lassen.

Lese ich gleich mal aus, bin gerade unterwegs.

von Keith S. (ksau)



Lesenswert?

Könnt Ihr da was draus ersehen...?

von Harald (Gast)


Lesenswert?


von Keith S. (ksau)


Lesenswert?

Bei HobbyTronics bin ich leider nicht erfolgreich gewesen, momentan 
nicht verfügbar das Board. Habe mir einen Host Controller mit MAX3421E 
bestellt, mal sehen, ob das klappt.

Nochmal: danke! I`ll keep you posted...

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.