UART0 auf GPIO 32 und GPIO 33

  • Hallo Zusammen,


    ich habe ein Compute Module V3 lite am laufen und Probleme mit den UART-Schnittstellen.:helpnew:


    Als Betriebssystem verwende ich das aktuelle Raspbian Stretch with desktop mit dem Release date: 2018-10-09

    Linux raspberrypi 4.14.78-v7+ #1156 SMP Tue Oct 23 14:34:39 BST 2018 armv7l


    Die UART0 würde ich gerne auf GPIO 32 und GPIO 33 legen. Dafür habe ich in der /boot/config.txt folgendes eingefügt:

    Code
    1. dtoverlay=uart0,txd0_pin=32,rxd0_pin=33

    in der /boot/cmdline.txt habe ich den Teil gelöscht damit die Console mir die UART nicht besetzt:

    Code
    1. console=ttyAMA0,115200

    Trotz des dtoverlays wird die UART0 weiterhin auf GPIO14 und GPIO15 ausgegeben.:conf:


    Die Seite: The Raspberry Pi UARTs ist mir bekannt und ich habe auch schon mit den folgenden Befehlszeilen herumexperimentiert:

    Code
    1. enable_uart=1
    2. pi3-disable-bt
    3. pi3-miniuart-bt
    4. core_freq=250

    Jegliche Versuche mit unterschiedlichen Konstellationen sind leider fehlgeschlagen.:wallbash:


    Mit der UART1 funktioniert jede mögliche Variante::denker:

    Code
    1. dtoverlay=uart1,txd1_pin=14,rxd1_pin=15
    2. oder
    3. dtoverlay=uart1,txd1_pin=32,rxd1_pin=33
    4. oder
    5. dtoverlay=uart1,txd1_pin=40,rxd1_pin=41

    Sowohl:

    Code
    1. sudo apt-get update
    2. und
    3. sudo apt-get upgrade
    4. und
    5. sudo rpi-update

    haben keine Änderung gebracht.


    Habt Ihr eine Idee wo der Fehler liegen könnte oder könnt selbiges Verhalten rekonstruieren?


    Vielen Dank für Eure Hilfe!:danke_ATDE:


    Gruß Dominik

    Einmal editiert, zuletzt von wudo94 ()

  • wudo94

    Hat den Titel des Themas von „UART0 auf Pin 32 und Pin 33“ zu „UART0 auf GPIO 32 und GPIO 33“ geändert.
  • Zitat

    :wallbash:

    Ich wollte nichts unversucht lassen :daumendreh2:


    Zitat

    Warum ? :conf: Nimm doch einfach UART1.

    UART1 ist leider mit GPIO 40 und GPIO 41 in anderer Verwendung. UART0 kann leider nicht auf GPIO 40 und GPIO 41 gelegt werden.

  • Ich klaue das mal und poste es hier, falls deutschsprachige User auch danach suchen.:daumendreh2:


    1.) Datei mit Namen uart0-overlay.dts erstellen und wie folgt befüllen:

    2.) Kompilieren und kopieren:

    Code
    1. dtc -@ -I dts -O dtb -o uart0.dtbo uart0-overlay.dts
    2. sudo cp uart0.dtbo /boot/overlays

    3.) /boot/config.txt bearbeiten:

    Code
    1. dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7 # alt3

    oder

    Code
    1. dtoverlay=uart0,txd0_pin=36,rxd0_pin=37,pin_func=6 # alt2

    Der despotische Bierbaron sagt: Kein Support per PN ! :angel::wink:

  • Hofei , vielen Dank für den Link, diesen Beitrag hatte ich noch nicht gefunden.


    Den dtoverlay der von PhilE beschrieben wird erstellt bis auf RTS und CTS den gleichen overlay der bereits unter /boot/overlays/uart0.dtbo zu finden ist.


    Was ich bis jetzt nicht wusste ist das bei folgendem Befehlt auch pin_func=7 angegeben werden muss:

    Code
    1. dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7 # alt3

    Ich dachte bis jetzt es sei eine alternative:

    Code
    1. dtoverlay=uart0,txd0_pin=32,rxd0_pin=33
    2. oder
    3. dtoverlay=uart0,pin_func=7

    was aber auch nicht funktionierte.


    Mit dem oberen Befehl funktioniert die UART0 Ausgabe auf GPIO32 und GPIO33.

    Weiterhin wird aber der UART0 auch auf GPIO 14 und GPIO 15 ausgegeben, was ich gerne noch unterbinden möchte.


    Schonmal vielen Dank für die sehr schnelle Hilfe bis jetzt! :danke_ATDE:


    Danke auch an fred0815 , die Zusammenfassung hilft bestimmt einigen weiter die auch an dem Problem kämpfen.


    Hier sind die verfügbaren dtoverlays zu finden: kompilierte overlays und die quell overlays

    Dies hat mir schon sehr oft weitergeholfen.


    Anmerkung:

    In dem verlinkten Thread wird der Workaround verwendet dass GPIO 14 und GPIO 15 einfach von Hand als Input gesetzt werden. So wird eine Doppelbelegung der GPIO´s verhindert und nur noch auf den gewünschten GPIO´s 32 und 33 UART0 ausgegeben.

    Code
    1. raspi-gpio set 14 ip
    2. raspi-gpio set 15 ip

    3 Mal editiert, zuletzt von wudo94 ()

  • Zitat


    Weiterhin wird aber der UART0 auch auf GPIO 14 und GPIO 15 ausgegeben, was ich gerne noch unterbinden möchte.

    Da war noch was mit systemd, aber da kenne ich mich nicht aus, ob und was es bewirkt.

    Code
    1. sudo systemctl disable hciuart

    Der despotische Bierbaron sagt: Kein Support per PN ! :angel::wink:

  • Zitat

    Da war noch was mit systemd, aber da kenne ich mich nicht aus, ob und was es bewirkt.

    Code
    1. sudo systemctl disable hciuart

    Stimmt, das hatte ich auch noch versucht, hat aber leider auch nicht geholfen.


    Dieser Workaround ist bis jetzt das Einzige was mir geholfen hat:

    Zitat

    Anmerkung:

    In dem verlinkten Thread wird der Workaround verwendet dass GPIO 14 und GPIO 15 einfach von Hand als Input gesetzt werden. So wird eine Doppelbelegung der GPIO´s verhindert und nur noch auf den gewünschten GPIO´s 32 und 33 UART0 ausgegeben.

    Code
    1. raspi-gpio set 14 ip
    2. raspi-gpio set 15 ip

    Ist nicht schön, funktionniert aber.


    Falls dafür noch jmd. eine Lösung hat wäre es perfekt.8)



    Anmerkung:

    PhilE schrieb:

    Den Overlay der PhilE geschrieben hat funktioniert. Vielleicht löst sich das Problem von alleine wenn Er den Overlay in den Kernel noch integriert^^

    Einmal editiert, zuletzt von wudo94 ()

  • Lösung und Threadabschluss:


    Dank PhilE ist nun ein Patch für die UART0-Schnittstelle in den folgenden Versionen des Kernels enthalten.


    Mit dem Patch kann durch einfügen von folgendem in die /boot/config.txt die UART0-Schnittstelle umgestellt werden:

    Code
    1. dtoverlay=uart0,txd0_pin=32,rxd0_pin=33,pin_func=7 # alt3

    oder

    Code
    1. dtoverlay=uart0,txd0_pin=36,rxd0_pin=37,pin_func=6 # alt2

    Quelle: https://www.raspberrypi.org/fo…ic.php?p=1388713#p1389305


    Vielen Dank für die schnelle und erfolgreiche Hilfe von allen Seiten!:danke_ATDE:


    Gruß Dominik

    3 Mal editiert, zuletzt von wudo94 ()

  • Mit dem Patch kann durch einfügen von folgendem in die /boot/config.txt die UART0-Schnittstelle umgestellt werden:

    Heisst das, man kann damit auch den Uart0 auf beliebige andere normale GPIOs (nicht von I2C, SPI belegt) umleiten? Kann man so auch mehrere Uarts bereitstellen?

  • Leider nein. In diesem Fall kann UART 0 nur von GPIO 14/15 auf entweder GPIO 32/33 oder GPIO 36/37 umgestellt werden. So ist es in den Alternate Functions des Compute-Modules hinterlegt: 9.1.1 GPIO Alternate Functions


    Das Compute-Module besitzt hardwaremäßig nur 2 UART-Schnittstellen: UART0 (miniUART) und UART1 die auch nur an den GPIOs ausgegeben werden können, die in den Alternate Functions beschrieben sind.


    Man kann bestimmt Softwareseitig UART-Schnittstellen umsetzen die an beliebigen GPIOs ausgegeben werden können, jedoch weiß ich nicht sicher wie es mit den Laufzeiten hinhaut, wobei UART auch keine hochgeschwindigkeits-Schnittstelle ist und es somit schon funktionieren sollte.


    Alternativ könnte man USB zu Seriell-Wandler verwenden, um mehr UART-Schnittstellen zur Verfügung zu haben.