From f3a9d0ec15695d4effefc3817df3ccd55028168b Mon Sep 17 00:00:00 2001 From: Aditya Prayoga Date: Tue, 25 Sep 2018 18:23:23 +0800 Subject: [PATCH] Added GPIO page --- docs/gpio.md | 122 +++++++++++++++++- docs/hardware.md | 2 +- docs/img/hardware/dipswitch_led_off.png | Bin 0 -> 3199 bytes ...dipswitch_led.jpg => dipswitch_led_on.jpg} | Bin docs/img/hardware/gpio_pinout_j12.png | Bin 0 -> 5940 bytes docs/img/hardware/gpio_pinout_j18.png | Bin 0 -> 6255 bytes 6 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 docs/img/hardware/dipswitch_led_off.png rename docs/img/hardware/{dipswitch_led.jpg => dipswitch_led_on.jpg} (100%) create mode 100644 docs/img/hardware/gpio_pinout_j12.png create mode 100644 docs/img/hardware/gpio_pinout_j18.png diff --git a/docs/gpio.md b/docs/gpio.md index 82f990c..c056604 100644 --- a/docs/gpio.md +++ b/docs/gpio.md @@ -1,2 +1,122 @@ + +## User Accessible GPIOs (J12) + +Helios4 provide 12 GPIOs on J12 header that are free to use for user application. This header connected to 16-bit IO Expander [PCA9655E](http://www.onsemi.com/PowerSolutions/product.do?id=PCA9655E) using I2C bus 0. + +![J12 Pinout](/img/hardware/gpio_pinout_j12.png) + +| Pin | GPIO number | 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 + **IO0_0**, **IO0_1**, **IO0_5**, and **IO0_6** are reserved for system use. It is not advisable to access the I2C IO expander directly using I2C. + +## LED Expansion (J18) + +Helios4 board was designed to either use the on-board LEDs or use custom expansion panel (not-available). To use the header insure to switch to OFF the DIP switch SW2. + +![Dipswitch LED](/img/hardware/dipswitch_led_off.png) + +- - - + +![J18 Pinout](/img/hardware/gpio_pinout_j18.png) + +| Pin | LED number | Remarks | +|------------|----------|---------| +| 1 | - | 3.3V supply | +| 2 | - | Not connected | +| 3 | LED1 | Heartbeat LED | +| 4 | LED2 | System Fault LED | +| 5 | LED3 | SATA port 1 LED | +| 6 | LED4 | SATA port 2 LED | +| 7 | LED5 | SATA port 3 LED | +| 8 | LED6 | SATA port 4 LED | +| 9 | LED7 | USB activity LED | +| 10 | - | GND | + + +## Accessing GPIOs under Linux + +If the kernel support debugfs (*CONFIG_DEBUG_FS=y*), list of GPIOs can be accessed using + +`sudo cat /sys/kernel/debug/gpio` + +and look for + +`gpiochip2: GPIOs XXX-YYY, parent: i2c/0-0020, pca9555, can sleep:` + +whereas **XXX** is first GPIO number and **YYY** is last GPIO number of IO expander. + +- - - + +Another way to get first GPIO number of the IO expander + +`cat /sys/bus/i2c/devices/0-0020/gpio/gpiochip*/base` + +- - - + +** J12 assigned GPIO number in sysfs ** + +| 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 | + !!! info - Coming soon. + The GPIO number listed on the table most likely would not changed between kernel version. + + +Declare GPIO number to be use. + +`echo N | sudo tee -a /sys/class/gpio/export` + +Set the direction, "out" as output and "in" as "input". + +`echo DIRECTION | sudo tee -a /sys/class/gpio/gpioN/direction` + +To read current GPIO input + +`cat /sys/class/gpio/gpioN/value` + +Write 0 or 1 to GPIO + +`echo VALUE | sudo tee -a /sys/class/gpio/gpioN/value` + +!!! notes + Pay attention to the path, /sys/class/gpio/gpio**N**/ + +### 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 +``` diff --git a/docs/hardware.md b/docs/hardware.md index 2ea571f..97c1ba7 100644 --- a/docs/hardware.md +++ b/docs/hardware.md @@ -60,7 +60,7 @@ LED8|green|Power indicator Helios4 board was designed to either use the on-board LEDs or use an expansion panel (not-available). To use the on-board LEDs insure to switch to ON the dipswitch SW2. -![Dipswitch LED](/img/hardware/dipswitch_led.jpg) +![Dipswitch LED](/img/hardware/dipswitch_led_on.jpg) ## Reset Button diff --git a/docs/img/hardware/dipswitch_led_off.png b/docs/img/hardware/dipswitch_led_off.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4f1eace9a786a1f572f53e42996da0849ef1ae GIT binary patch literal 3199 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 bhxcGBD8F!qGT5KL9|aXs$4I+W(=PNM;4uMB literal 0 HcmV?d00001 diff --git a/docs/img/hardware/dipswitch_led.jpg b/docs/img/hardware/dipswitch_led_on.jpg similarity index 100% rename from docs/img/hardware/dipswitch_led.jpg rename to docs/img/hardware/dipswitch_led_on.jpg diff --git a/docs/img/hardware/gpio_pinout_j12.png b/docs/img/hardware/gpio_pinout_j12.png new file mode 100644 index 0000000000000000000000000000000000000000..fd99d30e1cadb152be0aea1103141dbeff1f3b0d GIT binary patch literal 5940 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 literal 0 HcmV?d00001