Heute bin ich über ein Kommando gestolpert, das mir bisher nicht aufgefallen ist und das tatsächlich relativ neu ist: raspi-gpio
. Dieses Kommando erfüllt eine ähnliche Aufgabe wie das gpio
-Kommando von WiringPi: Es ermöglicht es, den Zustand der GPIOs auszulesen bzw. zu verändern. Darüber hinaus kann es eine Menge Details über die möglichen alternativen Funktionen von GPIOs ermitteln.
Basics
Das Kommando ist Teil des Pakets raspi-gpio
. Dieses Paket ist unter Raspbian Jessie sowie unter Ubuntu MATE 15.10 standardmäßig installiert. Laut dem Changelog (siehe /usr/share/doc/raspi-gpio/changelog
) wurde die erste Version des Kommandos am 13.5.2015 freigegeben.
Das Kommando funktioniert auf aktuellen Raspbian-Versionen ohne root
-Rechte. Es gibt keine man
-Seite, aber einen relativ ausführlichen help
-Text, den ich am Ende dieses Beitrags hinzugefügt habe.
Die GPIOs werden mit den Nummern gemäß der Dokumentation des Raspberry-Pi-SoC-Herstellers Broadcom angesprochen. Beispielsweise bezieht sich raspi-gpio get 23
auf den GPIO 23, der auf dem Raspberry Pi mit Pin 16 des J8-Headers verbunden ist. (Die Nummerierung entspricht der des WiringPi-Kommandos gpio
mit der Option -g
.)
raspi-gpio help
zeigt die Dokumentation zu dem Kommando an.-
raspi-gpio get [gpionr]
ermittelt den aktuellen Status aller GPIOs bzw. des angegebenen GPIOs. -
raspi-gpio funcs [gpionr]
ermittelt, welche alternative Funktionen der angegebene GPIO bzw. alle GPIOs erfüllen können. -
raspi-gpio set gpionr status1 status2 status3
verändert den Status des angegeben GPIOs. Mögliche Schlüsselwörter anstelle vonstatus1
,status2
etc. sind:ip
= Input,op
= Output,dl
= Zustand Low (Drive Low),dh
= Zustand High (Drive High),pu
= Pull-up-Widerstand aktiv,pd
= Pull-down-Widerstand aktiv,pn
= keine Pull-up/down-Funktion,a0
bisa5
= alternative Funktion n aktivieren. Soweit sich sinnvolle Kombinationen ergeben, dürfen mehrere der obigen Schlüsselwörter auf einmal genannt werden, jeweils getrennt durch Leerzeichen. Welche alternative Funktionen ein GPIO unterstützt und wie diese nummeriert sind, geht ausraspi-gpio func
hervor.
Beispiel
Das erste Kommando ermittelt, welche Funktionen der GPIO mit der Nummer 23 unterstützt. Auf dem Raspberry Pi ist dieser GPIO mit Pin 16 des J8-Headers verbunden. Das zweite Kommando nutzt diesen GPIO als simplen Signalausgang, wobei der Pegel auf High gesetzt wird (3,3~V). Eine mit Pin 16 verbunden LED würde nun leuchten. Das dritte Kommando verifiziert den Zustand von GPIO 23.
pi$ raspi-gpio funcs 23
GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
23, DOWN, SD0_CMD, SD15, DPI_D19, SD1_CMD, ARM_RTCK, -
pi$ raspi-gpio set 23 op dh
pi$ raspi-gpio get 23
GPIO 23: level=1 fsel=1 func=OUTPUT
Help-Text
raspi-gpio help
WARNING! raspi-gpio set writes directly to the GPIO control registers
ignoring whatever else may be using them (such as Linux drivers) -
it is designed as a debug tool, only use it if you know what you
are doing and at your own risk!
The raspi-gpio tool is designed to help hack / debug BCM283x GPIO.
Running raspi-gpio with the help argument prints this help.
raspi-gpio can get and print the state of a GPIO (or all GPIOs)
and can be used to set the function, pulls and value of a GPIO.
raspi-gpio must be run as root.
Use:
raspi-gpio get [GPIO]
OR
raspi-gpio set <GPIO> [options]
OR
raspi-gpio funcs [GPIO]
Note that omitting [GPIO] from raspi-gpio get prints all GPIOs.
raspi-gpio funcs will dump all the possible GPIO alt funcions in CSV format
or if [GPIO] is specified the alternate funcs just for that specific GPIO.
Valid [options] for raspi-gpio set are:
ip set GPIO as input
op set GPIO as output
a0-a5 set GPIO to alternate function alt0-alt5
pu set GPIO in-pad pull up
pd set GPIO pin-pad pull down
pn set GPIO pull none (no pull)
dh set GPIO to drive to high (1) level (only valid if set to be an output)
dl set GPIO to drive low (0) level (only valid if set to be an output)
Examples:
raspi-gpio get Prints state of all GPIOs one per line
raspi-gpio get 20 Prints state of GPIO20
raspi-gpio set 20 a5 Set GPIO20 to ALT5 function (GPCLK0)
raspi-gpio set 20 pu Enable GPIO20 ~50k in-pad pull up
raspi-gpio set 20 pd Enable GPIO20 ~50k in-pad pull down
raspi-gpio set 20 op Set GPIO20 to be an output
raspi-gpio set 20 dl Set GPIO20 to output low/zero (must already be set as an output)
raspi-gpio set 20 ip pd Set GPIO20 to input with pull down
raspi-gpio set 35 a0 pu Set GPIO35 to ALT0 function (SPI_CE1_N) with pull up
raspi-gpio set 20 op pn dh Set GPIO20 to ouput with no pull and drving high