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.

[参考译文] AM5728:如何通过 Linux 引导从 u-boot 配置默认输出引脚状态

Guru**** 2439710 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1543119/am5728-how-to-configure-default-output-pin-states-from-u-boot-through-linux-boot

器件型号:AM5728


工具/软件:

正如标题所示、我想确认我对如何在整个上电和操作系统加载过程中配置 GPIO 引脚状态的理解程度并更好地理解。

我 在定制载板上使用基于 TI-Processor-SDK 09.02.00.311 的 PHYTEC AM57x SoM 及其 BSP、其中相关的 GPIO 基本上只是拆分成接头进行测试、并且不会进行其他电气连接。

我知道这应该能够通过我已经为 u-boot 和 Linux 创建的自定义器件树文件来实现。 大多数情况下,一切都是行为,因为我想要除了几个引脚,和一些额外的行为特征的一堆引脚。

具体而言、我的目标是:

  1. 能够将特定的 GPIO 引脚配置为输出、并能够将其上电状态设置为高电平或低电平、并保持从 u-boot 到 Linux OS 负载的持续时间、然后只在我们的应用程序控制它们时更改状态。 我希望大多数引脚在加电时立即变为高电平。 只有几个信号会变为低电平。
  2. 能够将特定的 GPIO 配置为输入、并在每个 GPIO 上配置上拉/下拉电阻。

我已经得到了#2 工作的期望。 但是、对于#1、我看到许多引脚有不同的行为。

可能最复杂的引脚是在 Linux 期间被分配给将 PRU 用作 GPIO 的引脚。 在 U-Boot 中、我不知道如何或者是否可以配置 PRU 器件、因此我已将这些引脚配置为 GPIO、然后在操作系统引导期间、将它们分配给 PRU 并再次进行配置。 其中一些引脚在上电时电压为~2.3V、然后在 u-boot 期间快速降至 0V、还有一些引脚保持在 0V、还有一些引脚在 OS 负载期间跳转到 3.3V。

U-Boot 器件树摘录:

&dra7_pmx_core {
...
GPIO8_PINS:GPIO8_PINS{
pinctrl-single、pins =<
DRA7XX_CORE_IOPAD (0x15FC+0x2000、PIN_OUTPUT | MUX_MODE14)//(E8) vout1_D8.PR2_pru0_gpo5 — 配置为 GPIO8_8 输出
...
>; 
}; 
};
&GPIO8{ 
pinctrl-names =“default";“; 
pinctrl-0 =<&GPIO8_pin>; 
状态=“正常“;}; 

Linux 器件树摘录:

&dra7_pmx_core {
...
pruss2_pins:pruss2_pins{
pinctrl-single、pins =< DRA7XX_CORE_IOPAD (0x15FC+0x2000、PIN_OUTPUT | MUX_MODE13)//(E8) vout1_D8.PR2_pru0_gpo5
...
>; 
}; 
};
&pruss2{ 
pinctrl-names =“default";“; 
pinctrl-0 =<&pruss2_pins>; 
状态=“正常“;}; 



以此引脚为例、操作系统启动后、我确实可以控制引脚状态以及几乎所有其他 GPIO 输出引脚。 假设没有意外的应用改变其状态、是否有办法配置初始输出引脚状态、并在整个引导过程中对其进行维护?
我看到
PIN_OUTPUT_PULLUP 是一个配置选项、但我已经明白它不能满足我的需要。

在另一种情况下、如果该引脚未分配给 PRU、而是通过 u-boot 和 Linux 保持为 GPIO 引脚、则无法控制其状态。 具体来说、这是 GPIO7_2、我的配置与上述相同、只是在 u-boot 和 Linux 器件树中保持在 MUX_MODE14 中:
&dra7_pmx_core {
GPIO7_PINS:GPIO7_PINS{
pinctrl-single、pins =< DRA7XX_CORE_IOPAD (0x3790、PIN_OUTPUT | MUX_MODE14)//(AC3) mmc3_dat3.GPIO7_2 >;};
};

&GPIO7{ 
TI、GPIO 常开; 
pinctrl-names =“default";“; 
pinctrl-0 =<&GPIO7_pins>; 
状态=“正常“;}; 


我还没有机会研究的一些事情是使用 gpio-hog、以及某些内核驱动程序可能会导致问题。

So, am I on the right track, and what else can I do to ensure output pin states stay at predefined states during boot?

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

    您好 Jacob:

    首先、我来展示以下应用手册: AM57xx SitaraTM IO 配置要求

    应使用 u-boot 文件 mux_data.h 来完成引脚多路复用、而不是在设备树中进行。

    请看一下、如果这样做有所帮助、请告诉我。

    -Josue

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

    我能够找到供应商自定义的  mux_data.h 并 修改相关条目。 这解决了我的问题!