Wie mache ich Serienarbeiten auf dem Raspberry Pi3 (oder einem späteren Modell)

44

Meine serielle Pi3-Konsole produziert Müll und reagiert nicht auf die Tastatur.

Milliways
quelle

Antworten:

65

Diese Antwort ist immer noch korrekt und erläutert detaillierter die Art der Änderungen, aber die meisten Benutzer von Raspbian sollten nur sudo raspi-configSelect ausführen und Interfacing Options / Serialdann angeben, ob Sie eine serielle Konsole (wahrscheinlich nein) möchten, und dann, ob die serielle Port-Hardware aktiviert werden soll (wahrscheinlich) Ja). Verwenden Sie dann /dev/serial0in jedem Code, der auf die serielle Schnittstelle zugreift.

Das BCM2837 auf dem Raspberry Pi3, Pi3B +, Pi3A + und PiZeroW verfügt (wie seine Vorgänger) über 2 UARTs. Zur Unterstützung der Bluetooth-Funktionalität wurde jedoch der voll ausgestattete PL011-UART von den Header-Pins auf den Bluetooth-Chip verschoben und der Mini-UART auf bereitgestellt Header-Pins 8 und 10.
(Der SOC auf dem Pi4 verfügt über zusätzliche UARTs, aber die gleichen 2 UARTs wie der BCM2837 werden für die Standardserie auf den Pins 8 und 10 und Bluetooth verwendet.)

Dies hat eine Reihe von Konsequenzen für Benutzer der seriellen Schnittstelle.

Der /dev/ttyAMA0zuvor für den Zugriff auf den UART verwendete verbindet sich jetzt mit Bluetooth.
Der miniUART ist ab sofort verfügbar /dev/ttyS0.
In der neuesten Betriebssystem - Software gibt es eine , /dev/serial0die das entsprechende Gerät wählt , so dass Sie ersetzen können /dev/ttyAMA0mit /dev/serial0und die gleiche Software auf dem Pi3 und frühere Modelle.

Leider gibt es eine Reihe anderer Konsequenzen:

The mini UART is a secondary low throughput UART  
  intended to be used as a console.
The mini Uart has the following features:
• 7 or 8 bit operation.
• 1 start and 1 stop bit.
• No parities.
• Break generation.
• 8 symbols deep FIFOs for receive and transmit.
• SW controlled RTS, SW readable CTS.
• Auto flow control with programmable FIFO level.
• 16550 like registers.
• Baudrate derived from system clock.

Es gibt keine Unterstützung für Parität und der Durchsatz ist begrenzt, letzteres sollte jedoch die meisten Verwendungen nicht beeinträchtigen.

Es gibt eine Killerfunktion "Baudrate abgeleitet von der Systemuhr", die den miniUART unbrauchbar macht, da sich diese Uhr dynamisch ändern kann, z. B. wenn das System in den Energiesparmodus oder in den Energiesparmodus wechselt.

Durch Ändern von /boot/config.txtwird diese Abhängigkeit entfernt, indem die folgende Zeile am Ende hinzugefügt wird:

core_freq=250

Dies behebt das Problem und scheint nur geringe Auswirkungen zu haben. Die SPI clock frequencyund ARM Timersind auch abhängig von der Systemuhr.

Aus irgendeinem bizarren Grund lautet die Standardeinstellung für Pi3 mit dem neuesten 4.4.9-Kernel DISABLE UART. Um sie zu aktivieren müssen Sie ändern enable_uart=1in /boot/config.txt. (Dies behebt auch die, core_freqso dass dies nicht mehr erforderlich ist.)

Wenn Sie kein Bluetooth verwenden (oder eine anspruchslose Verwendung haben), können Sie die Ports zurück in den Gerätebaum tauschen. Es gibt ein pi3-miniuart-btund ein pi3-disable-btModul, die in beschrieben sind /boot/overlays/README.

Milliways
quelle
Vielen Dank an @Milliways für die großartige Erklärung. Was ich noch nicht gemacht habe ... Ich habe ein Funkmodul, das über UART eine Verbindung zu meiner Himbeere herstellt und das eine Baudrate von bevorzugt 9600. Das sollte also funktionieren, wenn ich core_freq=250meine Baudrate in einem Python-Skript einstelle und dann konfiguriere? Wäre auch toll, wenn Sie einen Blick darauf werfen könnten: raspberrypi.stackexchange.com/questions/47379/… Vielen Dank!
Georg
Ich habe versucht, / dev / serial0 und enable_uart = 1 in /boot/config.txt, mit einem WiringPi-Code, der verwendet wurde, um mit Himbeer-Pi 2 zu arbeiten, aber es schlägt immer noch fehl, die serielle Kommunikation zu initiieren (Rückgabebedingung ist -1). Ich habe auch versucht / dev / S0 ohne Erfolg. Was könnte mir fehlen? (auch die serielle Schnittstelle von raspi-config befreit). (Alles einschließlich Himbeer ist auf dem neuesten Stand)
Allgemein
1
@ OE1 Wenn Sie eine Frage haben, stellen Sie diese in einer neuen Frage, nicht in den Kommentaren.
Milliways
Ich bin etwas verwirrt. Wie meinst du damit, dass es keine Parität unterstützt? Ich habe ein Gerät, mit dem mein Pi3 spricht, und es muss sogar Parität haben, oder mein System spricht nicht mit ihm. Nachdem ich Ihrer Antwort und der Antwort von naseer gefolgt war, konnte ich mein pi3 dazu bringen, mein Programm-Talk ERFOLGREICH auf diesem Gerät auszuführen, das auf GERADE Parität eingestellt ist.
Donnerstag,
1
Könnten Sie hinzufügen, dass der USB-UART-Konverter 3,3 V-kompatibel und nicht 5 V-kompatibel sein sollte.
MaNyYaCk
20

endlich habe ich arbeit für mein pi3 (os: debian jessie)

Bitte befolgen Sie diese 6 Schritte sorgfältig.

Schritt 1 - Installieren Sie Raspbian Jessie auf einer SD-Karte und starten Sie den Pi, wenn Sie mit einem Netzwerk verbunden sind. Anmelden über Terminal oder Desktop und Shell Konfigurieren Sie das System mit:

sudo raspi-config

Erweitern Sie das Dateisystem und aktivieren Sie die Seriennummer auf der erweiterten Seite, beenden Sie das Programm und starten Sie es neu.

Schritt 2 - Dies ist nicht erforderlich, wenn Sie eine neue Version von Jessie haben. Aktualisieren Sie das System mit:

sudo apt-get update

sudo apt-get upgrade

Schritt 3 - Gerätebaumeinstellungen wie folgt:

Fügen Sie den Gerätebaum zu /boot/config.txt hinzu , um Raspberry Pi 3 Bluetooth zu deaktivieren.

sudo nano /boot/config.txt

Fügen Sie am Ende der Datei hinzu

* wenn du den blutooth auf miniuart port ändern willst (bad)

dtoverlay=pi3-miniuart-bt

* wenn du den blutooth deaktivieren willst (gut)

dtoverlay=pi3-disable-bt

Verlassen Sie den Editor und speichern Sie Ihre Änderungen.

Schritt 4 - Starten Sie den pi neu

sudo reboot

Schritt 5 -

a) Zum Deaktivieren der seriellen Konsole bearbeiten Sie die Datei mit

sudo nano /boot/cmdline.txt

entferne die Wortphase " console=serial0,115200" oder " console=ttyAMA0,115200"

Beenden Sie und speichern Sie Ihre Änderungen

b) Um die serielle Konsole zu aktivieren, bearbeiten Sie die Datei mit

sudo nano /boot/cmdline.txt

Ändern Sie die Datei wie folgt:

dwc_otg.lpm_enable=0 console=tty1 console=serial0(or ttyAMA0),115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Beenden Sie und speichern Sie Ihre Änderungen

Schritt 6 - pi neu starten

sudo reboot

----------------- das ist alles, viel Spaß ------------------------ ---

naseer mohammad
quelle
Auf rpi2 funktioniert dies und ich habe es mit einer Bluetooth-Relaiskarte verbunden und sende Nachrichten über AT-Befehle. Aber kann ich auf diese Weise Daten von einem Arduino empfangen?
MarcioKoko
10

Die Antwort von Naseer ist richtig, aber ein bisschen kompliziert, wenn Sie gerade die neueste Rasbian-Version installiert haben. Alles was ich tun muss, ist einfach die folgende Zeile in meine config.txt einzufügen (zB unter Windows, wo Sie die SD-Karte auf der Fat32-Partition einstecken):

dtoverlay=pi3-disable-bt

Schließen Sie es dann an, und der Pi druckt das Zeug direkt auf die Konsolenstifte.

Arnout
quelle
Wie kann das gehen? Bluetooth UART ist nicht einmal mit GPIO-Pins verbunden!
Dmitry Grigoryev
4
@DmitryGrigoryev Es funktioniert für mich auf meinem PI 3.
ThN
2
Dies funktionierte auch für mich. Ich fand, dass dieser Thread dazu beitrug, ein paar kleine Probleme zu klären: raspberrypi.org/forums/…
Chris,