【问题标题】:How can I select a new mode for a pin using a device tree file?如何使用设备树文件为引脚选择新模式?
【发布时间】:2015-04-17 07:42:40
【问题描述】:

我正在开发 iMX6 Wandboard ARM computer。 Wandboard 的默认配置仅提供 8 个 GPIO 引脚供使用,尽管 iMX6 有更多可用引脚可以从当前设置切换到 GPIO 模式。我的项目需要更多 GPIO,为此我一直在尝试更改某些引脚的模式。

我能够修改 iMX6/wandboard 设备树文件并将其编译到 DTB 中并在我的设备上使用它(我通过禁用 HDMI 输出进行了测试),但我还没有弄清楚如何从它们当前更改一些引脚设置为 GPIO 模式。

我目前正在尝试将DISP0 显示(下面 pinfunc.h 中的MX6QDL_PAD_DISP0_DAT0 - DAT23)切换到 GPIO 模式,因为这些引脚在开发板上的接头上可用。我目前正在尝试使用来自 imx6qdl-wandboard.dsti 的这些引脚:

&iomuxc {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_hog_1>;

        /* other fields unchanged */
        gpio {
            pinctrl_gpio: gpiogrp {
                fsl,pins = <
                    MX6QDL_PAD_EIM_DA12__GPIO3_IO12   0x4001b0b0 /* GPIO3_12 EDM pin 255 */
                    MX6QDL_PAD_EIM_DA11__GPIO3_IO11   0x4001b0b0 /* GPIO3_11 EDM pin 256 */
                    MX6QDL_PAD_EIM_DA10__GPIO3_IO10   0x4001b0b0 /* GPIO3_10 EDM pin 257 */
                    MX6QDL_PAD_EIM_D27__GPIO3_IO27    0x4001b0b0 /* GPIO3_27 EDM pin 258 */
                    MX6QDL_PAD_EIM_D26__GPIO3_IO26    0x4001b0b0 /* GPIO3_26 EDM pin 259 */
                    MX6QDL_PAD_EIM_BCLK__GPIO6_IO31   0x4001b0b0 /* GPIO6_31 EDM pin 260 */
                    MX6QDL_PAD_EIM_DA8__GPIO3_IO08    0x4001b0b0 /* GPIO3_8  EDM pin 261 */
                    MX6QDL_PAD_ENET_RX_ER__GPIO1_IO24 0x4001b0b0 /* GPIO1_24 EDM pin 262 */
                    MX6QDL_PAD_GPIO_19__GPIO4_IO05    0x4001b0b0 /* GPIO4_5  EDM pin 263 */
                    MX6QDL_PAD_SD3_RST__GPIO7_IO08    0x4001b0b0 /* GPIO7_8  EDM pin 264 */
                    /* my added pins */
                    MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21 0x4001b0b0 /* GPIO4_21 GPIO117 JP1-1*/
                    MX6QDL_PAD_EIM_D21__GPIO3_IO21    0x4001b0b0 /* GPIO3_21 GPIO85 JP2-9 */
                >;
            };
       };
};

我首先尝试在 imx6qdl-wandboard.dtsi 中的 &amp;ipu2 上使用 status = "disabled"; 字段,但这不允许我通过 /sys/class/gpio 界面更改值。也没有完全删除 ipu2&amp;iomuxc 块。我不知道下一步该尝试什么。我 90% 确定这些引脚可以用于我正在尝试的目的,但这种配置超出了我的理解范围。

Wandboard Linux 源码中的相关文件

【问题讨论】:

  • 你确定没有其他文件可以定义gpio的配置吗?我宁愿建议您确保 GPIO 确实在工作。 (GPIO可以只通过代码配置,不用dtsi配置)
  • 是的,我可以通过 sysfs 使用其他配置的 GPIO 引脚(在代码示例中的更改上方列出)。列出的 10 个中的一些因未知原因无法工作,但其他都很好。 forums.wandboard.org/viewtopic.php?f=8&t=684

标签: linux device-tree


【解决方案1】:

好消息,我终于可以在我选择的一些引脚上设置 GPIO 模式了。

我认为 wandboard dtsi 文件中的&amp;iomuxc gpio 节点在某种程度上是不可更改的,或者仅支持已在其组下列出的少数引脚。我花了很多时间尝试禁用不同的功能并重新利用该节点下的相应引脚,但没有结果。

基于边界设备博客上的this post 和他们的sabre iMX6 板a device tree file,我决定尝试创建自己的额外hog 组,这很有效。我添加了一个新的&amp;iomuxc 块并覆盖了pinctrl-0 列表以包含我自己的hoggrp(已经有一个hoggrp-1,所以我只是做了我的hoggrp-2)。

/* at the end of imx6qdl-wandboard.dtsi */
&iomuxc {
    pinctrl-names = "default";
    pinctrl-0 = <
        &pinctrl_hog_1
        &wes_gpios
    >;

    imx6qdl-wandboard {
        wes_gpios: hoggrp-2 {
            fsl,pins = <
                MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x4001b0b0 /* GPIO1_25 test point lead */
                MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21  0x4001b0b0 /* GPIO4_21 GPIO117 JP1-1*/
                MX6QDL_PAD_GPIO_5__GPIO1_IO05      0x4001b0b0 /* gpio5 jp2-17 */
                MX6QDL_PAD_GPIO_16__GPIO7_IO11     0x4001b0b0 /* gpio203 jp2-15 */
            >;
        };
    };
};

我在该组中使用的每个引脚都按预期在 sysfs 中工作,尽管使用我问题代码中的 EIM_D21 引脚会覆盖用于 HDMI 传输 EDID 数据的 i2c 接口,从而禁用显示。不过,任何未使用的引脚都可以使用。

(如果有人能告诉我“猪”是什么,我很想听听。)

【讨论】:

  • 一只猪只会收集所有未使用的别针,AFAIK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多