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.

[参考译文] AM623:一些 GPIO 在 Linux 中不作为输出工作

Guru**** 2470720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1468193/am623-some-gpios-do-not-work-as-output-in-linux

器件型号:AM623

工具与软件:

在我们的定制电路板上、某些 GPIO 用作输出、而其他 GPIO 不用作输出(在 Linux 中)。 不工作意味着可以使用 gpioset 将它们设置为低/高、但输出不会驱动为低或高、它是浮动的。 当我使用调试器直接写入寄存器时、情况也是如此。 注意:受影响的 GPIO 可以成功配置并用作输入。 我可以读取值和上拉/下拉开关。 此问题似乎仅与输出驱动器有关。

当我在 uboot 中停止该器件并在此背景下访问 IO (通过调试器或存储器命令)时、输出按预期工作。 当我引导至 Linux 时、受影响的输出会停止工作。 其他继续工作。

我看不到使用 SoC 使用的 GPIO 单元的关系、我们在 GPIO0和 GPIO1上具有工作输出、而且我们也没有在这两个单元上工作输出。

我利用调试器检查了寄存器、 uboot 和 Linux 环境中的内容是相同的。  据我了解、内容是正确的。

可以使用的示例 GPIO0_66 (组4、位2)  不会 在 Linux 中工作:

  1. PADCONFIG67:0x00010007
  2. GPIO_DIR45:0xFFFFFFF3 (位2 = 0 ->输出)
  3. OUT_DATA45:0x0000000C (位2 = 1 ->驱动至高电平)

我可以使用 gpioset 2 66=x 在 Linux 中设置输出、并且我看到寄存器内容也相应地发生了变化。 因此、对 GPIO 单元的访问似乎是正确的。 当我测量输出时、它始终处于悬空状态。

显然、Linux 配置的某种方式会使某些 GPIO (或其输出驱动程序)停止工作。

您是否有什么想法可以解释这种行为? SOC 中是否有其他单位/设置可能影响 GPIO 输出功能?

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

    尊敬的 Andreas:

    您是否能够使用 TI SDK 重现此问题? 哪个版本? 或您使用的是什么 Linux 基础?

    我想我们还需要更多有关您的器件配置的背景信息。 您是否能够提供 DTS 文件? 如果您无法在此处分享、您可以通过电子邮件将其发送给我。

    此致、Frank

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

    您好、Frank、

    感谢您的快速响应。 我们使用的是基于内部 debian 的 Linux (内核6.1.112)。 我们尚未尝试使用 SDK 重现问题。 我通过邮件给你发送了信息。

    此致

    Andreas

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

    我们找到了 rootcause。

    相关的 GPIO 是 MMC1和 MMC2接口的一部分、未在器件树中正确禁用。 内核试图在这些接口上找到存储器、没有找到任何内容并将其禁用。

    在设备树中将接口设置为"disabled"后。 一切都按预期运行。