1

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

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

我目前正在尝试将DISP0显示器(MX6QDL_PAD_DISP0_DAT0 - DAT23在下面的 pinfunc.h 中)切换到 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 中使用一个status = "disabled";字段,&ipu2但这不允许我通过/sys/class/gpio界面更改值。也没有完全删除ipu2and&iomuxc块。我不知道下一步该尝试什么。我 90% 确定这些引脚可以用于我正在尝试的目的,但这种配置超出了我的理解范围。

来自 Wandboard Linux 源的相关文件

4

1 回答 1

2

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

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

根据Boundary Devices 博客上的这篇文章和他们的 Sabre iMX6 板的设备树文件,我决定尝试创建自己的附加hog组,这很有效。我添加了一个新&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 接口,从而禁用显示。但是,任何未使用的引脚都可以使用。

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

于 2015-04-16T23:42:40.390 回答