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.

[参考译文] AM3358:GPIO 输入、无内部下拉电阻

Guru**** 2609955 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656448/am3358-gpio-input-with-no-internal-pull-down

器件型号:AM3358

您好!

我设置了 GPIO、但没有内部下拉。 在 u-boot 上:

静态结构 MODULE_PIN_mux my_GPIO_PIN_mux[]

{offset (GPIO3_9)、mode (7)}、

{offset (GPIO3_9)、mode (7)}、

{offset (GPIO3_9)、mode (7)}、

{-1}

};

在 Linux 中的器件树中:

port3_GPIOs:port3_GPIOs{
pinctrl-single、pins =<
0x114 (PIN_INPUT | MUX_MODE7)/* GPIO3[3]*/
0x12c (PIN_INPUT | MUX_MODE7)/* GPIO3[9]*/
0x130 (PIN_INPUT | MUX_MODE7)/* GPIO3[10]*/
>;
};

我没有启用下拉电阻器、但如果我将10k 外部上拉电阻器连接到这些引脚、则引脚上的电压为2.48V。

因此、通过电压读数、看起来有30k 的下拉电阻。  

将引脚设置为 PIN_INPUT_PULLUGDOWN | MUX_MODE7可提供相同的2.48V 读数。

内部下拉电阻器是否始终启用、或者是否缺少禁用它的功能?

此致、

Ugnius

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

    根据我的理解、您将在 Linux 启动后检查用户空间的电压(3.3V/2.48V)。

    您能否验证 conf_mii1_TX_en/0x44E10914寄存器中的值是否正确? 请在测量电压之前提供您的值。

    您可以使用 devmem2工具或 omapconf 工具在用户空间中探索该值。

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

    您好、Pavel、

    运行 devmem2工具可提供以下功能:

    在地址 0x44E10914 (b6f31914):0x00000007处读取

    查看寄存器说明、位3控制上拉/下拉。

    焊盘上拉/下拉使能
    0:上拉/下拉使能
    1:上拉/下拉被禁用
    复位值取决于焊盘。

    它看起来毕竟是启用下拉电阻的。

    该寄存器设置的值是器件树中的值还是 u-boot 引脚多路复用器?

    此致、

    Ugnius

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我现在设法解决了这个问题。 感谢您让我参考 conf_mii1_TX_en/0x44E10914寄存器

    通过查看 uboot 掩码、可以定义:

    #define PULLUDOWN_EN(0x0 << 4)/*下拉选择*/
    #define PULLUP_EN(0x1 << 4)/*上拉选择*/
    #define PULLUUDEN(0x0 << 3)/*上拉电阻启用*/
    #define PULLUDDIS(0x1 << 3)//禁用上拉*

    和寄存器说明:

    位4:
    焊盘上拉/下拉类型选择
    0:选择下拉
    1:选择上拉
    复位值取决于焊盘。

    位3:
    焊盘上拉/下拉使能
    0:上拉/下拉使能
    1:上拉/下拉被禁用
    复位值取决于焊盘。

    我应该设置 GPIO:

    静态结构 MODULE_PIN_mux my_GPIO_PIN_mux[]



    {OFFSET (GPIO3_9)、MODE (7)| PULLUDDIS}、

    {OFFSET (GPIO3_9)、MODE (7)| PULLUDDIS}、

    {OFFSET (GPIO3_9)、MODE (7)| PULLUDDIS}、

    {-1}

    };

    现在、连接外部上拉电阻时、这可以正常工作、我的引脚电压为3.3V。

    令人困惑的位是 PULLUUDEN 和 PULLUDDIS 说明、说明上拉电阻已启用或上拉电阻已禁用。
    在查看数据表时、它实际上是上拉/下拉使能/禁用。

    我还有一个关于这一点的问题。
    当我在 uboot 中设置 conf_mii1_TX_En/0x44E10914寄存器时、Linux 设备树条目是否会对其进行修改?
    还是忽略了它、并且 u-boot 设置是必需的设置?

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

    [引述 user="Ugnius Subacius"]我还有一个关于这一点的问题。
    当我在 uboot 中设置 conf_mii1_TX_En/0x44E10914寄存器时、Linux 设备树条目是否会对其进行修改?
    还是忽略了它、并且 u-boot 设置是必需的?

    是的、似乎 Linux 内核也会修改该寄存器、并在 MUX_mode2中进行设置。

    Linux-4.9.59/arch/arm/boot/dts/AM335x-evm.dts

    cpsw_default:cpsw_default{
          pinctrl-single、pins =<
             /*从属设备1 */
             AM33XX_IOPAD (0x914、PIN_OUTPUT 下拉| MUX_Mode2)   /* mii1_txen.rgmii1_tctl *

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、因此使用 AM33XX_IOPAD (0x914、PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txen.rgmii1_tctl *设置 GPIO 引脚选项。
    直接写入寄存器0x914。
    因此、在我的情况下、我应该具有
    AM33XX_IOPAD (0x914、PIN_INPUT | MUX_MODE7)/* mii1_txen.rgmii1_tctl as GPIO *

    它的工作方式是否与不同

    port3_GPIOs:port3_GPIOs{
    pinctrl-single、pins =<
    0x114 (PIN_INPUT | MUX_MODE7)/* GPIO3[3]*/
    >;
    };

    因为即使在 DT_Bindings 中定义了下拉电阻器、也不会使用后者来禁用下拉电阻器

    #define PULL_DISABLE(1 << 3)
    #define INPUT_EN(1 << 5)
    #define PIN_INPUT(INPUT_EN | PULL_DISABLE)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Ugnius Subacious"]好的、因此使用 AM33XX_IOPAD (0x914、PIN_OUTPUT 下拉| MUX_Mode2)/* mii1_txen.rgmii1_tctl *设置 GPIO 焊盘选项。
    直接写入寄存器0x914。
    因此、在我的情况下、我应该具有
    AM33XX_IOPAD (0x914、PIN_INPUT | MUX_MODE7)/* mii1_txen.rgmii1_tctl 作为 GPIO */[/quot]

    是的

    [引用 user="Ugnius Subacius"]它的工作方式是否与不同

    port3_GPIOs:port3_GPIOs{
    pinctrl-single、pins =<
    0x114 (PIN_INPUT | MUX_MODE7)/* GPIO3[3]*/
    >;
    };[/报价]

    不、它是相同的。

    [引用 user="Ugnius Subacus"]因为即使在 DT_Bindings 中定义了,使用后面的也不会禁用下拉

    您具体如何验证它? 您是否在 u-boot 提示符下使用 MD 命令检查 conf_mii1_TX_en/0x44E1_0914寄存器?

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 uboot 中设置了引脚多路复用器以启用下拉。

    我的内核器件树条目将该引脚设置为输入、这应禁用下拉并覆盖 u-boot 设置。

    port3_GPIOs:port3_GPIOs{
    pinctrl-single、pins =<
    0x114 (PIN_INPUT | MUX_MODE7)/* GPIO3[3]*/
    >;
    };

    在 Linux 中、运行您建议的工具时显示 u-boot 设置已就位、而不是 DT。
    即使该序列是 uboot -> DT
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Ugnius Subacus"]和我的内核设备树条目将该引脚设置为输入、这应禁用下拉并覆盖 u-boot 设置。

    port3_GPIOs:port3_GPIOs{
    pinctrl-single、pins =<
    0x114 (PIN_INPUT | MUX_MODE7)/* GPIO3[3]*/
    >;
    };[/报价]

    此格式仅对 u-boot 有效、对 Linux 无效。 对于 Linux、请使用以下格式:

    AM33XX_IOPAD (0x914、PIN_INPUT | MUX_MODE7)

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