Android: How to map GPIO list in shell with real pin on VIM 3 board

Which Khadas SBC do you use?

VIM3

Which system do you use? Android, Ubuntu, OOWOW or others?

Android

Which version of system do you use? Khadas official images, self built images, or others?

VIM3_Pie_V230131

Please describe your issue below:

@xiong.zhang
How I can mapping GPIO from shell with real GPIO pin on VIM3 device

Example here’s GPIO list from shell

kvim3:/ $ cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/gpio-ranges
GPIO ranges handled:
0: periphs-banks GPIOS [410 - 495] PINS [0 - 85]
kvim3:/ $ cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/pins
registered pins: 86
pin 0 (GPIOV_0)  pinctrl@ff634480
pin 1 (GPIOZ_0)  pinctrl@ff634480
pin 2 (GPIOZ_1)  pinctrl@ff634480
pin 3 (GPIOZ_2)  pinctrl@ff634480
pin 4 (GPIOZ_3)  pinctrl@ff634480
pin 5 (GPIOZ_4)  pinctrl@ff634480
pin 6 (GPIOZ_5)  pinctrl@ff634480
pin 7 (GPIOZ_6)  pinctrl@ff634480
pin 8 (GPIOZ_7)  pinctrl@ff634480
pin 9 (GPIOZ_8)  pinctrl@ff634480
pin 10 (GPIOZ_9)  pinctrl@ff634480
pin 11 (GPIOZ_10)  pinctrl@ff634480
pin 12 (GPIOZ_11)  pinctrl@ff634480
pin 13 (GPIOZ_12)  pinctrl@ff634480
pin 14 (GPIOZ_13)  pinctrl@ff634480
pin 15 (GPIOZ_14)  pinctrl@ff634480
pin 16 (GPIOZ_15)  pinctrl@ff634480
pin 17 (GPIOH_0)  pinctrl@ff634480
pin 18 (GPIOH_1)  pinctrl@ff634480
pin 19 (GPIOH_2)  pinctrl@ff634480
pin 20 (GPIOH_3)  pinctrl@ff634480
pin 21 (GPIOH_4)  pinctrl@ff634480
pin 22 (GPIOH_5)  pinctrl@ff634480
pin 23 (GPIOH_6)  pinctrl@ff634480
pin 24 (GPIOH_7)  pinctrl@ff634480
pin 25 (GPIOH_8)  pinctrl@ff634480
pin 26 (BOOT_0)  pinctrl@ff634480
pin 27 (BOOT_1)  pinctrl@ff634480
pin 28 (BOOT_2)  pinctrl@ff634480
pin 29 (BOOT_3)  pinctrl@ff634480
pin 30 (BOOT_4)  pinctrl@ff634480
pin 31 (BOOT_5)  pinctrl@ff634480
pin 32 (BOOT_6)  pinctrl@ff634480
pin 33 (BOOT_7)  pinctrl@ff634480
pin 34 (BOOT_8)  pinctrl@ff634480
pin 35 (BOOT_9)  pinctrl@ff634480
pin 36 (BOOT_10)  pinctrl@ff634480
pin 37 (BOOT_11)  pinctrl@ff634480
pin 38 (BOOT_12)  pinctrl@ff634480
pin 39 (BOOT_13)  pinctrl@ff634480
pin 40 (BOOT_14)  pinctrl@ff634480
pin 41 (BOOT_15)  pinctrl@ff634480
pin 42 (GPIOC_0)  pinctrl@ff634480
pin 43 (GPIOC_1)  pinctrl@ff634480
pin 44 (GPIOC_2)  pinctrl@ff634480
pin 45 (GPIOC_3)  pinctrl@ff634480
pin 46 (GPIOC_4)  pinctrl@ff634480
pin 47 (GPIOC_5)  pinctrl@ff634480
pin 48 (GPIOC_6)  pinctrl@ff634480
pin 49 (GPIOC_7)  pinctrl@ff634480
pin 50 (GPIOA_0)  pinctrl@ff634480
pin 51 (GPIOA_1)  pinctrl@ff634480
pin 52 (GPIOA_2)  pinctrl@ff634480
pin 53 (GPIOA_3)  pinctrl@ff634480
pin 54 (GPIOA_4)  pinctrl@ff634480
pin 55 (GPIOA_5)  pinctrl@ff634480
pin 56 (GPIOA_6)  pinctrl@ff634480
pin 57 (GPIOA_7)  pinctrl@ff634480
pin 58 (GPIOA_8)  pinctrl@ff634480
pin 59 (GPIOA_9)  pinctrl@ff634480
pin 60 (GPIOA_10)  pinctrl@ff634480
pin 61 (GPIOA_11)  pinctrl@ff634480
pin 62 (GPIOA_12)  pinctrl@ff634480
pin 63 (GPIOA_13)  pinctrl@ff634480
pin 64 (GPIOA_14)  pinctrl@ff634480
pin 65 (GPIOA_15)  pinctrl@ff634480
pin 66 (GPIOX_0)  pinctrl@ff634480
pin 67 (GPIOX_1)  pinctrl@ff634480
pin 68 (GPIOX_2)  pinctrl@ff634480
pin 69 (GPIOX_3)  pinctrl@ff634480
pin 70 (GPIOX_4)  pinctrl@ff634480
pin 71 (GPIOX_5)  pinctrl@ff634480
pin 72 (GPIOX_6)  pinctrl@ff634480
pin 73 (GPIOX_7)  pinctrl@ff634480
pin 74 (GPIOX_8)  pinctrl@ff634480
pin 75 (GPIOX_9)  pinctrl@ff634480
pin 76 (GPIOX_10)  pinctrl@ff634480
pin 77 (GPIOX_11)  pinctrl@ff634480
pin 78 (GPIOX_12)  pinctrl@ff634480
pin 79 (GPIOX_13)  pinctrl@ff634480
pin 80 (GPIOX_14)  pinctrl@ff634480
pin 81 (GPIOX_15)  pinctrl@ff634480
pin 82 (GPIOX_16)  pinctrl@ff634480
pin 83 (GPIOX_17)  pinctrl@ff634480
pin 84 (GPIOX_18)  pinctrl@ff634480
pin 85 (GPIOX_19)  pinctrl@ff634480

How to know which one is pin 39 (GPIODZ_15) in hardware spec table?

@pinij Access GPIO Uasge | Khadas Documentation
For example, get the number of GPIODZ_15 :
Number(GPIODZ_15) = bank + pin = 410 + 16= 426

Thank you @goenjoy

I have more question on VIM3, can I sent high level output for PIN UARTC_RX(15), UARTC_TX(16) and what’s their pin address?
Because my system need to sent high level output on 4 PINs to trigger the relay (now I can sent high level output only on GPIOH_4).

Number(GPIOH_5) = bank + pin = 410 + 21 = 432
bank:

cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/gpio-ranges

# cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/gpio-ranges
GPIO ranges handled:
0: periphs-banks GPIOS [410 - 495] PINS [0 - 85]

pin:

cat /sys/kernel/debug/pinctrl/pinctrl@ff634480/pins

pin 15 (GPIOZ_14)  pinctrl@ff634480
pin 16 (GPIOZ_15)  pinctrl@ff634480

So
GPIOZ_14 = 410 + 15 = 425
GPIOZ_15 = 410 + 16 = 426

Get ROOT permissions:
$ su

Apply for GPIO:
#  echo 425 > /sys/class/gpio/export
#  echo 426 > /sys/class/gpio/export

Set the output mode:
# echo out > /sys/class/gpio/gpio425/direction
# echo out > /sys/class/gpio/gpio426/direction

Give up:
# echo 1 >  /sys/class/gpio/gpio425/value
# echo 1 >  /sys/class/gpio/gpio426/value

Low:
# echo 0 >  /sys/class/gpio/gpio425/value
# echo 0 >  /sys/class/gpio/gpio426/value

Read GPIO:
# cat /sys/class/gpio/gpio425/value
# cat /sys/class/gpio/gpio426/value

Release GPIO:
#  echo 425 > /sys/class/gpio/unexport
#  echo 426 > /sys/class/gpio/unexport

Thank you @xiong.zhang for details but I want to clarify my thoughts which pin is GPIOZ_14 and GPIOZ_15?

GPIOZ_14 and GPIOZ_15 are just for example. You can operate the gpioz_15 in the figure below