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.
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.
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.
@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.
Ignacio Vazquez-Abrams
Filo
Vince Patron