I have had a problem with the gpio command on Raspberry Pi 4. Checking it's version with gpio -v produced the following output:

gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Unknown17, Revision: 04, Memory: 0MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.4
  * This Raspberry Pi supports user-level GPIO access

It could not detect the board as can be seen by Type: Unknown17. Another problem was that it was sitting at 2.50 refusing to update higher even with the full upgrade:

sudo apt update && sudo apt full-upgrade

I have start solving this all, because trying to read the GPIO state was unsuccessful:

gpio readall

And resulted in the following error:

Oops - unable to determine board type... model: 17

I am not sure what the number 17 stands for right now, but it coincides with the above unknown board type.

Manual upgrade

One of the ways to solve the situation is to upgrade the package manually:

wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

We can receive a more sensible output out of gpio -v now:

gpio version: 2.52
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 4B, Revision: 04, Memory: 8192MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.4
  * This Raspberry Pi supports user-level GPIO access.

The version was updated, the type is now recognized and the memory is correctly displayed as well.

Checking state of GPIOs

Getting the GPIO state via gpio readall works as well:

A screenshot on gpio readall command on Raspberry Pi 4B

For the sake of SEO and completeness, the table is split out into the left and right sections below as well.

Left side

BCMwPiNameModeVPhysical
3.3v1
28SDA.1ALT013
39SCL.1ALT015
47GPIO. 7IN17
0v9
170GPIO. 0IN011
272GPIO. 2IN013
223GPIO. 3IN015
3.3v17
1012MOSIALT0019
913MISOALT0021
1114SCLKALT0023
0v25
030SDA.0IN127
521GPIO.21IN129
622GPIO.22IN131
1323GPIO.23IN033
1924GPIO.24IN035
2625GPIO.25IN037
0v39

Right side

PhysicalVModeNamewPiBCM
25v
45v
60v
81ALT5TxD1514
101ALT5RxD1615
120INGPIO. 1118
140v
161OUTGPIO. 4423
181OUTGPIO. 5524
200v
220INGPIO. 6625
241OUTCE0108
261OUTCE1117
281INSCL.0311
300v
320INGPIO.262612
340v
360INGPIO.272716
380INGPIO.282820
400INGPIO.292921

There is still a problem however.

Alternate function for a GPIO

Trying to change the pin alternate function:

sudo pigs m 17 3

Fails with socket connect failed error. But this can be solved easily by restarting the pigpio daemon, so it can pick up the upgraded files:

sudo systemctl restart pigpiod.service

Running the sudo pigs m 17 3 produces no error. Verifying the state can be done for example as follows:

gpio readall | grep -e BCM -e ALT3 -e + | head -5

Yeah, quite obtrusive, I know. I could not find a way to run gpio readall for a single pin. The above outputs the following:

A line of gpio readdall containing the precise pin

Instead of IN, the mode for the pin 17 is now ALT3, which stands for RTS0.

A note for ArchLinux ARM

In case you fin yourself using ArchLinux ARM and need to manipulate GPIOs, it should be less of a trouble. ArchLinux ARM has another repository baked in called alarm, which is a shorthand for, you guessed it, ArchLinux ARM. This repository is enabled by default and is there among official repositories, in Arch named core, extra, community and multilib, where the latter needs to be enabled first.

Getting hold of the GPIO related software is achievable like this:

yay gpio

The result can be understood easily with the following screenshot:

The result of yay gpio command on Archlinux ARM, the alarm repository can is present among the relevant results like community/gpio-utils, alarm/wiringpi or aur/pigpio

The alarm repository can is present among the relevant results like community/gpio-utils, alarm/wiringpi or aur/pigpio.

This is a 94th post of #100daystooffload.