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.

[参考译文] AM62L:如何在 U-Boot 中控制 GPIO

Guru**** 2693955 points

Other Parts Discussed in Thread: AM62L

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot

器件型号: AM62L

我将 U-Boot 2025.01 与 AM62L 结合使用。

我在器件树中为定制电路板配置了 GPIO 节点:

&main_gpio0 {
        status = "okay";
        pinctrl-names = "default";
        bootph-all;
        pinctrl-0 = <&gpio0_pins_default>;
};
&pmx0 {
...
        gpio0_pins_default: gpio0-default-pins {
                pinctrl-single,pins = <
                        AM62LX_IOPAD(0x0044, PIN_OUTPUT, 7) /* (E22) OSPI0_DQS.GPIO0_2 */
                        AM62LX_IOPAD(0x0058, PIN_OUTPUT, 7) /* (F21) OSPI0_D4.GPIO0_7 */
                        AM62LX_IOPAD(0x005c, PIN_OUTPUT, 7) /* (F19) OSPI0_D5.GPIO0_8 */
                        AM62LX_IOPAD(0x006c, PIN_INPUT, 7) /* (D20) OSPI0_CSn1.GPIO0_12 */
                        AM62LX_IOPAD(0x0070, PIN_INPUT, 7) /* (D18) OSPI0_CSn2.GPIO0_13 */
                        AM62LX_IOPAD(0x0074, PIN_INPUT, 7) /* (C23) OSPI0_CSn3.GPIO0_14 */
                        AM62LX_IOPAD(0x0098, PIN_INPUT, 7) /* (H19) GPMC0_AD8.GPIO0_23 */
                        AM62LX_IOPAD(0x009c, PIN_INPUT, 7) /* (H20) GPMC0_AD9.GPIO0_24 */
                        AM62LX_IOPAD(0x00a0, PIN_INPUT, 7) /* (H21) GPMC0_AD10.GPIO0_25 */
                        AM62LX_IOPAD(0x00a4, PIN_INPUT, 7) /* (H18) GPMC0_AD11.GPIO0_26 */
                        AM62LX_IOPAD(0x00b0, PIN_OUTPUT, 7) /* (F22) GPMC0_AD14.GPIO0_29 */
                        AM62LX_IOPAD(0x00b4, PIN_OUTPUT, 7) /* (F23) GPMC0_AD15.GPIO0_30 */
                        AM62LX_IOPAD(0x00e8, PIN_INPUT, 7) /* (L19) GPMC0_CSn1.GPIO0_42 */
                        AM62LX_IOPAD(0x0128, PIN_INPUT, 7) /* (Y11) RGMII1_TD2.GPIO0_57 */
                        AM62LX_IOPAD(0x012c, PIN_INPUT, 7) /* (AA11) RGMII1_TD3.GPIO0_58 */
                        AM62LX_IOPAD(0x0140, PIN_INPUT, 7) /* (AA8) RGMII1_RD2.GPIO0_63 */
                        AM62LX_IOPAD(0x0144, PIN_INPUT, 7) /* (W8) RGMII1_RD3.GPIO0_64 */
                        AM62LX_IOPAD(0x017c, PIN_INPUT, 7) /* (AB8) RGMII2_RD3.GPIO0_78 */
                        AM62LX_IOPAD(0x018c, PIN_INPUT, 7) /* (B9) MCASP0_AXR0.GPIO0_82 */
                        AM62LX_IOPAD(0x019c, PIN_INPUT, 7) /* (A12) MCASP0_ACLKR.GPIO0_86 */
                        AM62LX_IOPAD(0x01a0, PIN_INPUT, 7) /* (E11) SPI0_CS0.GPIO0_87 */
                        AM62LX_IOPAD(0x01a4, PIN_OUTPUT, 7) /* (D11) SPI0_CS1.GPIO0_88 */
                        AM62LX_IOPAD(0x01a8, PIN_INPUT, 7) /* (E13) SPI0_CLK.GPIO0_89 */
                        AM62LX_IOPAD(0x01ac, PIN_INPUT, 7) /* (E12) SPI0_D0.GPIO0_90 */
                        AM62LX_IOPAD(0x01b0, PIN_INPUT, 7) /* (B12) SPI0_D1.GPIO0_91 */
                        AM62LX_IOPAD(0x01cc, PIN_INPUT, 7) /* (B7) I2C0_SCL.GPIO0_98 */
                        AM62LX_IOPAD(0x01d0, PIN_INPUT, 7) /* (A7) I2C0_SDA.GPIO0_99 */
                        AM62LX_IOPAD(0x01dc, PIN_OUTPUT, 7) /* (B8) I2C2_SCL.GPIO0_102 */
                        AM62LX_IOPAD(0x01e0, PIN_OUTPUT, 7) /* (D8) I2C2_SDA.GPIO0_103 */
                        AM62LX_IOPAD(0x01e4, PIN_INPUT, 7) /* (D16) EXT_REFCLK1.GPIO0_104 */
                        AM62LX_IOPAD(0x0238, PIN_OUTPUT, 7) /* (D6) MMC1_SDWP.GPIO0_123 */
                        AM62LX_IOPAD(0x0248, PIN_INPUT, 7) /* (A5) USB1_DRVVBUS.GPIO0_125 */
                >;
        };
...
};

 

当我引导 U-Boot 并执行 GPIO 命令时、它如下所示。

一些 GPIO 配置为输出、但似乎所有 GPIO 实际上都配置为输入。

=> gpio status -a
Bank gpio@600000_:
gpio@600000_0: input: 0 [ ]
gpio@600000_1: input: 0 [ ]
gpio@600000_2: input: 0 [ ]
gpio@600000_3: input: 0 [ ]
gpio@600000_4: input: 0 [ ]
gpio@600000_5: input: 0 [ ]
gpio@600000_6: input: 0 [ ]
gpio@600000_7: input: 0 [ ]
gpio@600000_8: input: 0 [ ]
gpio@600000_9: input: 0 [ ]
gpio@600000_10: input: 0 [ ]
gpio@600000_11: input: 0 [ ]
gpio@600000_12: input: 1 [ ]
gpio@600000_13: input: 0 [ ]
gpio@600000_14: input: 0 [ ]
gpio@600000_15: input: 0 [ ]
gpio@600000_16: input: 1 [ ]
gpio@600000_17: input: 0 [ ]
gpio@600000_18: input: 0 [ ]
gpio@600000_19: input: 0 [ ]
gpio@600000_20: input: 1 [ ]
gpio@600000_21: input: 1 [ ]
gpio@600000_22: input: 0 [ ]
gpio@600000_23: input: 1 [ ]
gpio@600000_24: input: 1 [ ]
gpio@600000_25: input: 1 [ ]
gpio@600000_26: input: 1 [ ]
gpio@600000_27: input: 0 [ ]
gpio@600000_28: input: 1 [ ]
gpio@600000_29: input: 0 [ ]
gpio@600000_30: input: 0 [ ]
gpio@600000_31: input: 0 [ ]
gpio@600000_32: input: 0 [ ]
gpio@600000_33: input: 0 [ ]
gpio@600000_34: input: 0 [ ]
gpio@600000_35: input: 0 [ ]
gpio@600000_36: input: 0 [ ]
gpio@600000_37: input: 1 [ ]
gpio@600000_38: input: 0 [ ]
gpio@600000_39: input: 0 [ ]
gpio@600000_40: input: 0 [ ]
gpio@600000_41: input: 0 [ ]
gpio@600000_42: input: 0 [ ]
gpio@600000_43: output: 0 [x] led-0.gpios
gpio@600000_44: output: 0 [x] led-1.gpios
gpio@600000_45: input: 0 [ ]
gpio@600000_46: input: 0 [ ]
gpio@600000_47: output: 0 [x] led-4.gpios
gpio@600000_48: output: 0 [x] led-5.gpios
gpio@600000_49: input: 0 [ ]
gpio@600000_50: output: 0 [x] led-2.gpios
gpio@600000_51: output: 0 [x] led-3.gpios
gpio@600000_52: output: 0 [ ]
gpio@600000_53: input: 0 [ ]
gpio@600000_54: input: 0 [ ]
gpio@600000_55: input: 0 [ ]
gpio@600000_56: input: 0 [ ]
gpio@600000_57: input: 0 [ ]
gpio@600000_58: input: 0 [ ]
gpio@600000_59: input: 0 [ ]
gpio@600000_60: input: 1 [ ]
gpio@600000_61: input: 0 [ ]
gpio@600000_62: input: 0 [ ]
gpio@600000_63: input: 1 [ ]
gpio@600000_64: input: 1 [ ]
gpio@600000_65: input: 1 [ ]
gpio@600000_66: input: 0 [ ]
gpio@600000_67: input: 0 [ ]
gpio@600000_68: input: 0 [ ]
gpio@600000_69: input: 0 [ ]
gpio@600000_70: input: 0 [ ]
gpio@600000_71: input: 0 [ ]
gpio@600000_72: input: 0 [ ]
gpio@600000_73: input: 0 [ ]
gpio@600000_74: input: 0 [ ]
gpio@600000_75: input: 0 [ ]
gpio@600000_76: input: 0 [ ]
gpio@600000_77: input: 0 [ ]
gpio@600000_78: input: 0 [ ]
gpio@600000_79: input: 0 [ ]
gpio@600000_80: input: 0 [ ]
gpio@600000_81: input: 0 [ ]
gpio@600000_82: input: 1 [ ]
gpio@600000_83: input: 0 [ ]
gpio@600000_84: input: 0 [ ]
gpio@600000_85: input: 0 [ ]
gpio@600000_86: input: 0 [ ]
gpio@600000_87: input: 1 [ ]
gpio@600000_88: input: 0 [ ]
gpio@600000_89: input: 1 [ ]
gpio@600000_90: input: 1 [ ]
gpio@600000_91: input: 1 [ ]
gpio@600000_92: input: 1 [ ]
gpio@600000_93: input: 0 [ ]
gpio@600000_94: input: 0 [ ]
gpio@600000_95: input: 0 [ ]
gpio@600000_96: input: 0 [ ]
gpio@600000_97: input: 0 [ ]
gpio@600000_98: input: 0 [ ]
gpio@600000_99: input: 0 [ ]
gpio@600000_100: input: 0 [ ]
gpio@600000_101: input: 0 [ ]
gpio@600000_102: input: 0 [ ]
gpio@600000_103: input: 0 [ ]
gpio@600000_104: input: 0 [ ]
gpio@600000_105: input: 1 [ ]
gpio@600000_106: input: 1 [ ]
gpio@600000_107: input: 1 [ ]
gpio@600000_108: input: 1 [ ]
gpio@600000_109: input: 1 [ ]
gpio@600000_110: input: 1 [ ]
gpio@600000_111: input: 1 [ ]
gpio@600000_112: input: 1 [ ]
gpio@600000_113: input: 1 [ ]
gpio@600000_114: input: 0 [ ]
gpio@600000_115: input: 1 [ ]
gpio@600000_116: input: 1 [ ]
gpio@600000_117: input: 1 [ ]
gpio@600000_118: input: 1 [ ]
gpio@600000_119: input: 1 [ ]
gpio@600000_120: input: 0 [ ]
gpio@600000_121: input: 1 [ ]
gpio@600000_122: input: 0 [ ]
gpio@600000_123: input: 0 [ ]
gpio@600000_124: input: 0 [ ]
gpio@600000_125: input: 0 [ ]

 

也无法更改输出。

=> gpio set 123=1
gpio: pin 123=1 (gpio 123) value is 1
   Warning: value of pin is still 0

 

在 U-Boot 中控制 GPIO 输出应该怎么做。

 

此致、

Koji

 

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

    尊敬的 Koji:  

    对于 GPIO、当 U-Boot 器件树与 Linux 器件树不同时、会出现错误“警告:pin 的值仍为 0“。 具体来说、当 pinmux 甚至略有不同时、会发生错误、并且 GPIO 不会切换。 请尝试以下操作: GPIO Set GPIO@600000_123。 有关更多信息、请参阅以下常见问题 解答:【常见问题解答】PROCESSOR-SDK-AM62X:如何从 U-Boot 命令提示符 — 处理器论坛-处理器 — TI E2E 支持论坛切换 GPIO 和 LED。  

    - Shriya

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

    尊敬的  Shriya:

    在引导内核之前、为什么 Linux 器件树会对 U-Boot 产生影响?

    在 U-Boot 控制台中、应该不确定要从哪个引导介质加载 Linux 器件树。

    如果有多个引导介质、是否应该匹配所有介质中处于停滞状态的设备树?

     

    我想将 U-Boot 集成到同一系列的多个变体定制电路板中。

    如果电路板的引脚多路复用部分不同、是否不可能实现?

     

    此致、

    Koji

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

    尊敬的 Koji:

    我们会让每个主题都集中在一个主题上、因此请关闭本次讨论、并为您的其他问题打开一个新主题。

    谢谢、
    Shriya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于 GPIO、当 U-Boot 器件树与 Linux 器件树不同时、会出现错误“Warning:pin Value is Still 0“。 具体来说、当 pinmux 甚至略有不同时、会发生错误、并且 GPIO 不会切换。 [/报价]

    根据以下线程中的 Bin Liu 语句、U-Boot 和 Linux 的器件树的 pinmux 不必匹配。

    AM62L:U-Boot 和 Linux 中的 GPIO 器件树配置

    请提供正确的支持。

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

    您好 Koji、  

    我相信我之前说错了。 我想说的是、您在 U-Boot 中尝试使用的命令行的语法与导致该问题的预期语法不同。 这就是 GPIO set 123=1 给出了上一条错误消息的原因。 为混乱而道歉。

    此致、

    Shriya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请尝试以下操作: GPIO Set GPIO@600000_123.

    我知道您说过上述命令是正确的。

    我尝试了该命令、但发生了相同的错误。

    但是、在执行命令之前和之后、GPIO 方向已将输入更改为输出。

    GPIO 方向似乎通过执行“GPIO Set“或“GPIO 输入“来改变。

    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: input: 0 [ ]
    => gpio set gpio@600000_123
    gpio: pin gpio@600000_123 (gpio 123) value is 1
       Warning: value of pin is still 0
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: output: 0 [ ]
    => gpio input gpio@600000_123
    gpio: pin gpio@600000_123 (gpio 123) value is 0
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: input: 0 [ ]
    =>

    无法更改 GPIO 输出值、因此我的问题尚未解决。
     
    此致、
    Koji
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Koji:  

    您能尝试 2 样东西吗?  

    1.测试 MAIN_GPIO0 模块内的其他组是否收到此警告。 请查看 表 4-104。 AM62L TRM 中的 Main.GPIO.0 GPIO 寄存器/引脚映射: AM62L 技术参考手册(修订版 A)

    2.查看遇到与您的 E2E 类似问题的以下 E2E: (+) AM625:相关主题:https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1271243/am625-u-boot-cmd_gpio-run-gpio-status--a-and-value-is-always-0 — 处理器论坛-处理器 — TI E2E 支持论坛。 他们能够解决内存写入 padconfig 寄存器的问题。 请看 表 14-5772。 焊盘配置寄存器位和 表 14-5773 的说明。 TRM 中的 AM62L PADCONFIG 寄存器。  

    此致、

    Shriya

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

    尊敬的 Shriya:

    当我对另一个在引脚多路复用中配置为输出的 GPIO 执行“GPIO Set“时、出现了相同的问题。

    但在引脚多路复用中配置为输入的 GPIO 未出现问题、并更改了输出值。

     

    他们可以解决向 padconfig 寄存器写入内存的问题。

    我需要时间确认这种方法、因此如果无法使用“GPIO Set“设置输出、我想尝试这种方法。

    在此之前、我想知道为什么使用“GPIO Set“时无法成功。

     

    此致、

    Koji

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

    尊敬的 Koji:

    如 上一 线程中所述、需要使用一个存储器写入命令来配置要控制和启用其输出的 GPIO 的 PADCONFIG 寄存器。  应用正确的 PADCONFIG 设置后、它们就能够成功使用 GPIO 设置来更改引脚值。 并不是 GPIO 集不会成功、但可能需要事先配置。

    此致、
    Shriya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    并不是 GPIO 集不会成功、但可能需要事先配置。

    那么、您意味着需要设置 PADCONFIG 寄存器以在 U-Boot 中通过“GPIO 设置“来控制 GPIO、对吗?

    我知道需要执行以下步骤。

    1. 登录 U-Boot Console
    2. 写入 GPIO 的 PADCONFIG 寄存器
    3. 执行“GPIO Set“以更改输出

    最后、是否无法在器件树中配置引脚多路复用而不是写入 PADCONFIG?

     

    此致、

    Koji

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

    尊敬的 Koji:  

    根据我的理解、这只是一种可能的解决方案、但应该不可能在器件树中配置 pinmux。 但是、我们目前正在调试问题、以便更好地了解根本原因、因此我们要执行这些步骤。 同时、我还建议执行其他故障排除步骤:请再次在引脚上运行 GPIO 设置命令、并在执行命令之前和之后读取寄存器值。 这将有助于我们确定该命令是否实际修改寄存器值。

    此致、

    Shriya

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

    尊敬的  Shriya:

    我尝试读写 PADFONFIG。

    这是为 GPIO0_123 读取和写入 PADCONFIG 时的结果。

    在执行“GPIO Set“命令之前和之后、寄存器值没有变化。

    => md 0x4084238
    04084238: 00010007
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: input: 0 [ ]
    => gpio set gpio@600000_123
    gpio: pin gpio@600000_123 (gpio 123) value is 1
       Warning: value of pin is still 0
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: output: 0 [ ]
    => md 0x4084238
    04084238: 00010007

     

    当我尝试使用相同的方法对配置为器件树引脚多路复用中输入的 GPIO0_125 寄存器进行配置时、寄存器值未更改、但 GPIO 状态发生了更改。

    => md 0x04084248
    04084248: 00054007
    => gpio stats -a gpio@600000_125
    Bank gpio@600000_:
    gpio@600000_125: input: 1 [ ]
    => gpio set gpio@600000_125
    gpio: pin gpio@600000_125 (gpio 125) value is 1
    => gpio stats -a gpio@600000_125
    Bank gpio@600000_:
    gpio@600000_125: output: 1 [ ]
    => md 0x04084248
    04084248: 00054007
    

     

    在执行“GPIO Set“之前、我尝试使用 GPIO0_125 将相同的值写入 GPIO0_123 的 PADCONFIG。
    因此、我可以通过“GPIO Set“更改 GPIO0_123 状态。
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: input: 0 [ ]
    => mw 0x4084238 00054007
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: input: 0 [ ]
    => gpio set gpio@600000_123
    gpio: pin gpio@600000_123 (gpio 123) value is 1
    => gpio stats -a gpio@600000_123
    Bank gpio@600000_:
    gpio@600000_123: output: 1 [ ]
    =>
     
    我想知道当配置 pinmux 时、为什么有必要写入寄存器。
     
    此致、
    Koji
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Koji:  

    没有必要对寄存器进行写入、但是、我们将这些步骤用作健全性检查。 您能告诉我器件树的位置、器件树中定义 pinmux 的位置、以及如何构建器件树吗?

    此致、

    Shriya

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

    尊敬的  Shriya:

    我将按照以下方式结构化器件树:

    arch/arm64/boot/dts/ti/
    |-- k3-am62l-custom.dts
    `-- k3-am62l3-custom-pinmux.dtsi

    pinmux.dtsi 包含在 k3-am62l-custom.dts 中。

    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/leds/common.h>
    #include "k3-am62l3.dtsi"
    #include "k3-pinctrl.h"
    
    #include "k3-am62l3-custom-pinmux.dtsi"
    

    请参考我的第一篇文章确认 GPIO 配置。
    我在器件树中为我们的定制电路板配置了 GPIO 节点:

     

    此致、

    Koji

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

    尊敬的 Koji:
    您所做的器件树更改似乎应用于 arch/arm64/boot/dts/ti 下的 Linux 内核源、而不是 U-Boot 源树中。 U-Boot 会保留自己的器件树副本、因此必须在相应的 U-Boot 器件树目录中进行与 GPIO 相关的任何修改、以便它们在引导加载程序阶段生效。
    由于没有对 U-Boot 器件树应用任何更新、因此您预期的更改没有反映在 U-Boot 中、这可能是您看到的问题的根本原因。
    此致、
    Shriya

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

    尊敬的  Shriya:

    抱歉、我连接了错误的设备树。

    正确。

    dts/upstream/src/arm64/ti/
    |-- k3-am62l3-custom.dts
    `-- k3-am62lx-custom-pinmux.dtsi

    引脚多路复用包含在 DTS 中。

    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/leds/common.h>
    #include <dt-bindings/net/ti-dp83867.h>
    #include "k3-am62l3.dtsi"
    #include "k3-am62lx-custom-pinmux.dtsi"
    #include "k3-pinctrl.h"

    即使 U-Boot 器件树按上述方式配置、“GPIO Set“命令也无法成功。

     

    此致、

    Koji

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

    尊敬的 Koji:  

    您是否能够同时发送 u-boot 和 Linux 器件树文件? 我还想知道为什么在下面一行中为 PADCONFIG 启用某些位:  

    mw 0x4084238 00054007

    此致、

    Shriya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否能够同时发送 u-boot 和 Linux 设备树文件? [/报价]

    如前所述、我不明白 Linux 器件树为什么会影响 U-Boot 的工作。

    是否需要设备树中的所有内容?

    我想之前已经随附了与 GPIO 内容相关的内容。

    我想得到你的解释为什么 你希望我对这些信息和什么信息是不够的。

     

    我还想知道您为什么在下面一行中为 PADCONFIG 启用某些位: 

    GPIOI0_125 可以由“GPIO Set“命令控制、因此我尝试启用 GPIO0_123 的位与 GPIO0_125 匹配。

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

    在我们完成此问题的故障排除过程时、我想澄清一下前面的一个说法。 之前、我提到过 u-boot 和 Linux 器件树不需要匹配。 但是、它们确实需要在引脚多路复用配置方面匹配。 两个 DTS 文件之间的 pinmux 值不匹配可能会导致您在上面看到的问题、这是我们尚未解决的问题。 因此、我想比较这两个文件(特别是两种 GPIO 配置)。  

    这除了不正确的 PADCONFIG 值之外、还可以防止 GPIO 出现物理切换、即使它看起来在软件中被切换也是如此。 您能否进一步解释一下为什么启用 PADCONFIG 寄存器中执行的特定值? 以下是一份有用的指南、介绍了 PADCONFIG 寄存器位: 【常见问题解答】AM625/AM623/AM620-Q1 / AM62L / AM64x/AM243x (ALV)/ AM62Ax/AM62D-Q1 / AM62Px 设计建议/定制电路板硬件设计–有关 PADCONFIG 位和 PADCONFIG 寄存器默认值的信息摘要 — 处理器论坛-处理器 — TI E2E 支持论坛。  

    希望这对您有所帮助、

    Shriya

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

    我已经说过 U-Boot 和 Linux 的器件树的 pinmux 不必匹配、您也没有拒绝。

    我又问同样的问题、为什么在引导内核之前 Linux 器件树会对 U-Boot 产生影响?

    [引述 userid=“582335" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot/6086434

    根据以下线程中的 Bin Liu 语句、U-Boot 和 Linux 的器件树的 pinmux 不必匹配。

    AM62L:U-Boot 和 Linux 中的 GPIO 器件树配置

    [/报价]

     

    您能否进一步解释为什么启用您在 PADCONFIG 寄存器中执行的特定值? [/报价]

    我已经提到了上述原因、我没有进一步的解释。

    我将尝试正确写入 PADCONFIG 的特定位、但我需要您解释为什么在当前情况下我无法将 GPIO 设置为输出。

     

    您说我要读取寄存器值、但您还没有提到该值。

    首先、当 GPIO 设置为 OUTPUT 时、这是否是预期的值?

    [引述 userid=“582335" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot/6119895

    我尝试读写 PADFONFIG。

    这是为 GPIO0_123 读取和写入 PADCONFIG 时的结果。

    [/报价]

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

    尊敬的 Koji:  

    我需要就您的问题咨询的开发团队目前在度假时不在办公室。 我们将在下周回复您、提供更多信息。 同时、如果能够通过写入 GPIO0_125 PADCONFIG 所具有的相同值来操作 GPIO0_123、您是否也可以使用其他引脚尝试此操作?

    谢谢您、

    Shriya

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

    尊敬的 Koji:  

    我看到您已重新打开该主题、在我们收到开发团队的反馈之前、您是否还想添加更多信息?

    此致、

    Shriya

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

    我已经添加了所有可以添加的信息。

    与此同时、如果能够通过写入 GPIO0_125 PADCONFIG 所具有的相同值来操作 GPIO0_123、您是否也可以使用其他引脚尝试此操作?

    如果您的开发团队在我没有确认其他 PIN 的工作之前不能开始研究、我会先确认。

     

    此致、

    Koji

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

    您有任何更新吗?

    当我确认另一个配置为输出的 GPIO 时、gpio-hog 似乎也无法正常工作。

    我想该问题与 GPIO 设置问题有关。

    p2-hog {
    		/* P2 - ET1_RSTn */
    		gpio-hog;
    		gpios = <2 GPIO_ACTIVE_HIGH>;
    		output-high;
    		line-name = "ET1_RSTn";
    	};

     

    此致、

    Koji

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

    尊敬的 Koji:

    我相信我可以作出澄清。 即使 GPIO 方向从输入变为输出并写入输出寄存器、配置为 PIN_OUTPUT 的 GPIO 也无法驱动引脚。 相比之下、最初配置为 PIN_INPUT 的 GPIO 在设置 GPIO 时可以正常工作、没有警告、如您的测试中所示。

    发生故障的 GPIO0_123 显示 PADCONFIG 值为 0x00010007、而正常工作的 GPIO0_125 显示 0x00054007。 当使用 MW 手动将工作的 PADCONFIG 值写入 GPIO0_123 时、引脚立即开始正常工作、没有警告和正确的输出回读。 这样可确认 GPIO 控制器本身正常工作、并且根本原因是输出引脚的 PADCONFIG 值。

    由于 GPIO 设置和 GPIO-HOG 都不会更新 PADCONFIG 寄存器、因此在手动更正 PADCONFIG 之前、两者物理上都无法驱动引脚、这意味着永久修复必须位于引脚多路复用宏中、而不是在 GPIO 命令中。

    PIN_INPUT 引脚工作的原因是它会启用 GPIO 输入缓冲器、从而允许正确读取引脚电平并用作输入或输出。 但是、为了实现可靠的输出驱动、仍然需要正确的 PADCONFIG 设置。 如果引脚设置为输入、您可以使用 U-Boot 中的 GPIO 设置来更改它们。 否则、如果要在器件树中将引脚定义为 PIN_OUTPUT、则必须修改 PADCONFIG 值(与 GPIO0_123 相同)。

    希望这对您有所帮助、

    Shriya

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

    我知道 GPIO 设置也是出于同样的原因导致了 GPIO-HOG 问题。

     

    您说过没有必要写入 PADCONFIG 寄存器。

    您的解释是否一致?

    不必写入注册表、但是、我们采取了这些步骤来进行健全性检查。

     

    [引述 userid=“612083" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot/6141756

    这意味着永久修复必须位于 pinmux 宏中、而不是在 GPIO 命令中。

    [/报价]

    我之前连接了 GPIO 引脚多路复用。

    配置正确吗?

     

    还有其他问题您尚未回答。

    在这些问题得到解决之前、无法关闭该主题。

    我又问同样的问题、为什么 Linux 设备树在引导内核之前会影响 U-Boot?
    [quote userid=“582335" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot/6129693

    您说我要读取寄存器值、但您还没有提到该值。

    首先、当 GPIO 设置为 OUTPUT 时、这是否是预期的值?

    [/报价]

     

    您的开发团队进展如何?

     

    此致、

    Koji

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

    尊敬的 Koji:
    我对我先前的解释所引起的混乱表示歉意。


    我最初的思考过程是、问题源于 Linux 和 U-Boot 设备树之间的差异。 这是 GPIO 相关问题的常见来源、因为 U-Boot 在构建时拉取 Linux 器件树的快照并在该副本的基础上构建、而不是在运行时动态引用活动的 Linux DTS。 因此、Linux 和 U-Boot 之间 GPIO 引脚的定义方式任何不匹配都可能导致您观察到的行为。

    您的解释是否一致?

    关于我之前对 PADCONFIG 寄存器的评论:在我这边进行额外测试后、只有在更新 PADCONFIG 寄存器后、我才能在 U-Boot 中设置和控制 GPIO 输出引脚。 我还可以确认 GPIO0_123 和 GPIO0_125 的寄存器值与预期值一致。 这就是我在后面的说明中建议修改 PADCONFIG 值的原因。 要使该方法正常运行、需要通过 U-Boot 命令行启用相应的 PADCONFIG 位。  

    您的开发团队进展如何?

    从您共享的设备树代码中、您的配置显示正确。 我不确定为什么在初始启动时未反映预期输出状态、并且我正在与开发团队合作解决您的问题、但是他们的响应可能会因即将发布的版本而延迟。
    如果您想进一步澄清、请告诉我。


    此致、
    Shriya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、Linux 和 U-Boot 之间 GPIO 引脚定义方式的任何不匹配都会导致您观察到的行为。

    您的意思是、如果 Linux 和 U-Boot 器件树之间只有一处差异、这可能是导致的吗?

    发生问题的 GPIO 的 pinmux 匹配、但其他配置存在一些差异。

    根据我询问的另一个主题、允许这些器件树之间存在差异。

     

    [引述 userid=“612083" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1578350/am62l-how-to-control-gpio-in-u-boot/6144712

    要使该方法正常运行、需要通过 U-Boot 命令行启用相应的 PADCONFIG 位。  

    [/报价]

    在我的理解下、通常不需要写入 PADCONFIG、但在当前情况下有必要写入。

    正确吗?
     
    我正在等待您的开发团队的回应。
     
    此致、
    Koji
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Koji:

    我认为您当前的 Linux 和 U-Boot 器件树配置应该可以正常、因为您 已经指明 GPIO 引脚多路复用设置是匹配的。 关于 PADCONFIG 寄存器、 您的语句是正确的。 通常、PADCONFIG 不需要显式写入、但根据我们看到的当前行为、在这种情况下似乎有必要。 我相信写入 PADCONFIG 寄存器是您需要的解决方案。 我会在收到开发团队的回复后更新您、以防有任何其他解决方案。

    此致、
    Shriya

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

    我将通过编写 PADCONFIG、直到从开发团队更新来解决这个问题。

    写入前 GPIO 输出引脚的寄存器值为 0x00010007。

    根据 TRM、我认为这个值已经适合用作 GPIO 输出的配置。

    您能告诉我应该向寄存器写入什么值吗?

     

    此致、

    Koji

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

    尊敬的 Koji:  

    您需要启用 RX_ACTIVE 和 MUX_MODE、例如 0x00040007。 如需更多信息、请访问以下链接: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1539321/faq-am625-am623-am620-q1-am62l-am64x-am243x-alv-am62ax-am62d-q1-am62px-design-recommendations-custom-board-hardware-design-information-on-padconfig-bits-and-padconfig-registers-default-values-summary/5921379?tisearch=e2e-sitesearch&keymatch=AM62L%20padconfig。  

    此致、

    Shriya