This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:器件树中的 GPIO 配置

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/639718/linux-am3352-gpio-configuration-in-device-tree

器件型号:AM3352

工具/软件:Linux

我们是基于 BeagleBone Black 的定制板、具有256MB RAM 和512MB DDR。

我们使用的是 Linux 内核3.12。

我尝试将三个 GPIO 配置为 devicetree 中的输入。

我想实现两个目标。

1.将(mux) GPIO 配置为具有从 devicetree 上拉的输入

2.在 sysfs 中获取这些 GPIO 的 sysfs 文件,因此无需导出 GPIO,只需直接读取值。

在 devicetree snnipet 下、我曾用于配置引脚多路复用、

am33xx_pinmux:pinmux@44e10800{
pinctrl-names ="默认值";

--- 剪切--------------------------------


product_id_pins:product_id_pins{
pinctrl-single、pins =<
0x028 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_AD10.GPIO0_26、(ZCE)*
0x034 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_AD13.GPIO1_13、(ZCE)*
0x024 (PIN_INPUT_PULLUP | MUX_MODE7)/* GPMC_AD12.GPIO1_12、(ZCE)、*
>;
};
};


pid {

pinctrl-names ="default";
pinctrl-0 =<&product_id_pines>;
};

为此、我需要编写以下 shell 命令来读取这些 GPIO

# echo 26 >/sys/class/gpio/export
# echo 44 >/sys/class/gpio/export
# echo 45 >/sys/class/gpio/export

# cat /sys/class/gpio/gpio26/value
0

# cat /sys//class/gpio/gpio44/value
0

# cat /sys//class/gpio/gpio45/value
0 

现在、这些 GPIO 引脚上没有连接任何引脚、因此必须将值读为高电平、但值为低电平。

其他 sysfs 条目如下所示

# grep -r。 /sys/class/gpio/gpio26
/sys/class/gpio/gpio26/edge:none
/sys/class/gpio/gpio26/power/control:auto
/sys/class/gpio/gpio26/power/runtime_active_time:0
/sys/class/gpio/gpio26/power/runtime_status:不支持
的/sys/class/gpio/gpio26/power/runtime_suspended_time:0
/sys/class/gpio/gpio26/value
:0 /sys/class/gpio/gpio26/active_low:0
/sys/class/gpio/gpio26/direction:in

# grep -r。 /sys/class/gpio/gpio44
/sys/class/gpio/gpio44/edge:none
/sys/class/gpio/gpio44/power/control:auto
/sys/class/gpio/gpio44/power/runtime_active_time:0
/sys/class/gpio/gpio44/power/runtime_status:不支持
的/sys/class/gpio/gpio44/power/runtime_suspended_time:0
/sys/class/gpio/gpio44/value
:0 /sys/class/gpio/gpio44/active_low:0
/sys/class/gpio/gpio44/direction:in

# grep -r。 /sys/class/gpio/gpio45
/sys/class/gpio/gpio45/edge:none
/sys/class/gpio/gpio45/power/control:auto
/sys/class/gpio/gpio45/power/runtime_active_time:0
/sys/class/gpio/gpio45/power/runtime_status:不支持
的/sys/class/gpio/gpio45/power/runtime_suspended_time:0
/sys/class/gpio/gpio45/value:0
/sys/class/gpio/gpio45/active_low
:0 /sys/class/gpio/gpio45/direction:in

它与 devicetree 配置有关。

有人能不能建议我应该在 devicetree 中为这些 GPIO 配置哪个客户端设备?

谢谢、

此致、

Ankur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    将 pinumx 配置为输入后、默认情况下应将其配置为输入。 方向(# cat /sys/class/gpio/gpio26/direction)的值是什么,现在如果应用一些电流,您会看到值更改为1?

    谢谢、
    Prabhakar LAD
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复 Prabhakar、
    我复制了上面的所有 sysfs 参数、

    /sys/class/gpio/gpio26/direction 的读数为"in"

    此外、我使用 omapconf 读取0x44e10828 (GPMC_ad10-GPIO0_26)寄存器的值、它读取 ox27 (接收器被启用和模式7)、但我需要的是 ox37 (接收器被启用、输入和 mode7)。

    因此、它配置为输入、但我还需要启用未启用的输入上拉。

    如果我从能够正常工作的 u-boot 执行引脚多路复用、但在当前开发阶段、我们将无法现场更新引导加载程序。

    谢谢、

    此致、
    Ankur
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    经过一些修改、我能够得到正确的引脚多路复用。

    am33xx_pinmux:pinmux@44e10800{
    pinctrl-names ="默认值";
    
    --- 剪切---
    
    product_id_pins:product_id_pins{
    pinctrl-single、pins =<
    0x028 (input_EN | pull_up | MUX_MODE7)/* GPMC_ad10.GPIO0_26、BGA T12 (ZCE)*/
    0x034 (input_EN | pull_up | MUX_MODE7)/* GPMC_ad13.GPIO1_13、BGA T13 (ZCE)*/
    0x030 (INPUT_EN | PULL_UP | MUX_MODE7)/* GPMC_AD12.GPIO1_12、BGA U13 (ZCE)、TP39 */
    >;
    };
    };
    
    pid {
    
    pinctrl-names ="default";
    pinctrl-0 =<&PRODUCT_id_pines>;
    兼容="GPIO-LED";
    };
    

    根据这些更改、我必须使用以下命令来读取 GPIO、

    echo 26 >/sys/class/gpio/export
    echo 44 >/sys/class/gpio/export
    echo 45 >/sys/class/gpio/export
    
    cat /sys/class/gpio/gpio26/value
    cat /sys/class/gpio/gpio44/value
    cat /sys/class/gpio/gpio45/value 

    我已将兼容驱动程序用作"GPIO-LED"、这是不正确的。

    我想为每个 GPIO 创建节点、这样我就可以在不导出它们的情况下读取 GPIO。

    有什么建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ankur、

    以下是有关 GPIO 配置和管理的一些有用资源:
    processors.wiki.ti.com/index.php
    processors.wiki.ti.com/.../Processor_SDK_Linux_GPIO_Driver_Overview
    www.kernel.org/.../sysfs.txt

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Tsvetolin Shulev,

    感谢您的回复、
    我也提到了您给我指出的文件、
    根据这一结论,我无法为 GPIO 创建自定义节点,如/sys/class/gpio/pid1 (控制 GPIO26)、/sys/class/gpio/pid2 (控制 gpio44)等。
    我必须按编号导出 GPIO、并按照上面所述使用它。
    我的理解是否正确?

    谢谢、

    此致、
    Ankur
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您的理解是正确的。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们能否将它们配置为 GPIO 密钥?

    我尝试了、但遇到了

    [0.423595] GPIO-keys GPIO_keys:不带键码的按钮:0x1a
    [0.423638] GPIO 键:GPIO_keys 的探测失败、错误-22

    谢谢、

    此致、
    Ankur