Khadas Docs

Amazing Khadas, always amazes you!

User Tools

Site Tools


Sidebar

products:sbc:vim4:applications:gpio:40pin-header

This is an old revision of the document!


VIM4 GPIO Header

Universal GPIO 40 pins board header, used for communication between board and different external devices.

Reference table

Current GPIO numbers valid for vendor kernel only. Mainline linux kernel GPIO numbers will be different…

Linux

GPIO num Name Pin Pin Name GPIO num
5V 1 21 GND
5V 2 22 PIN.Y17 501
HUB_D4N 3 23 PIN.Y18 502
HUB_D4P 4 24 GND
GND 5 25 PIN.T20 466
VCCMCU 6 26 PIN.T21 467
MCUBOOT0 7 27 3V3
MCUSWDIO 8 28 GND
GND 9 29 PIN.T1 447
ADC_CH6 10 30 PIN.T0 446
VDD1V8 11 31 PIN.T3 449
ADC_CH3 12 32 PIN.T2 448
420 SPDIFOUT 13 33 PIN.T4 450
GND 14 34 GND
491 PIN.Y7 15 35 PIN.Y8 492
490 PIN.Y6 16 36 PIN.T18 464
GND 17 37 PIN.T19 465
UART_RX / PIN.D1 18 38 PWR_EN1
UART_TX / PIN.D2 19 39 PIN.D15 417
3V3 20 40 GND

Android

Calculation:

GPIO PIN number calculation method: Number = Range Base + Pin Index

  • Range Base refers to the base value of GPIO ranges
  • Pin Index refers to the sorting of the GPIO pins you need to calculate in the corresponding ranges

Example:

1. Get Range Base:

# cat /sys/kernel/debug/pinctrl/fe000000.apb4\:pinctrl\@4000-pinctrl-meson/gpio-ranges
GPIO ranges handled:
0: periphs-banks GPIOS [430 - 511] PINS [0 - 81]

2. Get Pin Index:

# cat /sys/kernel/debug/pinctrl/fe000000.apb4\:pinctrl\@4000-pinctrl-meson/pins
registered pins: 82
pin 22 (GPIOE_0)  fe000000.apb4:pinctrl@4000
pin 23 (GPIOE_1)  fe000000.apb4:pinctrl@4000
pin 0 (GPIOB_0)  fe000000.apb4:pinctrl@4000
pin 1 (GPIOB_1)  fe000000.apb4:pinctrl@4000
pin 2 (GPIOB_2)  fe000000.apb4:pinctrl@4000
pin 3 (GPIOB_3)  fe000000.apb4:pinctrl@4000
pin 4 (GPIOB_4)  fe000000.apb4:pinctrl@4000
...
pin 76 (GPIOZ_8)  fe000000.apb4:pinctrl@4000
pin 77 (GPIOZ_9)  fe000000.apb4:pinctrl@4000
pin 78 (GPIOZ_10)  fe000000.apb4:pinctrl@4000
...

3. Calculate Number:

Here is an example for GPIOZ_10:

GPIOZ_10 = Range Base + Pin Index = 430 + 78 = 508

2024/08/06 05:47 · nick

GPIO usage examples

Please make sure that the GPIOs you want to use are not configured as other functions, if they are, you can follow Device Tree Overlay to configure them as normal GPIOs.

When you get the GPIO number, you can follow the steps below to control it. Here we take GPIO number 465 as an example.

Export GPIO

$ echo 465 | sudo tee /sys/class/gpio/export

Set-up GPIO direction

We can configure direction as input or output.

$ echo out | sudo tee /sys/class/gpio/gpio465/direction # Set GPIO output
$ echo in  | sudo tee /sys/class/gpio/gpio465/direction # Set GPIO input

Set GPIO value

$ echo 1 | sudo tee /sys/class/gpio/gpio465/value # Set GPIO output high
$ echo 0 | sudo tee /sys/class/gpio/gpio465/value # Set GPIO output low

Get GPIO value

$ cat /sys/class/gpio/gpio465/value # Get GPIO input value

Unexport GPIO

$ echo 465 | sudo tee /sys/class/gpio/unexport

Troubleshooting

If you got the similar error below, it means that the PIN you try to export is used for another function, you need to edit Device Tree Overlay configuration file to set the PIN as normal GPIO.

$ echo 465 | sudo tee /sys/class/gpio/export 
tee: /sys/class/gpio/export: Invalid argument
2022/06/30 00:01 · nick
Last modified: 2024/08/06 06:02 by nick