Forum: Mikrocontroller und Digitale Elektronik USB UART Kommunikation STM32


von Denis (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag zusammen!

Ich arbeite zur Zeit an einem Projekt an dem ich nicht weiter komme und 
Hilfe brauche. Zunächst einmal würde ich gerne wissen, ob mein Ansatz 
richtig ist bzw. ob es überhaupt so funktionieren kann. (BILD)

Situation:

Ich habe eine ECU, welche über ein Terminalprogramm z.B. hTerm 
ansteuerbar ist. Wenn ich einen Befehl sende, z.B. eine 
Temperaturabfrage, geschieht dies über string befehle. Empfangen wird 
die Antwort auch als String. Konfiguration: 9600 kBaud, 8N1, kein 
flow-control. Da ich auch einen Computer verzichten muss, möchte ich 
dies Über einen Mikrocontroller lösen. Hierzu habe ich ein STM32F767ZI 
gewählt. Die ECU verfügt über einen männlichen USB-A anschluss, an 
welchen ich eine USB weiblich-weiblich Kupplung angeschlossen habe. An 
diese wiederrum habe ich einen "DSD TECH SH-U09C5 USB zu TTL UART 
Konverterkabel mit FTDI Chip Unterstützung" oder alternativ 
"Paradisetronic.com USB-UART-Wandler-Kabel, Serielle Schnittstelle/TTL 
zu USB, CP2102 USB Serial Converter" angeschlossen und dieser mit den 
UART Pins am Mikrocontroller. Soweit ich weiß, hat die ECU einen FTDI 
Chip, da ein FTDI treiber von Windows beim anschließen installiert wird.

Problem: Bisher konnte ich jedoch nichts empfangen, ob das Senden 
geklappt hat weiß ich leider auch nicht, da die ECU keine Anzeige hat. 
Über hTerm am PC kann ich senden und empfangen.


Meine Fragen nun: Ist es so, wie ich es mir vorstelle, überhaupt 
möglich? Wenn nein, welche Möglichkeit gäbe es? Muss ich irgendwelche 
FTDI Bibliotheken nutzen? Nehme auch gerne Tipps für ein gutes Buch!


Ich bin für JEDEN Hinweis / Tipp dankbar!

von W.S. (Gast)


Lesenswert?

Denis schrieb:
> Ich arbeite zur Zeit an einem Projekt an dem ich nicht weiter komme und
> Hilfe brauche.

Dazu müßtest du dein Projekt mal etwas weniger konfus darstellen. So, 
wie ich das im Moment sehen, besteht dein Projekt aus einer analogen 
Meßschaltung (oder mehreren), deren Wert(e) per ADC gelesen und auf 
einem Display angezeigt werden soll(en).

Ist das die eigentlich angezielte Funktion?

Wenn ja, dann nimm irgend einen µC, bau ein Display dran und bau den ADC 
dran (wenn es die gewünschte Auflösung erfordert) oder nutze den im µC 
enthaltenen ADC. Das wäre alles - vorausgesetzt, das ist dein 
eigentliches Anliegen.

W.S.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Denis schrieb:
> Ich bin für JEDEN Hinweis

Für USB benötigst du einen Host und ein Device. USB ist keine einfache 
gleichberechtigte peer to peer verbindung wie UART.

Ist eins deiner Geräte überhaupt in der Lage die Funktionen des Host zu 
übernehmen?

von HansImLot (Gast)


Lesenswert?

Denis schrieb:
> Problem: Bisher konnte ich jedoch nichts empfangen, ob das Senden
> geklappt hat weiß ich leider auch nicht, da die ECU keine Anzeige hat.
> Über hTerm am PC kann ich senden und empfangen.

Wenn es ein STM Board wie auf dem Bild ist, stehen dir aber LEDs zur 
Verfügung. Mit denen kannst du sehr wohl checken, ob Befehle ankommen. 
:-)

von STK500-Besitzer (Gast)


Lesenswert?

Irgend W. schrieb:
> Ist eins deiner Geräte überhaupt in der Lage die Funktionen des Host zu
> übernehmen?

Denis schrieb:
> STM32F767ZI

Hat Host-Funktionalität...
Trivial ist das aber nicht, wenn man nicht mal die Grundlagen von USB 
kennt.
==> Googlen

von Denis (Gast)


Lesenswert?

Irgend W. schrieb:
> Für USB benötigst du einen Host und ein Device. USB ist keine einfache
> gleichberechtigte peer to peer verbindung wie UART.

Das ist vielleicht auch schon das Problem. Über die ECU weiß ich leider 
sehr wenig und die USB-UART Adapter bieten keine Host-Funktion soweit 
ich das sehe. Kennt hier jemand vielleicht ein gutes Produkt mit welchem 
ich zwischen USB und UART Daten in beide Richtungen übertragen kann?

W.S. schrieb:
> Dazu müßtest du dein Projekt mal etwas weniger konfus darstellen.

Tut mir leid für die "konfuse" Darstellung. Das was ich beschrieben 
habe, ist nur ein sehr kleiner Teil eines größeren Projekts. Ich 
benötige die Daten der ECU zwecks Weiterverarbeitung. Die Ausgabe auf 
dem LCD dient nur der Kontrolle. Die Sensoren und Aktoren, welche an der 
ECU angeschlossen sind, müssen dort auch bleiben, weil ich den Regler 
nicht verändern möchte. Leider hatte ich bisher noch keinen Fall, bei 
welchem ich auf diese Weise Daten übertragen musste und habe deswegen 
leider keine Ahnung...

von STK500-Besitzer (Gast)


Lesenswert?

Denis schrieb:
> Kennt hier jemand vielleicht ein gutes Produkt mit welchem
> ich zwischen USB und UART Daten in beide Richtungen übertragen kann?

https://www.hobbytronics.co.uk/usb-host-board-v24

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Das klappt so nicht. Solche USB-Female-Female-Adapter sind von USB nicht 
vorgesehen und vermutlich nur für sehr spezifische Anwendungen möglich.

Die einfachste Lösung wäre einen SBC (z.B. Raspberry PI) mit Linux zu 
verwenden und direkt per USB mit der ECU zu verbinden und statt des 
STM32F7 zu verwenden.

Die zweiteinfachste Lösung wäre es die ECU zu öffnen, die Verbindung 
zwischen FTDI-Chip und MCU zu trennen und stattdessen mit dem STM32 zu 
verbinden.

Die dritteinfachste Lösung wäre es einen FTDI Vinvulum II zu verwenden, 
um als USB-Host zu fungieren und das FTDI-Protokoll wieder zurück auf 
Seriell umzusetzen. Das wäre äquivalent zum Hobbytronics-USB-Host-Board.

Mit großem Abstand kommt dann die Variante, das FTDI-USB-Protokoll auf 
dem STM32F7 als USB-Host zu implementieren (und dabei z.B. den 
Linux-Treiber als Inspiration zu verwenden) und ECU und STM32F7 direkt 
zu verbinden.

von Denis (Gast)


Lesenswert?

Niklas G. schrieb:
> Die einfachste Lösung wäre einen SBC (z.B. Raspberry PI) mit Linux zu
> verwenden und direkt per USB mit der ECU zu verbinden und statt des
> STM32F7 zu verwenden.

Danke, daran habe ich auch schon einmal gedacht. Werde ich erstmal damit 
versuchen und die Abfragen automatisieren.

von MaNi (Gast)


Lesenswert?

Niklas G. schrieb:
> Die zweiteinfachste Lösung wäre es die ECU zu öffnen, die Verbindung
> zwischen FTDI-Chip und MCU zu trennen und stattdessen mit dem STM32 zu
> verbinden.

Je nachdem wie leicht sich das Ding öffnen lässt, ob es akzeptabel ist 
die Garantie zu verlieren und je nach interner UART Datenrate könnte man 
auch einfach ein fertiges Modul verwenden (z.B. EP-20) um von UART auf 
z.B. UDP umzusetzen. Dann hätte man es direkt im Netzwerk. Allerdings 
ohne Display dann.

Niklas G. schrieb:
> Die einfachste Lösung wäre einen SBC (z.B. Raspberry PI) mit Linux zu
> verwenden und direkt per USB mit der ECU zu verbinden und statt des
> STM32F7 zu verwenden.

Wäre auch meine erste Wahl. Zumindest wenn es abgesetzt sein soll. 
Leicht umzusetzen und trotzdem hat man alle Möglichkeiten.
Wenn WLAN geht, könnte man sich auch den Raspi W überlegen. Der ist 
kleiner als dein eingezeichnetes Display.

von Christian G (Gast)


Lesenswert?

...evtl könnte dir folgendes weiterhelfen: stm32 als USB cdc host
https://controllerstech.com/usb-cdc-device-and-host-in-stm32/

Ich schätze das dein Gerät eine USB CDC node darstellt und dafür 
bräuchtest du als "Gegenstück" auf deinem stm32 einen USB Host welcher 
mit dem CDC Zeug umgehen kann (so wie es ein PC machen würde). Somit 
könntest du auf einen USB seriell Adapter verzichten.
Aber evtl irre ich mich da auch und das tutorial habe ich jetzt selber 
auch nicht ausprobiert.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Christian G schrieb:
> Ich schätze das dein Gerät eine USB CDC node darstellt

Nein, die FTDI-Chips machen kein USB-CDC-ACM sondern ein proprietäres 
Protokoll.

von Christian G (Gast)


Lesenswert?

Niklas G. schrieb:
> Nein, die FTDI-Chips machen kein USB-CDC-ACM sondern ein proprietäres
> Protokoll.
schade, ok war auch irgendwie zu erwarten....
Einen eigenen host Treiber ala
https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ftdi_sio.c 
,
https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ftdi_sio.h 
zu basteln und darauf zu hoffen das es funzt ist wahrscheinlich den 
Aufwand auch nicht wert.

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.