Startseite>Serielle Kommunikation über RS-485 mit dem Raspberry Pi
Aus Raspberry Pi Geek 02/2020

Serielle Kommunikation über RS-485 mit dem Raspberry Pi

© 123render, 123RF

Von Pi zu Pi

Maximilian Batz

Der Raspberry Pi erlaubt über seine UARTs den Aufbau serieller Verbindungen. Im zweiten Teil der Mini-Serie geht es nach den Grundlagen ans Eingemachte.

In dieser Fortsetzung des Grundlagenartikels [1] zur seriellen Kommunikation mit dem Raspberry Pi geht es um den praktischen Einsatz der Technik. Bei Bedarf finden Sie den ersten Teil als PDF im Download-Bereich zu diesem Artikel.

Konkret werfen wir diesmal einen Blick auf die Verbindung von zwei Kommunikationspartnern per UART und anschließend per RS-485 (Breadboard-Aufbau). Als Betriebssystem dient ein aktuelles Raspbian “Stretch”.

Von Interesse sind dabei vor allem die RXD– und TXD-Pins, optional auch zusätzlich für RS-485 der RTS-Pin als GPIO, um den Treiber auf den Bus aufzuschalten. RTS und CTS beschreibt der erste Artikel der Mini-Serie; die Leitungen dienen der Hardware-Flusskontrolle für die Kommunikation.

Vorbereitung des RasPi

Der Raspberry Pi hat, wie bereits im vorigen Artikel erwähnt, zwei verschiedene UARTs – den oder die PL011 sowie den Mini-UART. Die UARTs stehen als alternative Funktionen von GPIO-Pins am SoC sowie intern am RasPi zur Verfügung (siehe Tabelle “UART am GPIO des RasPi”).

GPIO (BCM#)

RasPi 3B+ GPIO-Pin

Compute-Module-Pin

Funktion

GPIO-Bank 0 (am 40-Pin-GPIO-Header)

14

8

CM 51

TXD0 (ALT0) / TXD1 (ALT5)

15

10

CM 53

RXD0 (ALT0) / RXD1 (ALT5)

16

36

CM 57

CTS0 (ALT3) / CTS1 (ALT5)

17

11

CM 59

RTS0 (ALT3) / RTS1 (ALT5)

GPIO-Bank 1 (intern am RasPi verfügbar)

30

nicht verfügbar

CM34

CTS0 (ALT3) / CTS1 (ALT5)

31

nicht verfügbar

CM36

RTS0 (ALT3) / RTS1 (ALT5)

32

nicht verfügbar

CM46

TXD0 (ALT3) / TXD1 (ALT5)

33

nicht verfügbar

CM48

RXD0 (ALT3) / RXD1 (ALT5)

36

nicht verfügbar

CM58

TXD0 (ALT2)

37

nicht verfügbar

CM60

RXD0 (ALT2)

38

nicht verfügbar

CM64

RTS0 (ALT2)

39

nicht verfügbar

CM66

CTS0 (ALT2)

40

nicht verfügbar

CM70

TXD1 (ALT5)

41

nicht verfügbar

CM72

RXD1 (ALT5)

42

nicht verfügbar

CM76

RTS1 (ALT5)

43

nicht verfügbar

CM78

CTS1 (ALT5)

Es handelt sich dabei um die GPIO-Pins am SoC des Raspberry Pi. Am Compute Module stehen auch die GPIO-Pins der GPIO-Bank 1 zur Verfügung, an den normalen Raspberry-Pi-Modellen (etwa dem RasPi 3B+) lediglich jene der GPIO-Bank 0. Die anderen Pins brauchen die ausgewachsenen RasPis intern, um verschiedene Komponenten anzuschließen. Der PL011 wird dabei über TXD0, RXD0, RTS0 und CTS0 und der Mini-UART über TXD1, RXD1, RTS1 sowie CTS1 angesprochen.

Es gibt also zwei Blöcke von Pins, an denen die Funktionen austauschbar als Alternativen zur Verfügung stehen. Genau das hat sich die Raspberry Pi Foundation beim Design des RasPi 3B+ zunutze gemacht und das damals neue Bluetooth-Modul intern in der GPIO-Bank-1 über den PL011-UART angeschlossen. Dank Software-Konfigurierbarkeit können Sie sich den PL011-UART aber auf die normalen, am GPIO-Port des RasPi zur Verfügung stehenden Pins zurückholen.

Abbildung 1 zeigt die relevanten Pins am Raspberry Pi, bei den 40-Pin-Modellen (im Prinzip alle RasPi ab der zweiten Generation) steht zusätzlich CTS zur Verfügung. An jedem jemals hergestellten Pi lässt sich der UART jedoch über TXD/RXD mit Software-Flusssteuerung (“Software Flow Control”) nutzen. Es gibt unter Linux folgende Devices:

  • /dev/ttyS0 – der Mini-UART (standardmäßig),
  • /dev/ttyAMA0 – der PL011-UART (standardmäßig),
  • /dev/serial0 – ein Symlink, der immer auf den Default-UART zeigt, und
  • /dev/serial1 – ein Symlink, falls ein zweiter UART aktiviert ist.
Abbildung 1: Die Pin-Belegung des UART auf einem Raspberry Pi mit 40-Pin-Header, etwa beim RasPi 3B+. (Bild: Raspberry Pi Foundation, CC-BY-SA)

Abbildung 1: Die Pin-Belegung des UART auf einem Raspberry Pi mit 40-Pin-Header, etwa beim RasPi 3B+. (Bild: Raspberry Pi Foundation, CC-BY-SA)

Der PL011 ist bei vielen RasPi-Modellen der Standard-UART (/dev/serial0), außer bei jenen mit integriertem WLAN (3A+, 3B/B+, 4B, Pi Zero W/WH) – bei diesen Modellen dient er dazu, den Bluetooth-Teil anzubinden. Bei diesen RasPis steht dann standardmäßig der Mini-UART unter /dev/serial0 zur Verfügung.

In der Basisinstallation des Systems ist außerdem eine Linux-Konsole über den Haupt-UART des Systems vorgesehen. Sie würde beim Aufbau einer seriellen Verbindung stören und muss daher abgeschaltet werden. Dazu entfernen Sie mit dem Kommando sudo nano /boot/cdmline.txt aus der Boot-Konfiguration den Abschnitt [...] console=serial0,115200 [...]. Den Rest der Datei sollten Sie unverändert übernehmen.

Da der PL011-UART zum Einsatz kommen soll, müssen Sie bei den RasPi-Modellen 3A/B/B+ und 4B sowie Pi Zero W/WH Bluetooth abschalten. Optional gäbe es noch die Möglichkeit, die zwei UARTs zu tauschen. Da der Mini-UART aber unter anderem an die Taktrate des VideoCores gebunden ist, bringt das Nachteile und zusätzlichen Konfigurationsaufwand mit sich.

Um Bluetooth im System des Raspberry Pi zu deaktivieren, hängen Sie die Zeile dtoverlay=pi3-disable-bt an das Ende der Konfigurationsdatei /boot/config.txt an. Danach deaktivieren Sie den HCI-UART-Dienst, der sonst weiterhin mit dem Bluetooth-Modul kommunizieren würde, und starten das System neu (Listing 1). Dadurch lässt sich der PL011-UART über die direkt zugänglichen Pins des Raspberry Pi ansprechen.

Listing 1

$ echo 'dtoverlay=pi3-disable-bt' | sudo tee -a /boot/config.txt
$ sudo systemctl disable hciuart
Removed /etc/systemd/system/multi-user.target.wants/hciuart.service
$ sudo reboot

Selbstgespräche

Für einen ersten Test verbinden Sie die Pins TXD und RXD miteinander. Alles, was der Raspberry Pi sendet, empfängt er also auch wieder. Die im Folgenden genutzten Begriffe Flow Control und Parity erklärt der erste Teil der Artikelreihe.

Neben der Verkabelung müssen Sie auch die Software organisieren. Dazu melden Sie sich unter Raspbian lokal oder via SSH an und installieren das minimalistische Terminalprogramm Picocom. Danach rufen Sie es mit den in Listing 2 aufgeführten Parametern auf (siehe Tabelle “Picocom-Optionen”). Am Ende des Aufrufs definieren Sie das zu verwendende Gerät, im Beispiel die serielle Hauptschnittstelle /dev/serial0.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland