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.D5 | 417 | |
| 3V3 | 20 | 40 | GND |
| GPIO num | Name | Pin | Pin | Name | GPIO num |
|---|---|---|---|---|---|
| 5V | 1 | 21 | GND | ||
| 5V | 2 | 22 | I2CM_F_SCL | ||
| HUB_D4N | 3 | 23 | I2CM_F_SDA | ||
| HUB_D4P | 4 | 24 | GND | ||
| GND | 5 | 25 | I2CM_A_SCL | ||
| VCCMCU | 6 | 26 | I2CM_A_SDA | ||
| MCUBOOT0 | 7 | 27 | 3V3 | ||
| MCUSWDIO | 8 | 28 | GND | ||
| GND | 9 | 29 | I2S_SCLK1 | ||
| ADC_CH6 | 10 | 30 | I2S_MCLK1 | ||
| VDD1V8 | 11 | 31 | I2S_SDO1 | ||
| ADC_CH3 | 12 | 32 | I2S_LRCLK1 | ||
| SPDIFOUT | 13 | 33 | I2S_SDI1 | ||
| GND | 14 | 34 | GND | ||
| UART_E_RX | 15 | 35 | PWM_F | ||
| UART_E_TX | 16 | 36 | PIN.T18 | 464 | |
| GND | 17 | 37 | PIN.T19 | 465 | |
| Linux_RX | 18 | 38 | PWR_EN1 | ||
| Linux_TX | 19 | 39 | PIN.D5 | 417 | |
| 3V3 | 20 | 40 | GND |
If the GPIO number above changed, you can also follow the documentation to get the gpio number.
Before using a GPIO, ensure it is not configured for another function (e.g., I2C, SPI). If it is, you can reconfigure it as a standard GPIO by applying a Device Tree Overlay.
Once you have identified the correct GPIO number (e.g., 465), follow these steps to control it via the sysfs interface.
Make the GPIO accessible to user space:
$ echo 465 | sudo tee /sys/class/gpio/export
Configure the GPIO as either an input or an output:
# Set GPIO output $ echo out | sudo tee /sys/class/gpio/gpio465/direction # Set GPIO input $ echo in | sudo tee /sys/class/gpio/gpio465/direction
If configured as an output, you can set its logic level:
# Set GPIO output high $ echo 1 | sudo tee /sys/class/gpio/gpio465/value # Set GPIO output low $ echo 0 | sudo tee /sys/class/gpio/gpio465/value
If configured as an input, read its current logic level:
$ cat /sys/class/gpio/gpio465/value
The command returns 0 (low) or 1 (high).
When finished, release the GPIO:
$ echo 465 | sudo tee /sys/class/gpio/unexport
If you encounter an error similar to the following when exporting, the GPIO pin is likely reserved for another function (e.g., by the device tree):
echo 465 | sudo tee /sys/class/gpio/export tee: /sys/class/gpio/export: Invalid argument
Solution: Modify the Device Tree Overlay configuration to free the pin and define it as a standard GPIO.