Serielle Kommunikation zwischen eingebettetem System und PC, wobei nur USB-Anschlüsse verfügbar sind.

Ich arbeite an einer Anwendung, bei der ich einen Teil eines eingebetteten Linux-Systems habe, das einige Daten mit PySerial (ein Python-Modul) auf einen PC überträgt. Meine Frage ist: Gibt es eine Alternative zu einem PC mit einem RS232-Anschluss, um eine bidirektionale Kommunikation zwischen dem PC und dem eingebetteten System herzustellen? Danke.

Anders als eine USB-UART-Brücke?
Verfügt das eingebettete Linux-Gerät über einen Geräte- oder OTG-USB-Anschluss?
Haben beide Geräte Ethernet? Sie könnten einen DHCP-Server auf dem Linux-Gerät ausführen. Zum Beispiel "apt-get install isc-dhcp-server", wenn Sie Debian verwenden.

Antworten (2)

Ein USB-Seriell-Adapter wird das tun, was Sie wollen, sie sind verfügbar und billig. Sie werden jedoch höchstwahrscheinlich mit einem RS232-SUB-D-Anschluss ausgestattet sein und RS232-Spannungspegel ausgeben, die dann konvertiert werden müssen.

Sie können auch serielle USB- Kabel mit Stiftleisten und netten einfachen 3,3-V-Pegeln finden , die in Ihrer Anwendung viel einfacher zu verwenden sind.

BEARBEITEN

Sie möchten also Ihre beiden Geräte über USB verbinden. Da Sie sagen, dass das eingebettete Gerät Linux verwendet, muss es Python haben. Je nach Durchsatz und Komplexität gibt es viele Lösungen.

  • Wenn Ihr eingebettetes Board über Ethernet verfügt ... verwenden Sie das einfach!
  • Zwei USB-Seriell-Adapter Rücken an Rücken (Geschwindigkeit ist jedoch begrenzt)
  • Das " USB-zu-USB-Dateiübertragungskabel ", das tatsächlich einen Ethernet-Port für jeden USB-Port emuliert, sodass beide Geräte miteinander vernetzt sind.
  • Programmieren Sie das eingebettete Board so, dass es als USB-Gerät fungiert. Unter Linux gibt es Bibliotheken dafür. Ich habe versucht, ein bisschen zu googeln, und zum Beispiel dies und das gefunden.

Ich habe ein USB-Gerät auf einem Cortex-M4 programmiert, es ist kein Hexenwerk, aber es dauert eine Weile. Wenn Sie also möglichst niedrige Kosten benötigen, ist dies das Beste, da Sie lediglich ein Kabel benötigen. Wenn es sich um ein einmaliges oder persönliches Projekt handelt, empfehle ich eher die anderen Lösungen.

Danke für deine Antwort, peufeu; Ich habe in früheren Projekten USB-Serial-Adapter verwendet, aber es fällt mir schwer herauszufinden, ob die vorgeschlagene Anordnung aus irgendeinem Grund funktionieren wird oder nicht. Da die einzigen verfügbaren Ports an beiden Enden USB-Ports sind, würde ich eine Mischung aus seriellen USB-Kabeln benötigen (eines kommt aus dem eingebetteten System und eines geht in den PC)?
OK, ich hatte nicht verstanden, dass Sie an beiden Enden nur USB hatten. Siehe Bearbeiten ;)
Sie müssten die beiden USB-zu-RS232-Adapter über ein "Nullmodem" -Kabel verbinden, damit der TX des einen an den RX des anderen geht. Es leitet auch die Handshaking-Signale weiter, z. B. RTS-Routen (Request to Send) zu CTS (Clear to Send) usw. Ich kann eine alternative Antwort ausarbeiten, aber viele Artikel bei Google, da bin ich mir sicher.
Außerdem muss OP die erforderliche Bandbreite angeben.
Hey Vince, ich wollte wissen, ob du helfen könntest, die Antwort, die du gegeben hast, zu erweitern. Hier ist ein Link zu zwei Kabeln, die ich basierend auf Ihrer Antwort kaufen möchte: amazon.com/StarTech-com-USB-Serial-Adapter-Modem/dp/B008634VJY Zur Verdeutlichung erwäge ich den Kauf eines "Null-Modems" und eines "DB9" Kabel, um dieses Projekt abzuschließen. Sieht das richtig aus?
Peufeu, die Anforderungen an die Bandbreite sind ziemlich gering und daher hielt ich sie nicht für erwähnenswert, da alle vorgeschlagenen Lösungen mehr als ausreichend sind, um sie abzudecken. Als Antwort auf Ihren ersten Beitrag habe ich keinen Zugriff auf den Ethernet-Port (er wird zur Kommunikation mit einem anderen Peripheriegerät verwendet). Ich erwäge die Verwendung eines USB-zu-USB-Dateiübertragungskabels, wie Sie bereits erwähnt haben, aber ich habe keine Erfahrung mit der Verwendung eines Kabels - vermutlich würde ich einfach die Treiber einrichten und meinen Code ausführen?
Ich habe auch nie einen verwendet, daher kann ich nur raten, sicherzustellen, dass beide Betriebssysteme die Treiber unterstützen ... linux-usb.org/usbnet

@peufeu ist mit der Verwendung von zwei USB-to-Serial-Adaptern auf dem richtigen Weg. Aber es fehlt eine sehr wichtige Sache: Sie brauchen einen "Nullmodem"-Adapter dazwischen.

Für einen bestimmten Anschlusstyp (entweder 9-polig oder 25-polig) gibt es zwei Arten von RS-232-Verkabelung: „DTE“ (Data Terminal Equipment), das typischerweise ein PC ist, und „DCE“ (Data Communications Equipment), das kann B. ein Telefonmodem oder ein ähnliches Gerät sein. (Wenn Sie jung sind, werden Sie sagen, was zum Teufel ein Telefonmodem ist!)

Ein DTE (PC) sendet also Daten an Pin 3 und empfängt Daten an Pin 2, während ein DCE (Modem) Daten an Pin 3 empfängt und an Pin 2 sendet.

Das Problem ist, dass der USB-zu-Seriell-Adapter normalerweise als DTE verdrahtet ist. Wenn Sie sie also einfach direkt verdrahten, versuchen beide, Daten an denselben Pin 3 zu senden und an demselben Pin 2 zu empfangen.

Ein Nullmodem ist also entweder ein Kabel oder Back-to-Back-Anschlüsse, bei denen die RX- und TX-Pins vertauscht sind, damit sie Daten auf den richtigen Pins senden und empfangen.

Außerdem werden die Handshaking-Pins vertauscht, damit sie korrekt erscheinen.

Unterm Strich sieht das DTE auf der anderen Seite also genauso aus wie ein DCE und die beiden Computer können miteinander kommunizieren und der Handshake funktioniert korrekt.

Hier ist ein Bild aus Wikipedia, das hilft zu visualisieren, was vor sich geht:

Den vollständigen Eintrag finden Sie hier: https://en.wikipedia.org/wiki/Null_modem

Sie können die Stecker abschneiden und selbst verdrahten. Das absolute Minimum wäre, alle Handshaking-Leitungen zu ignorieren und nur 3 Drähte zu verbinden: GND-Pin 5 miteinander verbinden und die Pins 2 und 3 vertauschen (2 von einem gehen an 3 des anderen und umgekehrt). Das ist es.

Hier ist ein Ausschnitt aus dem Handshaking: Das DTE setzt RTS (Request to Send) hoch und das Modem, wenn es bereit ist, Daten zu empfangen, sollte CTS (Clear to Send) hoch setzen. Wenn das Modem beschäftigt ist und zu diesem Zeitpunkt keine Daten annehmen kann, senkt es CTS.

In der minimalen Einrichtung sind also keine dieser Drähte angeschlossen, sodass Sie das Handshaking in Ihrer SW deaktivieren und davon ausgehen müssen, dass der andere Typ bereit ist, zu empfangen, wann immer Sie senden.

Nullmodemverkabelung von Wikipedia