Wie können wir beim Raspberry Pi UART mappen und warum sollten wir das tun?
Beim Raspberry Pi gibt es je nach Modell verschiedene UART Ports für USB, Bluetooth oder GPIOs. Die Standardeinstellungen sind durchaus unterschiedlich je nach Pi (Pi UART Doku). Um dem etwas entgegen zu wirken gibt es Alias’s für die Ports. Mit dem Alias serial0
zum Beispiel, wird der primary UART Port angesprochen. Das ist besonders dann sinnvoll, wenn eine SD-Karte in verschiedenen Pi’s genutzt wird.
Manchmal möchte man aber ändern, wo die Alias’s hin zeigen, weil man zum Beispiel eine stabile UART-Verbindung benötigt und deshalb nicht den mini UART Port ttyS0
verwenden möchte. Zum Glück können wir das recht einfach ändern. Eine Suche im Internet zeigt schnell, dass viel überflüssiges zu finden ist und die Anleitungen zum Teil umständlich oder falsch sind. Ich zeige daher eine sehr einfach Anleitung, die auch noch Bluetooth nicht deaktiviert.
Raspberry Pi Zero W UART mappen
Als Beispiel sehen wir uns einen Raspberry Pi Zero W an. Für diesen lassen wir uns ausgeben wie die Serial Alias’s gerade gemappt sind. Das geht über den Befehl ls -l /dev/serial*
, der uns alles aus dem Ordner /dev/
auflistet, was mit serial beginnt:
Hier sehen wir, dass serial0 auf ttyS0 zeigt und serial1 auf ttyAMA0. ttyS0 ist der mini UART serielle Port, ttyAMA0 ist der Hardware serielle Port, der in der Standardeinstellung von Bluetooth verwendet wird.
Das lässt sich mittlerweile relativ leicht ändern. Wir öffnen die config.txt mit einem Editor unserer wahl.
sudo nano /boot/config.txt
Hier fügen wir eine Zeile hinzu, die ein Device-Tree-Overlay läd, welches für uns die Ports tauscht.
# Switch serial ports
dtoverlay=miniuart-bt
Damit ist Bluetooth auf mini UART gemappt und wir haben den „richtigen“ UART Port wieder für uns. Zusätzlich steht in der Pi Doku noch, dass die VPU Core Clock Frequenz auf einen fixen Wert gestellt werden muss, damit mini UART verwendet werden kann.
VPU Clock fixieren
Um das zu tun müssen wir einen Eintrag in der config.txt ergänzen. Dazu einfach die config.txt in einem beliebigen Editor öffnen, z.B. Nano oder über VS Code.
sudo nano /boot/config.txt
Wenn der mini UART als primary gesetzt ist (z.B. beim Raspberry Pi Zero W standardmäßig), dann fügt ihr die Zeile
enable_uart=1
hinzu. Dabei wir UART erst mal aktiviert und zusätzlich die VPU Clock fixiert.
Ist der mini UART auf secondary gemappt, dann müsst ihr die VPU Clock durch
core_freq=250
auf einen fixen Wert setzen.
Wir starten den Pi neu und sehen uns das Mapping an:
Sieht gut aus! Der Raspberry Pi Zero W aus dem Beispiel hat nun umgemappte Ports und serial0
zeigt auf ttyAMA0
.
Pingback: Raspberry Pi Zero W Fingerabdrucksensor • devdrik.