Aus Raspberry Pi Geek 04/2021

Beim Auto abgeschaut: Datenübertragung über den CAN-Bus (Seite 2)

Nach dem Start der beiden RasPis aktivieren Sie den SSH-Dienst und die SPI-Schnittstelle. Beides lässt sich mit dem via sudo raspi-config aufgerufenen Konfigurationswerkzeug erledigen. Die SPI-Schnittstelle übernimmt die Kommunikation mit dem MCP2515-CAN-Controller. SSH verwenden wir, um uns über das Netzwerk auf die RasPis zu verbinden. Somit erübrigt sich das Einrichten zusätzlicher Monitore und Tastaturen. Linux-Anwender benötigen dafür keine weitere Software, Windows-Nutzer brauchen ein zusätzliches Tool wie etwa Putty [4].

Um das Betriebssystem auf den RasPis auf den neuesten Stand zu bringen und die nötigen Tools zu installieren, geben Sie auf der Kommandozeile die Befehle aus Listing 1 ein. Die CAN-Schnittstellen der beiden PiXtend-Boards verbinden Sie nun eins zu eins miteinander. Dazu können Sie auf der kurzen Distanz beliebige Leitungen verwenden. Den kompletten Aufbau der Hardware zeigt Abbildung 1.

Listing 1

Tool-Installation

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install can-utils
Abbildung 1: Der komplette CAN-Bus-Testaufbau.

Abbildung 1: Der komplette CAN-Bus-Testaufbau.

Um die CAN-Schnittstelle des PiXtend zu aktivieren, braucht es noch ein paar zusätzliche Parameter in der Datei /boot/config.txt. Dazu öffnen Sie die Datei mit Root-Rechten in einem Editor (etwa über sudo nano /boot/config.txt) und hängen die Zeilen aus Listing 2 an das Ende der Konfigurationsdatei an. Mit [Strg]+[O][Eingabe] und [Strg]+[X] sichern Sie die Änderungen und beenden Nano. Die Anpassung müssen Sie auf dem System des zweiten Raspberry Pi wiederholen.

Listing 2

Anpassungen in config.txt

dtoverlay=mcp2515-can1
dtparam=oscillator=20000000
dtparam=interrupt=4
dtparam=spimaxfrequency=1000000
dtoverlay=spi-bcm2835-overlay
dtoverlay=spi-dma
dtdebug=on

Danach müssen Sie verhindern, dass das System das Kernel-Modul für den CAN-Controller lädt, bevor alle Konfigurationsarbeiten an der Hardware abgeschlossen sind. Dazu tragen Sie die Zeile blacklist mcp251x in die Datei /etc/modprobe.d/raspi-blacklist.conf ein, am einfachsten wieder mit Nano (sudo nano /etc/modprobe.d/raspi-blacklist.conf). Damit das System die zusätzlichen Kernel-Parameter aktiviert, starten Sie nun das System mit sudo reboot neu.

Um jetzt den CAN-Controller auf dem PiXtend verwenden zu können, müssen Sie noch einige Schritte auf den RasPi-Systemen erledigen. Es gilt, die SPI-Schnittstelle zu aktivieren (GPIO24 als Output auf 1 setzen) sowie das CS-Signal für den MCP2515 zu setzen (GPIO27 als Output auf 1 setzen). Außerdem müssen Sie das Kernel-Modul mcp251x laden sowie das Interface can0 konfigurieren und hochfahren.

Da diese Schritte bei jedem Start der CAN-Schnittstelle anfallen, arbeiten Sie alle dafür nötigen Kommandos in einem einfachen Shell-Skript ab. So müssen Sie die einzelnen Befehle nicht immer wieder neu eingeben. Das entsprechende Skript zeigt Listing 3. Damit Sie es später direkt aufrufen können, sichern Sie es unter dem Namen activateCAN.sh in /usr/local/bin/ und machen es mit chmod +x /usr/local/bin/activateCAN.sh ausführbar.

Listing 3

activateCAN.sh

#!/bin/sh
if [ ! -d "/sys/class/gpio/gpio24" ]; then
  echo "24" > /sys/class/gpio/export
fi
echo "out" > /sys/class/gpio/gpio24/direction
echo "1" > /sys/class/gpio/gpio24/value
if [ ! -d "/sys/class/gpio/gpio27" ]; then
  echo "27" > /sys/class/gpio/export
fi
echo "out" > /sys/class/gpio/gpio27/direction
echo "1" > /sys/class/gpio/gpio27/value
sleep 1
sudo modprobe mcp251x
sudo /sbin/ip link set can0 up type can bitrate 125000
sudo ip -s -d link show can0

Um zu überprüfen, ob die CAN-Schnittstelle nun ordnungsgemäß in das System eingebunden wurde, werfen Sie einen Blick in die Ausgabe des Kommandos ipconfig. Es listet die aktuelle Konfiguration aller aktiven Netzwerkschnittstellen auf. Hier sollte mit can0 jetzt auch die CAN-Schnittstelle erscheinen (Abbildung 2).

Abbildung 2: Die CAN-Schnittstelle ist bei den Netzwerkgeräten aufgeführt.

Abbildung 2: Die CAN-Schnittstelle ist bei den Netzwerkgeräten aufgeführt.

Für einen ersten CAN-Bus-Test rufen Sie auf einem der beiden RasPi-Systeme das Kommando candump can0 auf. Das Programm lauscht auf dem Bus und zeigt umgehend alle eintreffenden Nachrichten in der Konsole an, ohne sie weiter zu beachten. Damit Candump etwas zu empfangen hat, schieben Sie auf dem zweiten System mit cansend can0:*123#A1B2C3 eine Nachricht im Hex-Format auf den CAN-Bus.

Um die Datenübertragung etwas wirklichkeitsnaher zu beobachten, generieren Sie alternativ mit dem Tool cangen can0 zufällige Daten. Damit sieht die Ausgabe von Candump dann schon erheblich lebendiger aus (Abbildung 3).

Abbildung 3: Mit Cangen erzeugte Testdaten.

Abbildung 3: Mit Cangen erzeugte Testdaten.

Fazit

Schon ein wenig zusätzliche Hardware genügt, um von einem Raspberry Pi aus via CAN-Bus auf andere Geräte zuzugreifen. Zugegeben: Ein PiXtend-Board ist tatsächlich etwas überdimensioniert, um damit nur eine CAN-Schnittstelle bereitzustellen. Aber die zwei Platinen waren noch im Fundus des Autors, und es machte einfach Spaß, damit zu arbeiten. (cla)

Der Autor

Der gelernte Elektroniker Martin Mohr erlebte die komplette Entwicklung der modernen Computertechnik mit. Nach einem Informatikstudium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte die alte Liebe zur Elektronik wieder.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben