UART zwischen zwei Raspberry Pi's funktioniert nicht

  • Liebe Forenmitglieder,


    meine Vorgabe, die ich erhalten habe ist es, eine serielle Datenuebrtragung zwischen esp32-Modulen und einem Raspberry Pi herzustellen. Hierfuer wollte ich zunaechst als Einstieg eine UART-Kommunikation zwischen zwei Raspberry Pi's erzeugen. Leider gelingt mir dies nicht so ganz.


    Als Anleitung verwende ich folgenden Link:


    http://www.netzmafia.de/skript…e/RasPi/RasPi_Serial.html


    Der Code ist leicht modifiziert, damit er mit Python3 kompatibel ist.


    Der Empfaenger fuehrt folgenden Code aus:


    Fuehr den Sender liegt folgendes Program vor:


    Im Grunde soll nur der Buchstabe H uebertragen werden.


    In dem Link ist ebenfalls beschrieben, dass gewisse Konfigurationen vorgenommen werden muessen, damit die Bluetooth-Schnittstelle die Kommunikation nicht stoert.


    Quote

    Bearbeiten /boot/cmdline.txt

    Die Datei /boot/cmdline.txt regelt den Bootvorgang des Pi. Dort werden diverse Boot-Optionen eingestellt, so auch die serielle Konsole. Per Default steht relativ wenig in der Datei, wobei es bei kommenden Versionen schon wieder anders aussehen kann (für die Darstellung hier wurde die Zeile umbrochen!:(

    Code
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

    Aus diesen Optionen müssen Sie nun die Angaben zur Konsole "ttyAMA0" löschen, aber alles andere unbedingt unverändert lassen. Am Besten machen Sie zuerst
    ein Backup der Datei (cp /boot/cmdline.txt /boot/cmdline.bak). Dann ändern Sie in der Originaldatei die Zeile:

    Code
    dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

    in die folgende Zeile (oben sind die zu löschenden Teile farbig hervorgehoben):

    Code
    dwc_otg.lpm_enable=0  console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


    Meine cmdline.txt-Datei beinhaltet folgendes:


    Quote

    console=serial0,115200 console=tty1 root=PARTUUID=266982c5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    Ich wuerde sagen, hier liegt kein problem vor oder?

    Weiterhin soll folgendes durchgefuehrt werden:



    Solch eine inittab Datei besitzt mein Raspberry aber garnicht... :(


    Vielleicht ist der Link zu alt fuer die neue Raspbian-Version. RX und TX sind vertauscht und GND ist jeweils miteinander. Ich wuerde mich sehr freuen, wenn einer von euch vielleicht den Fehler sieht...


    Viele Gruesse und einen schoenen ersten Advent wuenscht Salzforscher

  • Moin Salzforscher ,


    über welche RPi reden wir überhaupt? Die Änderungen musst Du nur machen, wenn Du einen 3B und höher verwendest.


    Aus den beiden config.txt  cmdline.txt würde ich mal noch den Teil console=serial0,115200 eliminieren. Danach verbinde RX mit TX auf dem selben Pi und versuche Dir mittels seriellem Terminalprogramm, z.B. minicom (lokales Echo abschalten nicht vergessen), etwas zu schicken. Erst, wenn das funktioniert, verbinde die beiden Pi und mach das mit einem Terminalprogramm auf beiden Seiten. Somit kannst Du sicher sein, dass die HW das tut, was Du erwartest. Der Rest ist python, das nutze ich nicht.


    Gruß, STF

  • Hallo STF,


    herzlichen Dank fuer deine Antwort. Ich nutze einen Raspberry 3 B+ jeweils. :)


    So sieht meine config.txt Datei aus:



    Leider finde ich deinen genannten Befehl, den ich loeschen soll dort nicht.


    Dein Vorgehen mit minicom erscheint mir sinnvoll und entspricht auch meinem Vorgehen. Ich habe minicom auf beiden Raspberry Pi's installiert und ueber folgenden Befehl auf beiden gestartet:


    Code
    minicom -b 9600 -o -D /dev/ttyAMA0 

    Das Fenster oeffnet sich auch und dort steht, dass man nun den Text eingeben kann, wie es auf diversen Interenetseiten auch dargestellt ist. Leider kann ich keinerlei Text eingeben. Ich weiss nicht, wo das Problem dort liegt. In das Terminal laesst sich einfach nichts eintippen.


    Wie schalte ich das Echo aus?


    Herzlichen Dank und viele Gruesse,


    Salzforscher

  • Siehste, ich meinte auch die cmdline.txt. Ich ändere das mal noch oben ab. Wenn nichts passiert, heißt das: lokales echo ist aus und nix passiert oder aber ist nicht darstellbar, weil die Geschwindigkeit unpassend ist.

    sinnvoll und entspricht auch meinem Vorgehen

    Aaaaaaber. Ich sprach davon, zuerst RX und TX jeweils EINES Pi zu verbinden, um zu sehen, ob das überhaupt klappt. Und dann wäre mal noch die AUsgabe von folgendem Befehlen interessant:


    Code
    ls /dev/serial*
    ls /dev/ttyAMA*
  • Hast du auch den Vorschlag eine drahtbrücke zu benutzen umgesetzt? Damit prüft ein Pi sich selbst.


    Edit: STF wies gerade selbst nochmal darauf hin.

  • Aahja okay so habt ihr das gemeint... :) Also ich habe jetzt jeweils TX und RX auf einem Raspberry Pi miteinander verbunden.


    Nach dem Oeffnen von minicom und dem ausfuehren vom oberen Befehl erhalte ich folgenes:


    Leider kann ich wie gesagt, nichts eintippen. Ich kann druecken was ich will, es laesst sich unter "Press" nichts schreiben.


    Ich habe nun aus der cmdline.txt Datei folgendes eliminiert:


    Quote

    console=serial0,115200


    Nach einem Neustart, konnte ich mit minicom sowohl innerhalb eines Raspberry Pis Daten ubertragen als auch zwischen den Raspberry Pis. Wichtig ist dabei, den folgenden Befehl zu verwenden:


    Quote
    Code
    minicom -b 9600 -o -D /dev/serial0 

    und NICHT:

    Code
    minicom -b 9600 -o -D /dev/ttyAMA0


    Auch der genante Python-Code funktioniert nun, sofern die Schnittstelle

    Code
     /dev/ttyAMA0

    durch

    Code
    /dev/serial0

    ersetzt wird.


    Ich bedanke mich bei euch, es hat mir sehr geholfen. :)


    Ich wuensche euch allen eine schoene Weihnachtszeit und bleibt gesund.



    Viele Gruesse,


    Salzforscher

  • So ganz stimmen Deine Annahmen nicht:


    Das Löschen von console=serial0,115200 sorgt für das Abschalten der seriellen Konsole, deren Ausgaben Du bei korrekter Konfiguration Deiner Gegenstelle hättest sehen müssen. So hat sie Dir aber einfach nur dazwischengepfuscht.


    /dev/serial0 ist lediglich ein Link auf eine der seriellen Schnittstellen. Dazu muss man dann nur wissen, welche....


    Gruß, STF