USB UART Kommunikation STM32

Gast #6792209
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!
Angehängte Dateien:
Gast #6792240
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.
Gast #6792249
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. 
:-)
Gast #6792267
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...
Persönliche Seite #6792296
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.
Gast #6792317
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.
Gast #6792349
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.
Gast #6794591
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.
Gast #6794762
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.

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