Christians Webseite        << zurueck        vor >>

Die Peripherie des Raspberry Pi 4B

In meinem Aufbau erhält der Raspberry die Daten vom Adapterboard über eine UART-Schnittstelle. Es sind Datenpakete im ASCII-Format die permanent und zyklisch gesendet werden.

Die Angaben über die UARTs, und wie man sie ansprechen kann, sind leider häufig sehr schwammig und schlecht erläutert. Das Bezeichner-Chaos am 40-poligen Erweiterungsstecker macht die ganze Sache nicht einfacher. Und zudem verändert sich alles auch über die Evolution der Raspberry-Varianten.

Der BCM2711 ist der Hauptprozessor des Raspberry Pi 4B. Seine Ports (die "Beinchen") sind mit den Pins des 40-poligen Erweiterungssteckers verbunden. Welche Funktionen dort normalerweise anliegen/aufgeschaltet sind zeigt das folgende Diagramm.
DigCockpit

Die verwirrend vielen Spalten haben historische Wurzeln. Verschiedene Unterstützer und Entwicklungsgruppen haben ihre eigenen Bezeichner eingeführt um es Einsteigern leichter zu machen. Ich finde es hat mittlerweile genau den gegenteiligen Effekt..
Es wird sogar noch etwas verwirrender. Die Belegung ist nicht fix und kann verändert werden..

Für mich ist das allerdings sehr praktisch. Es können bei Bedarf bis zu 6 UARTs aufgeschaltet werden. Die Umschaltung erfolgt direkt im Prozessor. Im Raspberry-Sprech sind das die "overlays" in der Datei "config.txt". Die ursprüngliche Zuweisung zu einer Funktion wird gelöscht und durch eine abweichende ersetzt. Welche "alternativen" Belegungen möglich sind kann man im Datenblatt des BCM2711 auf Seite 77 nachlesen.

Die UARTs

Der BCM2711 stellt insgesamt 6 UARTs zur Verfügung:

BCM-Pin BCM-Pin BCM-Pin BCM-Pin Stecker-Pin Stecker-Pin (default)
TXD RXD CTS RTS TXD RXD
uart0 14 15 8 10
uart1 14 15 8 10
uart2 0 1 2 3 27 28 (I2C)
uart3 4 5 6 7 7 29
uart4 8 9 10 11 24 21 (SPI0)
uart5 12 13 14 15 32 33 (gpio-fan)

Die UARTs 0 und 1 können auf die Pins[14] und [15] umgemappt werden. Und UART0 ist normalerweise mit dem WLAN/BT-Modul verbunden. Scheinbar kann man UART 0 nur nutzen wenn man das WLAN/BT-Modul deaktiviert. Das Deaktivieren ist aber keine Option für mich und deshalb lasse ich alles wie es ist und verwende UART 0/1 nicht.

UART 4 ist für mich aktuell die beste Wahl. Es blockiert keine Funktionen die für mich wichtig sind.

Die Konfiguration

Zum Aktivieren muss in die "/boot/config.txt" die folgende Anweisung aufgenommen werden:

						
dtoverlay=uart4
						
						
Die Schnitstellen werden nach dem Schema "/dev/AMAx" hochgezählt. Wenn UART0 bereits vorhanden ist ("/dev/AMA0") dann kann der neue UART4 unter dem Namen "/dev/AMA1" angesprochen und verwendet werden.

Andere UARTs können analog (zusätzlich) eingebunden werden. Man muss nur schauen ob die dadurch entfallenden Funktionen entbehrlich sind.

Die Hardware

Die Pins für UART4 sind [24] für Tx und [21] für Rx, mit 3V-Logikpegel.

Die Software

Die "LazSerial"-Komponente von Lazarus funktioniert direkt und problemlos. Unglaublich .. :)