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.

[参考译文] AM6422:在 U-Boot 中未初始化 PMIC TI TPS65220

Guru**** 2393965 points
Other Parts Discussed in Thread: TPS65219, SK-AM62-LP, AM6442, TPS65220, SK-AM64B

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1469211/am6422-pmic-ti-tps65220-is-not-initialized-in-u-boot

器件型号:AM6422
主题中讨论的其他器件:AM6442TPS65220、TPS65219 SK-AM64B、SK-AM62-LP

工具与软件:

尊敬的社区:

对于定制电路板、我们使用 AM6442 SOC。 对于 PMIC、我们使用 TI TPS65220;对于以太网、我们使用两个 TI DP83822 PHY。
我们需要在 AVD = 1.8V 的情况下运行 PHY。 因此、我们将其连接到 LDO4 (默认值:2.5V)、上电后、输出电压应尽快设置为1.8V (PMIC VSYS=3.3V)。

我会观察到 PMIC 在启动序列期间根本没有初始化。 只有 Linux 在内核引导期间配置 PMIC。 我希望 SPL (R5或 A53)或至少 U-Boot 初始化所有属性为"regulator-boot-on"和"regulator-always-on";设置的稳压器。

由于 PMIC 由 Linux 初始化、我想我在 U-Boot 中做了一些错误的事情。

这是我的 u-boot 器件树中的 PMIC 片段(等于 Linux 使用的器件树)。

&main_i2c0 {
    bootph-all;
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&main_i2c0_pins_default>;
    clock-frequency = <400000>;

    tps65219: pmic@30 {
        bootph-all;
        compatible = "ti,tps65219";
        reg = <0x30>;
        buck1-supply = <&vcc_3v3_sys>;
        buck2-supply = <&vcc_3v3_sys>;
        buck3-supply = <&vcc_3v3_sys>;
        ldo1-supply = <&vcc_3v3>;
        ldo2-supply = <&buck2_reg>;
        ldo3-supply = <&vcc_3v3>;
        ldo4-supply = <&vcc_3v3>;

        pinctrl-names = "default";
        pinctrl-0 = <&pmic_irq_pins_default>;

        interrupt-parent = <&gic500>;                   
        interrupts = <GIC_SPI 224 IRQ_TYPE_LEVEL_HIGH>; 

        regulators {
            buck1_reg: buck1 {
                bootph-all;
                regulator-name = "VDD_CORE";
                regulator-min-microvolt = <750000>;
                regulator-max-microvolt = <750000>;
                regulator-boot-on;
                regulator-always-on;
            };

            buck2_reg: buck2 {
                bootph-all;
                regulator-name = "VCC1V8_SYS";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-boot-on;
                regulator-always-on;
            };

            buck3_reg: buck3 {
                bootph-all;
                regulator-name = "VDD_LPDDR4";
                regulator-min-microvolt = <1100000>;
                regulator-max-microvolt = <1100000>;
                regulator-boot-on;
                regulator-always-on;
            };

            ldo1_reg: ldo1 {
                bootph-all;
                regulator-name = "VDDSHV_SDIO_PMIC";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-always-on;
            };

            ldo2_reg: ldo2 {
                bootph-all;
                regulator-name = "VDDAR_CORE";
                regulator-min-microvolt = <850000>;
                regulator-max-microvolt = <850000>;
                regulator-boot-on;
                regulator-always-on;
            };

            ldo3_reg: ldo3 {
                bootph-all;
                regulator-name = "VDDA_1V8";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-boot-on;
                regulator-always-on;
            };

            ldo4_reg: ldo4 {
                bootph-all;
                regulator-name = "VDD_PHY_1V8";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                regulator-boot-on;
                regulator-always-on;
            };
        };
    };
};
我还有一个 u-boot.dtsi 条目(不确定我是否需要):
&pmic_irq_pins_default {
    bootph-all;
};

&ldo4_reg{
    regulator-init-microvolt = <1800000>;
};
以下是我的 A53 defconfig 中的设置:
CONFIG_DM_PMIC=y
CONFIG_PMIC_TPS65219=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_TPS65219=y
以下是我的 R5 defconfig 中的设置:
CONFIG_DM_REGULATOR=y
CONFIG_SPL_DM_REGULATOR=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_SPL_DM_REGULATOR_GPIO=y
那么、u-boot 为何不能初始化 PMIC? SK-AM64B 具有 PMIC、但在引导期间根本未配置、因为默认情况下输出电压是正确的。
 
感谢任何帮助。
Br Benjamin

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

    尊敬的 Benjamin:

    我不确定这是 I2C 总线还是 PMIC 本身有问题。

    以下是一些可以尝试的测试:

    • 定制电路板上是否有其他 I2C 器件可以在 U-Boot 上访问? 尝试访问该设备。 如果该器件也无法初始化、那么我认为它是 I2C 问题。
    • SK-AM64B EVM 上还有一些其他 I2C 器件、我们可以尝试访问其中的任何器件。 请参阅下图。
    • 使用 SK-AM64B 将 PMIC 节点添加到 U-Boot 器件树中。 您提到其电源电压已经过预配置、但要进行少量更改(如果可能)以查看更改是否得到反映。

    SK-AM64B 的 I2C 树:

    通过搜索、以下是一些在 U-Boot 中使用 TPS65219的示例:

    此致、

    Anshu

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

    尊敬的 Anshu:

    感谢您的快速供应。 我认为这不是 I2C 问题、因为当我中断引导过程并进入 U-Boot 命令行时、我可以使用 u-boot 命令 PMIC  和 稳压器与 PMIC 通信。 我甚至可以手动将 LDO4的电压提升至器件树节点中指定的1800000uV (使用命令稳压器)。

    您能否确认 u-boot (或 SPL) 是否应该初始化 PMIC、而无需在 board.c 中编写代码等进一步操作?

    我还看了其他电路板的设备树节点、除了属性外、没有发现任何重大差异  

    TI 电源按钮系统电源控制器



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

    尊敬的 Benjamin:

    因为我有高度优先的工作要做、所以对延误深表歉意。 我不希望 U-Boot 或 SPL 直接配置 PMIC、而是只初始化其连接到的 I2C 总线。

    可以帮助我了解在启动过程中与 PMIC 通信的用例吗? 您提到以太网 PHY 需要上电、但为什么需要在 Linux 引导之前上电?

    谢谢!
    Anshu

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

    尊敬的 Anshu:

    不用担心。 在这些文档(doc/device-tree-bindings/regulator/regulator-master regulator.txt··U-Boot·GitLab)中、我预计具有"regulator-boot-on"属性的所有稳压器都将尽早初始化。 对我来说、在启动序列期间尽早配置所有稳压器似乎是正确的。

    对于 PHY、我们可能希望从 u-boot 使用以太网(在生产期间)。 因此、对于 AVD 而言、PHY 在正确的电源电压下运行是很好的。 由于仅支持1.8V 和3.3V 电压、并且 LDO4输出电压默认为2.5V、因此我们需要在 SPL 或 U-Boot 引导期间更改输出电压、最好由驱动器自动完成。

    如果不是自动完成、我想我可以在 board.c 文件中执行该操作、但我想知道上述属性的用途是什么。

    至少如果我设置了属性  regulator-init-microvolt、并且我··正确读取了 regulator-ubclass.c (在主控 u-boot/u-boot GitHub 上的 u-boot/drivers/power/regulator-ubclass.c)、驱动器应设置电压。

    if (uc_pdata->flags & REGULATOR_FLAG_AUTOSET_UV)
    		ret = regulator_set_value(dev, uc_pdata->min_uV);
    	if (uc_pdata->init_uV > 0)
    		ret = regulator_set_value(dev, uc_pdata->init_uV);
    

    Br Benjamin

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

    尊敬的 Benjamin:

    只是为了确认我对背景的理解。 预期目标:

    处理器(在 u-boot 之前)通过 i2c 指示 PMIC 开启 LDO4 并将其设置为所需的电压。 此 LDO4用于为以太网 PHY 供电、使其可在 u-boot 期间使用。

    一个问题:是否可以对 PMIC 寄存器进行预编程以启用 LDO4? 如果在 U-Boot 之后需要更改 LDO4、它应该能够做到。

    我对这些稳压器文档不是很熟悉、因此我需要一些时间来研究它们。

    谢谢!

    Anshu

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

    尊敬的 Anshu:

    很抱歉我的响应延迟了。 我期望从 R5处理器运行的 SPL (请参阅附加的图像)根据器件树初始化 PMIC、但这样不起作用。

    可以在制造期间对 PMIC 进行编程、但会增加复杂性、因此我们希望避免这种情况。 由于我们没有大容量、因此订购预配置的变体似乎不是一个选项。

    因此、我们决定将 PHY 连接到 LDO3、该 LDO 在启动时默认配置为1.8V、这也可以解决我们的问题。

    Br Benjamin

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

    感谢本杰明的更新。 该主题现在将关闭。 如有任何其他问题、请随时创建新帖子。

    谢谢!

    Anshu