Raspi 3 - wie Uart umbiegen?

  • Wegen der bekannten Probleme mit dem Software-Uart am Raspi 3 auf den Gpio-Pins möchte ich Bluetooth deaktivieren und den Hardware-Uart von Bluetooth auf die Gpios umbiegen. Leider finden sich dazu widersprüchliche Einträge in Foren und Blogs, die auch nicht unbedingt auf dem aktuellen Stand sind.


    1. Welcher dieser Einträge in die config.txt ist der Richtige?


    dtoverlay=pi3-disable-bt
    dtoverlay=pi3-miniuart-bt
    dtoverlay=pi3-miniuart-bt-overlay


    2. Was ist dann meine Schnittstelle an den Gpios?
    ttyS0 oder ttyAMA0


    3. Kann ich herausfinden, ob der nötige Overlay schon vorhanden ist oder ob ich den nachinstallieren muß?


    4. Wird der mitunter vorgeschlagene Eintrag force_turbo=1 in der config.txt benötigt und was bewirkt er?


    Serial Interface in der Config ist disabled und hat die Konsole am Uart deaktiviert, "sudo systemctl disable hciuart" ist auch ausgeführt.


    OS ist Jessie, Kernel ist Linux raspi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux

  • Hallo.
    Ob du die Pin's "umbiegen" kannst bin ich mir nicht ganz sicher... hab's noch nie probiert.
    Aber.
    Wenn du


    benutzt, ist da sehr viel möglich.
    Les dir das (Anhang) mal in Ruhe durch.
    Hab damit mal rumexperimentiert.... unglaublich, was man da alles selbst machen kann.


    gruß root

  • @root: Nicht nur die Überschrift lesen sondern auch den ersten Beitrag....




    1. Welcher dieser Einträge in die config.txt ist der Richtige?


    dtoverlay=pi3-disable-bt
    dtoverlay=pi3-miniuart-bt
    dtoverlay=pi3-miniuart-bt-overlay


    Der letzte Eintrag würde reichen: dtoverlay=pi3-miniuart-bt-overlay
    Die ersten beiden sind mir gar nicht bekannt...


    2. Was ist dann meine Schnittstelle an den Gpios?
    ttyS0 oder ttyAMA0


    Bei allen anderen RaspberryPi's abgesehen vom 3er wäre es /dev/ttyAMA0 , allerdings wurde aufgrund des Bluetooth intern für den GPIO Header nicht mehr "uart0" verwendet sondern nun "uart1". Der Grund dafür ist dass "uart0" nicht von core_freq beeinflussbar und das für BT wichtig ist.


    Es besteht mittlerweile aber auch die Möglichkeit wieder "uart0" für den GPIO Header zu verwenden. Siehe dazu: https://www.raspberrypi.org/fo…wtopic.php?f=107&t=138223


    /dev/ttyS0 wäre der "uart1" Port.


    3. Kann ich herausfinden, ob der nötige Overlay schon vorhanden ist oder ob ich den nachinstallieren muß?


    Die Dateien befinden sich auf der boot Partition. Bei Raspbian wäre das /boot/overlays/


    4. Wird der mitunter vorgeschlagene Eintrag force_turbo=1 in der config.txt benötigt und was bewirkt er?


    force_turbo=1 bewirkt dass der Pi permanent auf dem Maximal Takt läuft und sich nicht runter taktet wenn wenig zu tun ist... Alle Pi's takten sich bei einer CPU Auslastung von >50% automatisch auf ihren "offiziellen" Takt hoch, wenn sie nichts zu tun haben takten sie sich runter um Strom zu sparen und auch weniger Abwärme produzieren. Dieses hin- und her- Takten bringt eine minimale Verzögerung mit, genau in dem Moment wo der Takt verändert wird - was in manchen Fällen stören könnte...


    force_turbo=1 betrifft nicht nur die arm_freq sondern alle, also auch core_freq usw.
    Siehe dazu auch http://elinux.org/RPiconfig#Overclocking_options


    Ob Du das benötigst kommt darauf an welche deviceTree Dateien du verwendest...
    Wenn du kein remap von uart0 und uart1 verwendest dann brauchst du force_turbo=1.
    Noch deutlicher:
    Wenn du nur "pi3-miniuart-bt-overlay" verwendest dann musst du auch "force_turbo=1" eintragen.
    Wenn du aber wieder "uart0" zum GPIO Header remap'st dann brauchst du kein force_turbo=1... Denn wie gesagt "uart0" lässt sich nicht von core_freq beeinflussen, "uart0" stört es also nicht ob force_turbo vorhanden ist oder eben nicht.


    Serial Interface in der Config ist disabled und hat die Konsole am Uart deaktiviert, "sudo systemctl disable hciuart" ist auch ausgeführt.


    In der config ? :s Das muss man eigentlich in der cmdline.txt einstellen, dort werden die Kernel Parameter eingetragen und normalerweise ist das nicht "Serial Interface" sondern "Serial Console" :fies:
    Um die "Serielle Konsole" auszuschalten muss man mit Jessie folgenden Befehl ausführen:

    Code
    sudo systemctl disable serial-getty@ttyAMA0.service


    Der Befehl

    Code
    sudo systemctl disable hciuart

    schaltet den BT Dienst ab und verhindert somit dass das BT Modem versucht sich mit uart0 zu verbinden. Welchen Port (ttyS0 / ttyAMA0) dieser Dienst verwendet wird in der ExecStart Zeile der Datei /lib/systemd/system/hciuart.service eingestellt.



    //EDIT: Siehe dazu auch [Tutorial] Konfiguration des GPIO mit Raspbian Jessie und Raspberry Pi 3

  • Die Dateien befinden sich auf der boot Partition. Bei Raspbian wäre das /boot/overlays/


    Da gibt es bei mir:
    pi3-disable-bt-overlay.dtb
    pi3-miniuart-bt-overlay.dtb


    Wird wohl dann der zweite sein.


    Quote

    In der config ? :s Das muss man eigentlich in der cmdline.txt einstellen


    Sorry, das war unsauber formuliert: Ich habe es über Menu > Einstellungen > Raspi Configuration bei Interfaces disabled.


    Ich habe jetzt:


    • Serielle Konsole über die Raspi Configuration ausgeschaltet.
    • In /boot/config.txt in der letzten Zeile "dtoverlay=pi3-miniuart-bt-overlay" eingetragen
    • Bluetooth mit "sudo systemctl disable hciuart" deaktiviert


    Ich habe jetzt ttyAMA0 an den GPIOs zur Verfügung und kann sie benutzen. Keine Datenfehler wie zuvor mit der ttyS0 bei Kommunikation mit dem PC. Keine Konsolenausgabe auf der Seriellen. Halt auch kein Bluetooth, aber damit kann ich leben.


    Verwirrend ist, daß GTKterm die ttyAMA0 nicht anzeigt, nur die ttyS0 und die ttyUSB0 eines USB-seriell-Wandlers. Trage ich die ttyAMA0 bei GTKterm ein, kann ich sie allerdings öffnen und benutzen.

  • Ich hänge mich mal an diesen schon etwas älteren Thread dran.


    Ich habe einen Pi3 mit einem angeschlossenen RaspBee-Modul, bei dem ich auch Bluetooth verwenden will. Nur funktioniert das leider sehr unzuverlässig. Nach jedem Reboot wird Bluetooth nicht gestartet und händisches Starten funktioniert nur nach dem Zufallsprinzip.


    Einträge in config.txt:

    Code
    dtoverlay=pi3-miniuart-bt
    enable_uart=1
    core_freq=250


    Die beiden "serial"-Devices:

    Code
    pi@raspberrypi:~ $ ls -l /dev/serial?
    lrwxrwxrwx 1 root root 7 Dez 20 18:11 /dev/serial0 -> ttyAMA0
    lrwxrwxrwx 1 root root 5 Dez 20 18:11 /dev/serial1 -> ttyS0


    Und meine /lib/systemd/system/hciuart.service:


    Damit sollte eigentlich alles richtig eingerichtet sein. Aber hciuart startet nach dem Booten nicht:


    Starte ich den Service manuell mit sudo systemctl start hciuart.service, dann kann ich Glück haben und er startet, ein anderes Mal läuft er auch nach 10 Versuchen noch nicht.


    Gibt es keine Möglichkeit, ein Modul auf den GPIOs undBluetooth stabil zu nutzen?


  • mahowi: Nun kommt meine Antwort vielleicht ebenfalls ein bisschen spät. Wie wäre es mit dem Herabsetzen der Baudrate für die Kommunikation mit dem Bluetoothmodul? Vielleicht 9600 statt 921600? Ich kenne ja deine Anwendung nicht.


    Ich hätte allerdings jetzt noch eine Frage: Hat jemand schon versucht beide UARTs auf GPIOs zu mappen? Sodass der RPi3 kein Bluetooth aber dafür zwei serielle Schnittstellen über die GPIO-Pins ermöglicht?


    Edit: Es geht offenbar nicht. Auf den verfügbaren GPIO Pins lassen sich nur GPIO 14 und GPIO 15 für eine der UARTs einstellen, siehe: https://www.raspberrypi.org/fo…ttyAMA0&start=75#p1105155


    Beste Grüße
    grlks

    Edited once, last by grlks ().