GPIO

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.

J12 Pinout

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