Open main menu

DAVE Developer's Wiki β

Changes

DESK-MX6-L/Peripherals/GPIOs

2,468 bytes added, 8 January
no edit summary
<section begin="History" />
{| style="border-collapse:collapse; "
!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"|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{{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"|Month Year|style="border-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;border-top:solid 2px #73B2C7; borderFirst DESK-bottom:solid 2px #73B2C7; backgroundMX6-color:#edf8fb; padding:5px; color:#000000"|TBDL 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"|[TBD_link X.Y.Z]{{oldid|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"17064|Month Year2022/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"|TBDAdd 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:#edf8fbededed; 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:#edf8fbededed; padding:5px; color:#000000"|...|style="borderDESK-left:solid 2px #73B2C7; border-right:solid 2px #73B2C7;borderMX6-top:solid 2px #73B2C7; border-bottom:solid 2px #73B2C7; background-color:#edf8fb; padding:5px; color:#000000"|.L 4.0.0 release
|-
|}
<section end="History" /><section begin="Body" />
==Peripheral GPIOs ==
''TBD: sostituire tutti i dump con le informazioni sull'uso della periferica''.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 ===
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>''carrierimx6q-sbcx-cb0012.dts''</code>:
<pre>
&can1 leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flexcan1_axelpinctrl_rs232_485_422_1>; status 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 = "okaydefault-on"; }; };
};
</pre>
From <code>''carriermx6qdl-sbcx-revb-common.dtsi''</code>:
<pre>
can1 rs232_485_422 { pinctrl_flexcan1_axelpinctrl_rs232_485_422_1: flexcan1axelgrppinctrl_rs232_485_422_grp-1 {
fsl,pins = <
MX6QDL_PAD_GPIO_7__FLEXCAN1_TX 0x80000000MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x1b0b1 /* UART5_485/232 */ MX6QDL_PAD_GPIO_8__FLEXCAN1_RX 0x80000000MX6QDL_PAD_CSI0_DAT11__GPIO5_IO29 0x1b0b1 /* UART5_ON */
>;
};
===Accessing the peripheral===
====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">
root@desk-mx6:~# ls -la /sys/class/leds/total 0drwxr-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:: -> ../.[ 1.807495] flexcan 2090000/devices/platform/soc/2100000.bus/2190000.flexcanmmc/leds/mmc0:: 2090000.flexcan supply xceiver not found, using dummy regulator[ lrwxrwxrwx 1root root 0 Apr 28 2022 mmc1:: -> ..817366] flexcan 2090000/.flexcan: device registered (reg_base=c0a30000, irq=31)./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[ 3lrwxrwxrwx 1 root root 0 Apr 28 2022 rs232_on -> .952659] can: controller area network core (rev 20170425 abi 9)[ 3.963413] can: raw protocol (rev 20170425)[ 3/.967717] can: broadcast manager protocol (rev 20170425 t)[ 3.973397] can: netlink gateway (rev 20170425) max_hops=1/devices/platform/leds/leds/rs232_on
</pre>
===Userspace gpio access =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">root@desk-mx6:~# echo 90 > /sys/class/gpio/exportroot@desk-mx6:~# echo out > /sys/class/gpio/gpio90/directionroot@desk-mx6:~# echo 1 > /sys/class/gpio/gpio90/valueroot@desk-mx6:~#</pre> * set EIM_D27 (MX6QDL_PAD_EIM_D27__GPIO3_IO27) as input GPIO 
<pre class="workstation-terminal">
root@imx6qxelkdesk-mx6:~# ip link set can0 type can bitrate 500000echo 91 > /sys/class/gpio/exportroot@imx6qxelkdesk-mx6:~# ifconfig can0 upecho in > /sys/class/gpio/gpio91/directionroot@imx6qxelkdesk-mx6:~# ifconfig can0cat /sys/class/gpio/gpio91/value1can0 Link encap:UNSPEC HWaddr 00-00-00root@desk-00-00-00-00-00-00-00-00-00-00-00-00-00 UP RUNNING NOARP MTUmx6:16 Metric:1~# RX packets:0 errors:0 dropped:0 overruns:0 frame:0</pre> TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10===== Additional information ===== RX bytesInformation about GPIOs usage under <code>sysfs</code> directory ''https:0 (0//www.0 B) TX bytes:0 (0kernel.org/doc/Documentation/gpio/sysfs.0 B)txt'' Interrupt==== Usage with [https:31//git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/README libgpiod] ====
root@imx6qxelk{{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]  ===== 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>
==== Usage with [httpsit is possible to clone the <code>libgpiod</code> git repository and compile the related sources://github.com/linux-can/can-utils can-utils] ====
''TBD<pre>git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.gitcd libgpiod ./autogen.sh --enable-tools=yes --prefix=/usr/local makemake install</pre> Once installed, the <code>gpio</code> utilities are availabel in the target: reference verso eventuali informazioni sul web''
<pre class="workstation-terminal">
root@imx6qxelk:~# ip link set can0 type can bitrate 500000 tripledesk-sampling onroot@imx6qxelk:~# ifconfig can0 uproot@imx6qxelk:~# cansend can0 128#1122334455667788root@imx6qxelkmx6:~# candump can0gpio can0 gpiodetect 128 [8] 11 22 33 44 55 66 77 88root@imx6qxelk:~# gpiofind gpioget gpioinfo gpiomon gpioset
</pre>
=== Additional information == gpio interrupt example =====Each CAN port appears like If a networking interface 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 form [[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>canXGPIO1_IO06</code> where * the corresponding pin number is 0 6* <bcode>gpiomon<i/code>Xutility can be used for monitor the pin status and triggering, for example, the ''falling-edge'' event: </ipre class="workstation-terminal">root@desk-mx6:~# gpiomon --falling-edge 0 6event: FALLING EDGE offset: 6 timestamp: [ 696.463539802]event: FALLING EDGE offset: 6 timestamp: [ 696.643661944]^Croot@desk-mx6:~#</bpre> is the port number.
Information about programming the CAN socket interface is given in the kernel tree under ''Documentation/networking/can.txt''<section end="Body" />
----
[[Category:AXEL Lite]]
8,226
edits