This is an old revision of the document!
Universal GPIO 40 pins board header, used for communication between board and different external devices.
Current GPIO numbers valid for vendor kernel only. Mainline linux kernel GPIO numbers will be different…
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 |
Get GPIO number:
GPIO PIN number calculation method: Number = Range Base + Pin Index
Range Base
refers to the base value of GPIO rangesPin Index
refers to the sorting of the GPIO pins you need to calculate in the corresponding rangesExample:
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
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.
$ echo 465 | sudo tee /sys/class/gpio/export
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
$ 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
$ cat /sys/class/gpio/gpio465/value # Get GPIO input value
$ echo 465 | sudo tee /sys/class/gpio/unexport
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