3.7 KiB
User Accessible GPIOs (J12)
Helios4 provides 12 GPIOs on header J12 which can be used for user application. Those GPIOs are provided via an 16-bit IO Expander PCA9655E connected to I2C bus 0.
Pinout Table
Pin | Port | Remarks |
---|---|---|
1 | - | 3.3V supply |
2 | IO0_2 | |
3 | IO0_3 | |
4 | IO0_4 | |
5 | IO0_7 | |
6 | IO1_0 | |
7 | IO1_1 | |
8 | IO1_2 | |
9 | IO1_3 | |
10 | IO1_4 | |
11 | IO1_5 | |
12 | IO1_6 | |
13 | IO1_7 | |
14 | - | GND |
!!! warning Ports IO0_0, IO0_1, IO0_5, and IO0_6 are reserved for system use.
!!! important It is not advisable to access the I2C IO Expander directly using I2C utilities.
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 gpiochip2: GPIOs XXX-YYY section, whereas XXX is first GPIO number and YYY is last GPIO number of IO expander.
gpiochip2: GPIOs 496-511, parent: i2c/0-0020, pca9555, can sleep:
gpio-496 ( |board-rev-0 ) in lo
gpio-497 ( |board-rev-1 ) in lo
gpio-498 ( |(null) ) out hi
gpio-499 ( |(null) ) in hi
gpio-500 ( |(null) ) in hi
gpio-501 ( |usb-overcurrent-stat) in hi
gpio-502 ( |USB-PWR ) out hi
gpio-503 ( |(null) ) in hi
gpio-504 ( |(null) ) in hi
gpio-505 ( |(null) ) in hi
gpio-506 ( |(null) ) in hi
gpio-507 ( |(null) ) in hi
gpio-508 ( |(null) ) in hi
gpio-509 ( |(null) ) in hi
gpio-510 ( |(null) ) in hi
gpio-511 ( |(null) ) in hi
Another way to get first GPIO number of the IO expander
cat /sys/bus/i2c/devices/0-0020/gpio/gpiochip*/base
Therefore the mapping between header J12 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 | 498 | |
3 | 499 | |
4 | 500 | |
5 | 503 | |
6 | 504 | |
7 | 505 | |
8 | 506 | |
9 | 507 | |
10 | 508 | |
11 | 509 | |
12 | 510 | |
13 | 511 | |
14 | - | GND |
!!! note The mapping table is unlikely to change between Kernel version.
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.
Example
Set IO1_7 (pin 13) output as high
echo 511 | sudo tee -a /sys/class/gpio/export
echo "out" | sudo tee -a /sys/class/gpio/gpio511/direction
echo 1 | sudo tee -a /sys/class/gpio/gpio511/value