2.4 KiB
Helios64 provides 16 GPIOs via a 20-Pin header (P5). Those GPIOs are provided via an 16-bit IO Expander PCA9655E connected to I2C bus 2.
Pinout
PIN | Port | Remarks |
---|---|---|
1 | - | 3.3V Supply |
2 | - | 5V Supply |
3 | - | GND |
4 | EXP_P0_0 | |
5 | EXP_P0_1 | |
6 | EXP_P0_2 | |
7 | EXP_P0_3 | |
8 | EXP_P0_4 | |
9 | EXP_P0_5 | |
10 | EXP_P0_6 | |
11 | EXP_P0_7 | |
12 | EXP_P1_0 | |
13 | EXP_P1_1 | |
14 | EXP_P1_2 | |
15 | EXP_P1_3 | |
16 | EXP_P1_4 | |
17 | EXP_P1_5 | |
18 | EXP_P1_6 | |
19 | EXP_P1_7 | |
20 | - | GND |
Accessing GPIOs under Linux
If the kernel supports debugfs (CONFIG_DEBUG_FS=y), list of GPIOs can be retrieved with the following command
sudo cat /sys/kernel/debug/gpio
Look for the gpiochip5: GPIOs XXX-YYY section, whereas XXX is first GPIO number and YYY is last GPIO number of IO expander.
gpiochip5: GPIOs 496-511, parent: i2c/2-0020, 2-0020, can sleep:
Another way to get first GPIO number of the IO expander
cat /sys/bus/i2c/devices/2-0020/gpio/gpiochip*/base
Therefore the mapping between header P5 Pins and Sysfs GPIO numbers will be as described in the following table
GPIO Table
PIN | Sysfs GPIO number | Remarks |
---|---|---|
1 | - | 3.3V Supply |
2 | - | 5V Supply |
3 | - | GND |
4 | 496 | |
5 | 497 | |
6 | 498 | |
7 | 499 | |
8 | 500 | |
9 | 501 | |
10 | 502 | |
11 | 503 | |
12 | 504 | |
13 | 505 | |
14 | 506 | |
15 | 507 | |
16 | 508 | |
17 | 509 | |
18 | 510 | |
19 | 511 | |
20 | - | GND |
GPIO Control
1. Export the GPIO number you want to use
echo N | sudo tee -a /sys/class/gpio/export
2. Set the direction, "out" for Output or "in" for Input
echo DIRECTION | sudo tee -a /sys/class/gpio/gpioN/direction
3. Now you can read or change the GPIO value
To read GPIO value
cat /sys/class/gpio/gpioN/value
To change GPIO value (only if GPIO set as Output)
echo VALUE | sudo tee -a /sys/class/gpio/gpioN/value
!!! notes Pay attention to the path, /sys/class/gpio/gpioN/ where N is the GPIO number.