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

From DAVE Developer's Wiki
Jump to: navigation, search
(Created page with "{{subst:Peripheral | nome-som=AXEL Lite | nome-peripheral = GPIOs }}")
 
Line 7: Line 7:
 
!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"|X.Y.Z
+
|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"|Month Year
+
|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"|TBD
+
|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:#edf8fb; padding:5px; color:#000000"|[TBD_link X.Y.Z]
 
|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"|Month Year
 
|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"|TBD
 
|-
 
|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"|...
 
|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"|...
 
|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"|...
 
|-
 
 
|}
 
|}
 
<section end=History/>
 
<section end=History/>
Line 26: Line 17:
 
==Peripheral GPIOs ==
 
==Peripheral GPIOs ==
  
''TBD: sostituire tutti i dump con le informazioni sull'uso della periferica''
+
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 ===
 
=== Device tree configuration ===
Here below an example of device tree configuration used on standard DAVE's kit for the AXEL Lite SOM:
+
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 <code>''carrier.dts''</code>:
+
From <code>imx6q-sbcx-cb0012.dts</code>:
  
 
<pre>
 
<pre>
&can1 {
+
    leds {
    pinctrl-names = "default";
+
        compatible = "gpio-leds";
    pinctrl-0 = <&pinctrl_flexcan1_axel>;
+
        pinctrl-names = "default";
    status = "okay";
+
        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";
 +
        };
 +
    };
 
};
 
};
 
</pre>
 
</pre>
  
From <code>''carrier-common.dtsi''</code>:
+
From <code>mx6qdl-sbcx-revb-common.dtsi</code>:
  
 
<pre>
 
<pre>
     can1 {
+
     rs232_485_422 {
         pinctrl_flexcan1_axel: flexcan1axelgrp-1 {
+
         pinctrl_rs232_485_422_1: pinctrl_rs232_485_422_grp-1 {
 
             fsl,pins = <
 
             fsl,pins = <
                 MX6QDL_PAD_GPIO_7__FLEXCAN1_TX 0x80000000
+
                 MX6QDL_PAD_GPIO_18__GPIO7_IO13      0x1b0b1 /* UART5_485/232 */
                 MX6QDL_PAD_GPIO_8__FLEXCAN1_RX 0x80000000
+
                 MX6QDL_PAD_CSI0_DAT11__GPIO5_IO29  0x1b0b1 /* UART5_ON */
 
             >;
 
             >;
 
         };
 
         };
Line 56: Line 59:
 
===Accessing the peripheral===
 
===Accessing the peripheral===
 
====Linux messages at boot time====
 
====Linux messages at boot time====
 +
 +
With the previous <code>leds</code> configuration for the GPIOs, it is possible to find them on <code>sysfs</code> under ''/sys/class/leds'' sub-directory:
  
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
...
+
root@imx6qdlxelk:~# ls -la /sys/class/leds/
...
+
total 0
[    1.807495] flexcan 2090000.flexcan: 2090000.flexcan supply xceiver not found, using dummy regulator
+
drwxr-xr-x  2 root root 0 Apr  2  2020 .
[    1.817366] flexcan 2090000.flexcan: device registered (reg_base=c0a30000, irq=31)
+
drwxr-xr-x 54 root root 0 Apr  2  2020 ..
...
+
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  2  2020 mmc1:: -> ../../devices/soc0/soc/2100000.aips-bus/2194000.usdhc/leds/mmc1::
[    3.952659] can: controller area network core (rev 20170425 abi 9)
+
lrwxrwxrwx  1 root root 0 Apr  2  2020 rs232_485_422 -> ../../devices/soc0/leds/leds/rs232_485_422
[    3.963413] can: raw protocol (rev 20170425)
+
lrwxrwxrwx  1 root root 0 Apr  2  2020 rs232_on -> ../../devices/soc0/leds/leds/rs232_on
[    3.967717] can: broadcast manager protocol (rev 20170425 t)
+
root@imx6qdlxelk:~#
[    3.973397] can: netlink gateway (rev 20170425) max_hops=1
 
 
</pre>
 
</pre>
  
====Enable the interface and check status====
+
==== Usage with [https://www.kernel.org/doc/Documentation/gpio/sysfs.txt sysfs] ====
 +
 
 +
* set EIM_D26 (MX6QDL_PAD_EIM_D26__GPIO3_IO26) as output GPIO
 +
** GPIO3_IO26 => (n-1)*32 + IO = (3-1)*32+26 = 90
 +
 
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
root@imx6qxelk:~# ip link set can0 type can bitrate 500000
+
root@imx6qdlxelk:~# echo 90 > /sys/class/gpio/export
root@imx6qxelk:~# ifconfig can0 up
+
root@imx6qdlxelk:~# echo out > /sys/class/gpio/gpio90/direction
root@imx6qxelk:~# ifconfig can0
+
root@imx6qdlxelk:~# echo 1 > /sys/class/gpio/gpio90/value
can0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
+
root@imx6qdlxelk:~#
          UP RUNNING NOARP  MTU:16  Metric:1
 
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 
          collisions:0 txqueuelen:10
 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
          Interrupt:31
 
 
 
root@imx6qxelk:~#
 
 
</pre>
 
</pre>
  
==== Usage with [https://github.com/linux-can/can-utils can-utils] ====
+
* set EIM_D27 (MX6QDL_PAD_EIM_D27__GPIO3_IO27) as input GPIO
 
 
''TBD: reference verso eventuali informazioni sul web''
 
  
 
<pre class="workstation-terminal">
 
<pre class="workstation-terminal">
root@imx6qxelk:~# ip link set can0 type can bitrate 500000 triple-sampling on
+
root@imx6qdlxelk:~# echo 91 > /sys/class/gpio/export
root@imx6qxelk:~# ifconfig can0 up
+
root@imx6qdlxelk:~# echo in > /sys/class/gpio/gpio91/direction
root@imx6qxelk:~# cansend can0 128#1122334455667788
+
root@imx6qdlxelk:~# cat /sys/class/gpio/gpio91/value
root@imx6qxelk:~# candump can0
+
1
  can0  128  [8]  11 22 33 44 55 66 77 88
+
root@imx6qdlxelk:~#
root@imx6qxelk:~#  
 
 
</pre>
 
</pre>
  
 
=== Additional information ===
 
=== Additional information ===
Each CAN port appears like a networking interface in the form <code>canX</code> where <b><i>X</i></b> is the port number.  
+
Information about GPIOs usage under sysfs 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]}}
 +
 
 +
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 programming the CAN socket interface is given in the kernel tree under ''Documentation/networking/can.txt''
 
 
<section end=Body/>
 
<section end=Body/>
  

Revision as of 13:43, 12 October 2020

History
Version Issue Date Notes
1.0.0 Oct 2020 First DESK 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@imx6qdlxelk:~# ls -la /sys/class/leds/
total 0
drwxr-xr-x  2 root root 0 Apr  2  2020 .
drwxr-xr-x 54 root root 0 Apr  2  2020 ..
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  2  2020 mmc1:: -> ../../devices/soc0/soc/2100000.aips-bus/2194000.usdhc/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  2  2020 rs232_on -> ../../devices/soc0/leds/leds/rs232_on
root@imx6qdlxelk:~#

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@imx6qdlxelk:~# echo 90 > /sys/class/gpio/export
root@imx6qdlxelk:~# echo out > /sys/class/gpio/gpio90/direction
root@imx6qdlxelk:~# echo 1 > /sys/class/gpio/gpio90/value
root@imx6qdlxelk:~#
  • set EIM_D27 (MX6QDL_PAD_EIM_D27__GPIO3_IO27) as input GPIO
root@imx6qdlxelk:~# echo 91 > /sys/class/gpio/export
root@imx6qdlxelk:~# echo in > /sys/class/gpio/gpio91/direction
root@imx6qdlxelk:~# cat /sys/class/gpio/gpio91/value
1
root@imx6qdlxelk:~#

Additional information[edit | edit source]

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


Warning-icon.png sysfs GPIO ABI has been deprecated. See more inofrmation 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