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.
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 .. :)