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.

[参考译文] AM6421:正常 u-boot 链中的早期 GPIO 设置

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1509830/am6421-early-gpio-setting-in-normal-u-boot-chain

器件型号:AM6421

工具/软件:

我需要在电路板上安装两条连接到焊球 U14和 U15的线路、以便在引导过程中尽快主动设置为低电平。

借助一个简单的 SBL 示例(我实际上编辑了用于测试的 OTP Keywriter 应用)、我可以使其非常简单:
我将 GPIO 添加到 syscfg 文件中:

...

const gpio            = scripting.addModule("/drivers/gpio/gpio", {}, false);
const gpio1           = gpio.addInstance();
const gpio2           = gpio.addInstance();

...

gpio1.$name                = "CONFIG_GPIO1";
gpio1.pinDir               = "OUTPUT";
gpio1.trigType             = "RISE_EDGE";
gpio1.GPIO.$assign         = "GPIO0";
gpio1.GPIO.gpioPin.$assign = "PRG1_PRU0_GPO9";

gpio2.$name                = "CONFIG_GPIO2";
gpio2.pinDir               = "OUTPUT";
gpio2.trigType             = "RISE_EDGE";
gpio2.GPIO.$assign         = "GPIO0";
gpio2.GPIO.gpioPin.$assign = "PRG1_PRU0_GPO10";

...

然后在 SBL 代码中设置 GPIO (同样、由于我在实验中使用了 OTP Keywriter、因此只需将代码添加到 keywriter_setVpp ()函数中):

#define TEST1_GPIO_BASE_ADDR   (AddrTranslateP_getLocalAddr(CONFIG_GPIO1_BASE_ADDR)) // Get local address for GPIO1
#define TEST2_GPIO_BASE_ADDR   (AddrTranslateP_getLocalAddr(CONFIG_GPIO2_BASE_ADDR)) // Get local address for GPIO2


void keywriter_setVpp(void)
{
    uint32_t gpioBaseAddr1 = (uint32_t)TEST1_GPIO_BASE_ADDR;
    GPIO_setDirMode(gpioBaseAddr1, CONFIG_GPIO1_PIN, GPIO_DIRECTION_OUTPUT);
    GPIO_pinWriteLow(gpioBaseAddr1, CONFIG_GPIO1_PIN);

    uint32_t gpioBaseAddr2 = (uint32_t)TEST2_GPIO_BASE_ADDR;
    GPIO_setDirMode(gpioBaseAddr2, CONFIG_GPIO2_PIN, GPIO_DIRECTION_OUTPUT);
    GPIO_pinWriteLow(gpioBaseAddr2, CONFIG_GPIO2_PIN);    
}

与正常的 OTP Keywriter SBL 示例一样、针对 MCU+ SDK 编译。

这可以正常工作、正如我在"实际"场景中需要的那样、这是完整的正常 u-boot 链。

我的 u-boot 将启动一个自定义独立应用程序、该应用程序将执行所有自己的多路复用、初始化和运行所有硬件。
在启动期间、这两行必须保持低电平才能实现完全引导、直到我的应用接管为止。

我有一个基于10.00.07.04 Linux SDK (board-support/ti-u-boot)中 am64x-EVM 文件的自定义电路板配置(defconfig、设备树等)、但我无法让这些行具有我想要的行为。

请帮助我使其正常工作。

我假设我需要将两个球添加到 k3-am642-r5-<myboard>.dts 文件中、然后将该spl_board_init()函数中的值设置为 low (低)? 我无法让它正常工作。

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

    您好:

    为了明确期望、我们无法帮助开发自定义应用程序。

    添加 GPIO 不是我们看到的典型用例、因为通常会使用 R5SPL 来启动该级的关键元件。 因此、我们没有一个在 SPL 级设置 GPIO 的示例。

    您可以尝试以下任一方法:

    -在-R5 dts 文件中设置 GPIO 的 Pinmux (确保在顶部包含 Pinmux 和 GPIO 文件)、然后尝试使用其中一个 GPIO API 来设置 GPIO。

    -您也可以直接配置 GPIO 和 PADCONFIG 寄存器。 寄存器信息可以在 TRM 中找到: https://www.ti.com/lit/pdf/spruim2 。它可能类似于 AM64的功能: https://git.ti.com/cgit/ti-u-boot/ti-u-boot/tree/board/ti/am64x/evm.c?h=ti-u-boot-2023.04#n379

    同样、这些建议未经 TI 验证。

    谢谢、

    Anshu