Mal som problém s príkazom gpio na Raspberry Pi 4. Kontrola jeho verzie pomocou gpio -v vyprodukovala nasledujúci výstup:

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

Nedokázalo rozpoznať dosku, čo je vidieť z Type: Unknown17. Ďalší problém bol, že verzia zostávala na 2.50 a odmietala sa aktualizovať vyššie ani po úplnej aktualizácii:

sudo apt update && sudo apt full-upgrade

Začal som to riešiť, pretože pokus o čítanie stavu GPIO bol neúspešný:

gpio readall

A výsledkom bola nasledujúca chyba:

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

Nie som si istý, čo číslo 17 momentálne znamená, ale zhoduje sa s neznámym typom dosky uvedeným vyššie.

Manuálna aktualizácia #

Jedným zo spôsobov riešenia situácie je manuálna aktualizácia balíčka:

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

Teraz môžeme z gpio -v dostať zmysluplnejší výstup:

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.

Verzia bola aktualizovaná, typ je teraz rozpoznaný a pamäť je tiež správne zobrazená.

Kontrola stavu GPIO #

Získanie stavu GPIO cez gpio readall tiež funguje:

Snímka obrazovky príkazu gpio readall na Raspberry Pi 4B

Kvôli SEO a úplnosti je tabuľka nižšie rozdelená aj na ľavú a pravú sekciu.

Ľavá strana #

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

Pravá strana #

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

Stále však existuje jeden problém.

Alternatívna funkcia pre GPIO #

Pokus o zmenu alternatívnej funkcie pinu:

sudo pigs m 17 3

Zlyhá s chybou socket connect failed. Ale to sa dá ľahko vyriešiť reštartovaním démona pigpio, aby mohol načítať aktualizované súbory:

sudo systemctl restart pigpiod.service

Spustenie sudo pigs m 17 3 nevyprodukuje žiadnu chybu. Overenie stavu možno urobiť napríklad takto:

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

Áno, dosť obtiažne, viem. Nepodarilo sa mi nájsť spôsob, ako spustiť gpio readall pre jeden pin. Vyššie uvedené vypíše nasledovné:

Riadok gpio readall obsahujúci konkrétny pin

Namiesto IN je teraz režim pinu 17 ALT3, čo znamená RTS0.

Poznámka pre ArchLinux ARM #

V prípade, že sa ocitnete na ArchLinux ARM a potrebujete manipulovať s GPIO, malo by to byť menej problematické. ArchLinux ARM má zabudovaný ďalší repozitár nazvaný alarm, čo je skratka pre, správne ste uhádli, ArchLinux ARM. Tento repozitár je predvolene povolený a nachádza sa medzi oficiálnymi repozitármi, v Archu nazvanými core, extra, community a multilib, kde posledný z nich je potrebné najprv povoliť.

Získanie softvéru súvisiaceho s GPIO je dosiahnuteľné takto:

yay gpio

Výsledok je ľahko pochopiteľný z nasledujúcej snímky obrazovky:

Výsledok príkazu yay gpio na Archlinux ARM, repozitár alarm je prítomný medzi relevantnými výsledkami ako community/gpio-utils, alarm/wiringpi alebo aur/pigpio

Repozitár alarm je prítomný medzi relevantnými výsledkami ako community/gpio-utils, alarm/wiringpi alebo aur/pigpio.

Toto je 94. príspevok #100daystooffload.

Odkazy #