Serielle RaspberryPi-Schnittstelle

7

Ich habe ein Display, auf das ich schreiben möchte. Dies ist über die serielle Schnittstelle möglich. Wenn ich einen USB-zu-RS-232-Konverter verwende, funktioniert das wie ein Zauber. Ich habe sogar versucht, nur die RX-, TX- und GND-Kabel des seriellen Konverters zu verwenden, und es funktioniert immer noch. Jetzt möchte ich dieses Display in einem kleinen Gehäuse zusammen mit einem Raspberry Pi verwenden, damit ich keinen Platz mehr für den großen USB-RS-232-Konverter habe. Ich habe versucht, die interne serielle Schnittstelle der Himbeere zu verwenden. Es wird mit auf 9600 Baud eingestellt $ sudo stty -F /dev/ttyAMA0 9600. Aber wenn ich es an das Display anschließe, wird nur Müll angezeigt und normale Steuerbefehle (die mit dem RS-232-Konverter funktionierten) funktionieren auch nicht. Wenn Sie $ sudo minicom -b 9600 -o -D /dev/ttyAMA0die GPIOs TX to RX verwenden und in einer Schleife ausführen, werden die richtigen Zeichen in der Liste angezeigtminicomKonsole. Wenn Sie nun den GPIO-Serial-Port an die RX- und TX-Pins des USB-RS-232-Konverters anschließen und die Masse verbinden und beide Ports minicommit einem auf 9600 eingestellten Baud öffnen , wird nur manchmal ein Ausgang am anderen Anschluss angezeigt, aber wenn ein Ausgang angezeigt wird Es ist auch nur Müll.

Jukisu
quelle

Antworten:

10

Ich bin mir ziemlich sicher, dass das Problem darin besteht, dass der Pi keine RS232-Schnittstelle hat, während das Display hat.

Der Pi hat eine (LV-) UART-Schnittstelle, sein TX-Pin gibt 0 V für eine logische 0und 3,3 V für eine logische aus 1. Dies ist recht einfach zu implementieren, da auf dem Pi bereits 3,3 V verfügbar sind. Dies funktioniert jedoch nur für die Kommunikation auf einer einzelnen Leiterplatte oder innerhalb eines einzelnen Geräts.

Für die Kommunikation zwischen Geräten über größere Entfernungen wird ein System verwendet, das weniger anfällig für Störsignale wie RS232 ist. Während die logische Struktur der Wellenform (Bitrate, Timing, Start-, Stopp-, Paritäts- und Datenbits) dieselbe ist wie für UART, betragen die Spannungspegel -15V ...- 3V für eine logische 1und +15V. .. + 3V für eine logische 0. Dies bedeutet, dass es nicht nur höhere (und negative) Spannungen gibt, sondern auch deren Bedeutung invertiert ist.

Wenn das Display also RS232-Pegel erwartet und diese 3,3-V-Pegel vom Pi erhält, erkennt es die Daten meistens nicht, und wenn ja, ist es oft nur Müll.

Und wenn Sie RX und TX über dieselbe Schnittstelle verbinden, erhalten Sie natürlich das, was Sie erwarten.

Aber: Wenn der RS232-TX-Ausgang nicht strombegrenzt ist, kann er sogar Ihren Pi beschädigen!

Es gibt UART-zu-RS232-Konverterplatinen, aber wenn Sie gerne löten, enthalten die Platinen nur einen MAX3232 (plus vier Kondensatoren). Dieser IC erzeugt auch die höheren (und negativen) Spannungspegel aus der 3,3-V-Versorgungsspannung vom Pi.

Der üblichere ist der MAX232 (raten Sie mal, warum er so genannt wird), aber er ist für 5 V und nicht für 3,3 V vorgesehen.


Da der UART und der RS232 dieselbe logische Struktur verwenden, wird häufig nicht zwischen beiden unterschieden, insbesondere nicht durch Software (Programmierer). Sie werden oft auch nur als "serielle Schnittstelle" bezeichnet, obwohl es andere Schnittstellen wie I²C und SPI gibt, die eine Art serielle Schnittstelle darstellen, aber nie als "serielle Schnittstelle" betrachtet werden.

süßer
quelle
5

Der eingebaute serielle Raspberry Pi-Anschluss verwendet Spannungspegel von 0 bis 3,3 Volt, wie hier beschrieben . Der USB-Seriell-Wandler und Ihr Display verwenden RS232-Spannungspegel von nominal -15 V bis + 15 V mit einem Minimum von -3 V / + 3 V. Sie müssen zwischen diesen beiden Ebenen konvertieren.

Der Port funktioniert, wenn er zurückgeschleift wird, da die Ausgangs- und Eingangsspannungen kompatibel sind.

meuh
quelle