Table of Contents

VIM1S 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.D7 461
USB_DM 3 23 PIN.D6 460
USB_DP 4 24 GND
GND 5 25 PIN.Z11 509
VCCMCU 6 26 PIN.Z12 510
MCU_NRST 7 27 3V3
MCU_SWIM 8 28 GND
GND 9 29 PIN.Z1 499
ADC_CH0 10 30 PIN.Z6 504
VDD1V8 11 31 PIN.Z2 500
ADC_CH2 12 32 PIN.Z0 498
470 SPDIFOUT 13 33 PIN.Z3 501
GND 14 34 GND
457 PIN.D3 15 35 PIN.Z5 503
456 PIN.D2 16 36 PIN.Z8 506
GND 17 37 PIN.Z10 508
UART_RX / PIN.D1 18 38 PWR_EN1
UART_TX / PIN.D0 19 39 PIN.H9 475
3V3 20 40 GND

Android

GPIO num Name Pin Pin Name GPIO num
5V 1 21 GND
5V 2 22 I2C0_SCK
USB_DM 3 23 I2C0_SDA
USB_DP 4 24 GND
GND 5 25 I2C1_SCK
VCCMCU 6 26 I2C1_SDA
MCU_NRST 7 27 3V3
MCU_SWIM 8 28 GND
GND 9 29 I2S_SCLK
ADC_CH0 10 30 I2S_MCLK
VDD1V8 11 31 I2S_SDO
ADC_CH2 12 32 I2S_LRCK
SPDIFOUT 13 33 I2S_SDI
GND 14 34 GND
UART_RX 15 35 PWM_F
UART_TX 16 36 PIN.Z8 506
GND 17 37 PIN.Z10 508
Linux_RX 18 38 PWR_EN1
Linux_TX 19 39 PIN.H9 475
3V3 20 40 GND

Get GPIO number

If the GPIO number above changed, you can also follow the documentation to get the gpio number.

GPIO Usage Examples

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.

Export GPIO

Make the GPIO accessible to user space:

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

Set GPIO Direction

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 

Set GPIO value

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 

Read GPIO Input 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).

Unexport GPIO

When finished, release the GPIO:

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

Troubleshooting

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.

2022/06/30 00:01 · nick