Difference between revisions of "DESK-MX6-L/Pheripherals/GPIOs"

From DAVE Developer's Wiki
Jump to: navigation, search
m (U0009 moved page AXEL Lite SOM/DESK-MX6-L/Pheripherals/GPIOs to DESK-MX6-L/Pheripherals/GPIOs: modifica gestione DESK come prodotto a se stante)
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<section begin=History/>
+
<section begin="History" />
 
{| style="border-collapse:collapse; "
 
{| style="border-collapse:collapse; "
!colspan="4" style="width:100%; text-align:left"; border-bottom:solid 2px #ededed"|History
+
! colspan="4" style="width:100%; text-align:left" ; border-bottom:solid 2px #ededed" |History
 
|-  
 
|-  
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Version
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white" |Issue Date
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Issue Date
+
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white" |Notes
!style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#73B2C7; padding:5px; color:white"|Notes
+
|-
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |{{oldid|14083|2021/07/16}}
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |First DESK-MX6-L release
 +
|-
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |{{oldid|17005|2022/03/03}}
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |DESK-MX6-L 3.0.0 release
 +
|-
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |{{oldid|17064|2022/10/04}}
 +
| style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000" |Add libgpiod example
 
|-
 
|-
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|1.0.0
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|Oct 2020
 
|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|First DESK release
 
  
 +
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |2023/04/11
 +
! style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#ededed; padding:5px; color:#000000" |DESK-MX6-L 4.0.0 release
 +
|-
 
|}
 
|}
<section end=History/>
+
<section end="History" />
<section begin=Body/>
+
<section begin="Body" />
  
 
==Peripheral GPIOs ==
 
==Peripheral GPIOs ==
Line 65: Line 73:
 
root@desk-mx6:~# ls -la /sys/class/leds/
 
root@desk-mx6:~# ls -la /sys/class/leds/
 
total 0
 
total 0
drwxr-xr-x  2 root root 0 Apr  2  2020 .
+
drwxr-xr-x  2 root root 0 Apr 28 2022 .
drwxr-xr-x 54 root root 0 Apr  2  2020 ..
+
drwxr-xr-x 58 root root 0 Apr 28 2022 ..
lrwxrwxrwx  1 root root 0 Apr  2  2020 mmc0:: -> ../../devices/soc0/soc/2100000.aips-bus/2190000.usdhc/leds/mmc0::
+
lrwxrwxrwx  1 root root 0 Apr 28 2022 mmc0:: -> ../../devices/platform/soc/2100000.bus/2190000.mmc/leds/mmc0::
lrwxrwxrwx  1 root root 0 Apr  2  2020 mmc1:: -> ../../devices/soc0/soc/2100000.aips-bus/2194000.usdhc/leds/mmc1::
+
lrwxrwxrwx  1 root root 0 Apr 28 2022 mmc1:: -> ../../devices/platform/soc/2100000.bus/2194000.mmc/leds/mmc1::
lrwxrwxrwx  1 root root 0 Apr  2  2020 rs232_485_422 -> ../../devices/soc0/leds/leds/rs232_485_422
+
lrwxrwxrwx  1 root root 0 Apr 28 2022 rs232_485_422 -> ../../devices/platform/leds/leds/rs232_485_422
lrwxrwxrwx  1 root root 0 Apr  2  2020 rs232_on -> ../../devices/soc0/leds/leds/rs232_on
+
lrwxrwxrwx  1 root root 0 Apr 28 2022 rs232_on -> ../../devices/platform/leds/leds/rs232_on
root@desk-mx6:~#
 
 
</pre>
 
</pre>
  
 +
===Userspace gpio access ===
 
==== Usage with [https://www.kernel.org/doc/Documentation/gpio/sysfs.txt sysfs] ====
 
==== Usage with [https://www.kernel.org/doc/Documentation/gpio/sysfs.txt sysfs] ====
  
Line 96: Line 104:
 
</pre>
 
</pre>
  
=== Additional information ===
+
===== Additional information =====
Information about GPIOs usage under sysfs directory ''https://www.kernel.org/doc/Documentation/gpio/sysfs.txt''
+
Information about GPIOs usage under <code>sysfs</code> directory ''https://www.kernel.org/doc/Documentation/gpio/sysfs.txt''
  
{{WarningMessage|text=''sysfs'' GPIO ABI has been deprecated. See more inofrmation [https://www.kernel.org/doc/Documentation/gpio/sysfs.rst here] about it. A character device access has to be used, more information [https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ here]}}
+
==== Usage with [https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/README libgpiod] ====
 +
 
 +
{{WarningMessage|text=''sysfs'' GPIO ABI has been deprecated. See more information [https://www.kernel.org/doc/Documentation/gpio/sysfs.rst here] about it. A character device access has to be used, more information [https://embeddedbits.org/new-linux-kernel-gpio-user-space-interface/ here]}}
  
 
Information about GPIOs library '''libgpiod''' - C library and tools - can be found on [https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/ git.kernel.org]  
 
Information about GPIOs library '''libgpiod''' - C library and tools - can be found on [https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/ git.kernel.org]  
  
<section end=Body/>
+
===== libgpiod example =====
 +
It is possible yo cross-compile <code>libgpiod</code> in the target (if the related Yocto package is not available for installation). Once the ''autoconf-archive'' package has been installed
 +
<pre>
 +
dnf install autoconf-archive
 +
</pre>
 +
 
 +
it is possible to clone the <code>libgpiod</code> git repository and compile the related sources:
 +
 
 +
<pre>
 +
git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git
 +
cd libgpiod
 +
./autogen.sh --enable-tools=yes --prefix=/usr/local
 +
make
 +
make install
 +
</pre>
 +
 
 +
Once installed, the <code>gpio</code> utilities are availabel in the target:
 +
 
 +
<pre class="workstation-terminal">
 +
root@desk-mx6:~# gpio
 +
gpiodetect  gpiofind    gpioget    gpioinfo    gpiomon    gpioset
 +
</pre>
 +
 
 +
===== gpio interrupt example =====
 +
If a push button, with proper pull-up, is connected to a GPIO line available - for example using the J33.34 pin available on [[AXEL_Lite_SOM/AXEL_Lite_Evaluation_Kit/Interfaces_and_Connectors/WIDE | SBC AXEL Lite WIDE]] connector - the related GPIO can be used as an interrupt:
 +
 
 +
* J33.40 is connected to J10.40 SOM pin
 +
** J33 connector is the WIDE connector in the [[AXEL_Lite_SOM/AXEL_Lite_Evaluation_Kit | AXEL Lite EVK]]
 +
** J10 connector is the SO-DIMM connector in the AXEL Lite EVK
 +
** ALT-5 alternate function for this pin is <code>GPIO1_IO06</code>
 +
* the corresponding pin number is 0 6
 +
* <code>gpiomon</code> utility can be used for monitor the pin status and triggering, for example, the ''falling-edge'' event:
 +
 
 +
<pre class="workstation-terminal">
 +
root@desk-mx6:~# gpiomon --falling-edge 0 6
 +
event: FALLING EDGE offset: 6 timestamp: [    696.463539802]
 +
event: FALLING EDGE offset: 6 timestamp: [    696.643661944]
 +
^Croot@desk-mx6:~#
 +
</pre>
 +
 
 +
<section end="Body" />
  
 
----
 
----
  
 
[[Category:AXEL Lite]]
 
[[Category:AXEL Lite]]

Latest revision as of 17:06, 8 January 2024

History
Issue Date Notes

2021/07/16

First DESK-MX6-L release

2022/03/03

DESK-MX6-L 3.0.0 release

2022/10/04

Add libgpiod example
2023/04/11 DESK-MX6-L 4.0.0 release


Peripheral GPIOs[edit | edit source]

i.MX6 can handle external pins in many different ways and most of them can be configured as GPIOs. When a pin is set as a GPIO, it is possible to read its value, change its direction or change output value directly from the shell.

Device tree configuration[edit | edit source]

Here below an example of device tree configuration for using the RS-485 GPIOs used on standard DAVE's kit for the AXEL Lite SOM:

From imx6q-sbcx-cb0012.dts:

    leds {
        compatible = "gpio-leds";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_rs232_485_422_1>;

        rs232_485_422 {
            gpios = <&gpio7 13 GPIO_ACTIVE_HIGH>;
            linux,default-trigger = "default-on";
        };

        rs232_on {
            gpios = <&gpio5 29 GPIO_ACTIVE_LOW>;
            linux,default-trigger = "default-on";
        };
    };
};

From mx6qdl-sbcx-revb-common.dtsi:

    rs232_485_422 {
        pinctrl_rs232_485_422_1: pinctrl_rs232_485_422_grp-1 {
            fsl,pins = <
                MX6QDL_PAD_GPIO_18__GPIO7_IO13      0x1b0b1 /* UART5_485/232 */
                MX6QDL_PAD_CSI0_DAT11__GPIO5_IO29   0x1b0b1 /* UART5_ON */
            >;
        };
    };

Accessing the peripheral[edit | edit source]

Linux messages at boot time[edit | edit source]

With the previous leds configuration for the GPIOs, it is possible to find them on sysfs under /sys/class/leds sub-directory:

root@desk-mx6:~# ls -la /sys/class/leds/
total 0
drwxr-xr-x  2 root root 0 Apr 28  2022 .
drwxr-xr-x 58 root root 0 Apr 28  2022 ..
lrwxrwxrwx  1 root root 0 Apr 28  2022 mmc0:: -> ../../devices/platform/soc/2100000.bus/2190000.mmc/leds/mmc0::
lrwxrwxrwx  1 root root 0 Apr 28  2022 mmc1:: -> ../../devices/platform/soc/2100000.bus/2194000.mmc/leds/mmc1::
lrwxrwxrwx  1 root root 0 Apr 28  2022 rs232_485_422 -> ../../devices/platform/leds/leds/rs232_485_422
lrwxrwxrwx  1 root root 0 Apr 28  2022 rs232_on -> ../../devices/platform/leds/leds/rs232_on

Userspace gpio access[edit | edit source]

Usage with sysfs[edit | edit source]

  • set EIM_D26 (MX6QDL_PAD_EIM_D26__GPIO3_IO26) as output GPIO
    • GPIO3_IO26 => (n-1)*32 + IO = (3-1)*32+26 = 90
root@desk-mx6:~# echo 90 > /sys/class/gpio/export
root@desk-mx6:~# echo out > /sys/class/gpio/gpio90/direction
root@desk-mx6:~# echo 1 > /sys/class/gpio/gpio90/value
root@desk-mx6:~#
  • set EIM_D27 (MX6QDL_PAD_EIM_D27__GPIO3_IO27) as input GPIO
root@desk-mx6:~# echo 91 > /sys/class/gpio/export
root@desk-mx6:~# echo in > /sys/class/gpio/gpio91/direction
root@desk-mx6:~# cat /sys/class/gpio/gpio91/value
1
root@desk-mx6:~#
Additional information[edit | edit source]

Information about GPIOs usage under sysfs directory https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

Usage with libgpiod[edit | edit source]

Warning-icon.png sysfs GPIO ABI has been deprecated. See more information here about it. A character device access has to be used, more information here Warning-icon.png

Information about GPIOs library libgpiod - C library and tools - can be found on git.kernel.org

libgpiod example[edit | edit source]

It is possible yo cross-compile libgpiod in the target (if the related Yocto package is not available for installation). Once the autoconf-archive package has been installed

dnf install autoconf-archive

it is possible to clone the libgpiod git repository and compile the related sources:

git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git
cd libgpiod 
./autogen.sh --enable-tools=yes --prefix=/usr/local 
make
make install

Once installed, the gpio utilities are availabel in the target:

root@desk-mx6:~# gpio
gpiodetect  gpiofind    gpioget     gpioinfo    gpiomon     gpioset
gpio interrupt example[edit | edit source]

If a push button, with proper pull-up, is connected to a GPIO line available - for example using the J33.34 pin available on SBC AXEL Lite WIDE connector - the related GPIO can be used as an interrupt:

  • J33.40 is connected to J10.40 SOM pin
    • J33 connector is the WIDE connector in the AXEL Lite EVK
    • J10 connector is the SO-DIMM connector in the AXEL Lite EVK
    • ALT-5 alternate function for this pin is GPIO1_IO06
  • the corresponding pin number is 0 6
  • gpiomon utility can be used for monitor the pin status and triggering, for example, the falling-edge event:
root@desk-mx6:~# gpiomon --falling-edge 0 6
event: FALLING EDGE offset: 6 timestamp: [     696.463539802]
event: FALLING EDGE offset: 6 timestamp: [     696.643661944]
^Croot@desk-mx6:~#