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.

[参考译文] DP83822I:使用 GPIO 触发硬复位

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1469275/dp83822i-trigger-a-hard-reset-using-a-gpio

器件型号:DP83822I
主题中讨论的其他器件:AM6442TPS65220

工具与软件:

尊敬的社区:

我正在使用一个基于 TI AM6442 SOC 的定制板、并连接了两个 PHY DP83822。 对于电源管理、我们使用 PMIC TI TPS65220。

每个 PHY 的复位(nRESET)路由到 AM6442上的 GPIO (1.8V 外部上拉电阻)。 PHY 的复位在启动时为高电平(=无复位)、并且 AVD 在引导期间发生变化(LDO4时初始电压为2.5V -> PMIC 配置后为1.8V)、因此我们必须在更改电源后复位 PHY、以便完全重新初始化、包括自举引脚。

我查看了一些示例和文档(ethernet-phy.yaml)、但我无法 触发复位、最好是通过 sysfs。

我的设备树节点如下所示:

mdio1_pins_default: mdio1-default-pins {
	bootph-all;
	pinctrl-single,pins = <
		AM64X_IOPAD(0x01fc, PIN_OUTPUT, 4) /* (R2) PRG0_PRU1_GPO19.MDIO0_MDC */
		AM64X_IOPAD(0x01f8, PIN_INPUT, 4) /* (P5) PRG0_PRU1_GPO18.MDIO0_MDIO */
	>;
};
	
cpsw1_rst_default: cpsw1_rst_default_pins {
	pinctrl-single,pins = <
		AM64X_IOPAD (0xBC, PIN_OUTPUT, 7) /* (U8) PRU0_GP_1 / GPIO0_46 */
	>;
};

cpsw2_rst_default: cpsw2_rst_default_pins {
	pinctrl-single,pins = <
		AM64X_IOPAD (0xE8, PIN_OUTPUT, 7) /* (U9) PRU0_GPO_2 / GPIO0_57*/
	>;
};
	    

&cpsw3g_mdio {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&mdio1_pins_default>, <&cpsw1_rst_default>, <&cpsw2_rst_default>;

	cpsw3g_phy0: ethernet-phy@0 {
		compatible = "ethernet-phy-ieee802.3-c22";
		reg = <0>;
		reset-names = "phy";
		reset-gpios = <&main_gpio0 46 GPIO_ACTIVE_LOW>;
		reset-assert-us = <1000>;
		reset-deassert-us = <2000>;
		rx-internal-delay-ps = <1>; 
        tx-internal-delay-ps = <1>; 
	};

	cpsw3g_phy1: ethernet-phy@1 {
		compatible = "ethernet-phy-ieee802.3-c22";
		reg = <1>;
		reset-names = "phy";
		reset-gpios = <&main_gpio0 57 GPIO_ACTIVE_LOW>;
		reset-assert-us = <1000>;
		reset-deassert-us = <2000>;
		rx-internal-delay-ps = <1>;	
        tx-internal-delay-ps = <1>;
	};
};

那么、我的问题是、如何触发 PHY 的完全复位?

感谢任何帮助。

Br Benjamin

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

    尊敬的 Benjamin:

    感谢发帖。 我们的一位工程师将很快与您联系。

    此致、

    Gerome.

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

    尊敬的 Benjamin:

    PHY 驱动程序当前不支持通过器件树使 RESET 生效。

    为了将 RESET 置为有效并重新配置引脚、寄存器写入为:
    0x1F = 0x8000

    我是否正确理解需要在系统启动并加载 DTS 后执行此寄存器写入(由于引导期间 PMIC 更改加载)?

    在这种情况下、需要使用单独的脚本或驱动程序逻辑在引导后执行此写入操作。

    谢谢!

    Evan

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

    尊敬的 Evan:

    感谢您的答复。  

    PHY 驱动程序当前不支持通过设备树置位 RESET。

    这就是它不起作用的原因。 我从器件树中删除了这些属性。

    我是否正确理解需要在系统启动后实施此寄存器写入以及加载 DTS (由于启动期间 PMIC 更改了加载)?

    我不确定是否完全必须复位 PHY。 我仅更改 AVD 电压(2.5V 至1.8V)。 VDDIO 从开始设置为1.8V。 这是否需要复位 PHY? 我假设 AVDD 电平检测具有未定义的行为、因为不支持2.5V、仅支持1.8V 和3.3V。

    在这种情况下、需要使用单独的脚本或驱动程序逻辑在启动后执行此写入操作。

    现在我编写了一个脚本来更改 PHY 复位引脚的电平(如果确实需要对 PHY 进行复位)。

    Br Benjamin

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

    尊敬的 Benjamin:

    为了实现更稳健的运行、如果 AVD 或 VDDIO 电平在 PHY 上电后发生变化、建议复位 PHY。

    请告诉我、您在将 RESET 置为有效后是否发现任何问题。

    谢谢!

    Evan

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

    尊敬的 Evan:

    好的、我会测试一下、然后在周一返回测试结果。

    非常感谢。

    Br Benjamin

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

    听起来不错、期待取得成果。

    谢谢!

    Evan