From 3fd768addd4131b3d778ccb8c2fac0be9b5121c9 Mon Sep 17 00:00:00 2001 From: Gauthier Provost Date: Wed, 3 Oct 2018 17:12:41 +0800 Subject: [PATCH] Cleanup GPIO page and add a dedicated LED page. --- docs/gpio.md | 110 ++++++++++-------- docs/img/gpio/gpio_pinout_j12.png | Bin 0 -> 4980 bytes docs/img/hardware/gpio_pinout_j12.png | Bin 5940 -> 0 bytes docs/img/hardware/gpio_pinout_j18.png | Bin 6255 -> 0 bytes .../{hardware => led}/dipswitch_led_off.png | Bin docs/img/led/gpio_pinout_j18.png | Bin 0 -> 5435 bytes docs/led.md | 22 ++++ mkdocs.yml | 1 + 8 files changed, 84 insertions(+), 49 deletions(-) create mode 100644 docs/img/gpio/gpio_pinout_j12.png delete mode 100644 docs/img/hardware/gpio_pinout_j12.png delete mode 100644 docs/img/hardware/gpio_pinout_j18.png rename docs/img/{hardware => led}/dipswitch_led_off.png (100%) create mode 100644 docs/img/led/gpio_pinout_j18.png create mode 100644 docs/led.md diff --git a/docs/gpio.md b/docs/gpio.md index c056604..297bd73 100644 --- a/docs/gpio.md +++ b/docs/gpio.md @@ -1,11 +1,13 @@ ## 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. +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](http://www.onsemi.com/PowerSolutions/product.do?id=PCA9655E) connected to I2C bus 0. -![J12 Pinout](/img/hardware/gpio_pinout_j12.png) +![J12 Pinout](/img/gpio/gpio_pinout_j12.png) -| Pin | GPIO number | Remarks | +### Pinout Table + +| Pin | Port | Remarks | |------------|----------|---------| | 1 | - | 3.3V supply | | 2 | IO0_2 | | @@ -23,53 +25,51 @@ Helios4 provide 12 GPIOs on J12 header that are free to use for user application | 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 | + 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 support debugfs (*CONFIG_DEBUG_FS=y*), list of GPIOs can be accessed using +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` +```bash +sudo cat /sys/kernel/debug/gpio +``` -and look for +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 XXX-YYY, parent: i2c/0-0020, pca9555, can sleep:` -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` +``` +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 -** J12 assigned GPIO number in sysfs ** +### GPIO Table | Pin | Sysfs GPIO number | Remarks | |----|-----|---------| @@ -88,30 +88,42 @@ Another way to get first GPIO number of the IO expander | 13 | 511 | | | 14 | - | GND | -!!! info - The GPIO number listed on the table most likely would not changed between kernel version. +!!! note + The mapping table is unlikely to change between Kernel version. -Declare GPIO number to be use. +### GPIO Control -`echo N | sudo tee -a /sys/class/gpio/export` +**1.** Export the GPIO number you want to use -Set the direction, "out" as output and "in" as "input". +``` +echo N | sudo tee -a /sys/class/gpio/export +``` -`echo DIRECTION | sudo tee -a /sys/class/gpio/gpioN/direction` +**2.** Set the direction, "out" for Output or "in" for Input -To read current GPIO input +``` +echo DIRECTION | sudo tee -a /sys/class/gpio/gpioN/direction +``` -`cat /sys/class/gpio/gpioN/value` +**3.** Now you can read or change the GPIO value -Write 0 or 1 to GPIO +To read GPIO value -`echo VALUE | sudo tee -a /sys/class/gpio/gpioN/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/gpio**N**/ + Pay attention to the path, /sys/class/gpio/gpio**N**/ where **N** is the GPIO number. -### Example +#### Example Set IO1_7 (pin 13) output as high diff --git a/docs/img/gpio/gpio_pinout_j12.png b/docs/img/gpio/gpio_pinout_j12.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a576c4c038429bf4c003eee9c763c9ad6e55b3 GIT binary patch literal 4980 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 bo_69*f4my=zO}(|4zI1D53RWS=-Gb(3ChpQ literal 0 HcmV?d00001 diff --git a/docs/img/hardware/gpio_pinout_j12.png b/docs/img/hardware/gpio_pinout_j12.png deleted file mode 100644 index fd99d30e1cadb152be0aea1103141dbeff1f3b0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5940 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 diff --git a/docs/img/hardware/dipswitch_led_off.png b/docs/img/led/dipswitch_led_off.png similarity index 100% rename from docs/img/hardware/dipswitch_led_off.png rename to docs/img/led/dipswitch_led_off.png diff --git a/docs/img/led/gpio_pinout_j18.png b/docs/img/led/gpio_pinout_j18.png new file mode 100644 index 0000000000000000000000000000000000000000..e735daa3295b947ad305c1ec3aac93695ee11ede GIT binary patch literal 5435 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