这是 TJA1120A 的设备树 - cpsw_port1,cpsw3g_phy0
&cpsw_port1 {
status = "okay";
phy-mode = "rgmii-txid";
phy-handle = <&cpsw3g_phy0>;
};
&cpsw_port2 {
status = "okay";
phy-mode = "rgmii";
phy-handle = <&cpsw3g_phy1>;
};
&cpsw3g_mdio {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_mdio1_pins_default>;
cpsw3g_phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id001b.b031";
reg = <4>;
};
cpsw3g_phy1: ethernet-phy@1 {
compatible = "ethernet-phy-id0022.1620";
reg = <0>;
txc-skew-ps = <900>;
rxc-skew-ps = <900>;
rxd0-skew-ps = <420>;
rxd1-skew-ps = <420>;
rxd2-skew-ps = <420>;
rxd3-skew-ps = <420>;
txd0-skew-ps = <420>;
txd1-skew-ps = <420>;
txd2-skew-ps = <420>;
txd3-skew-ps = <420>;
rxdv-skew-ps = <420>;
txen-skew-ps = <420>;
};
};这里我们将“rgmii-txid”指定为 TJA1120A 的 phy-mode。
但是当我读取寄存器RGMII_TXC_DELAY_CONFIG 时,读取到的是 0x0014,这意味着没有延迟(第 15 位),而RGMII_RXC_DELAY_CONFIG读取到的是 0x8014,这意味着延迟已设置(第 15 位)。
另外,如果我在 DT 中将 phy-mode 更改为“rgmii-rxid”,则RGMII_RXC_DELAY_CONFIG读取 0x0014, RGMII_TXC_DELAY_CONFIG读取 0x8014。
我刚刚尝试在 DT 中设置“rgmii”,然后使用 phytool 设置这些寄存器,它完美地反映了并开始 ping,然后将RGMII_RXC_DELAY_CONFIG第 15 位设置为高电平,将RGMII_TXC_DELAY_CONFIG第 15 位设置为低电平。
我想了解为什么在 phy-mode 的 DT 配置下会发生这种反转。
对于我们基于 AM62A7 的 ECU,PCB 需要对 RX_Clock 进行内部延迟,因此设置了“rgmii-txid”。目前运行正常。
另外,我还想知道这种 PHY 模式下引脚连接是否可用,以及 DTS 是否负责处理。
您好,
根据 TJA1120A 文档,RGMII 延迟配置可能会让人有些困惑,因为寄存器名称和寄存器内部描述的延迟并不直接匹配。
请参阅设备 DS 中的 RGMII_RXC_DELAY_CONFIG/RGMII_TXC_DELAY_CONFIG 寄存器位描述:
因此,在检查配置时,重点是实际的寄存器位描述和初始化后最终的寄存器读取值。
另请注意,引脚绑定仅定义 RESET 后的默认配置。软件驱动程序稍后可以通过 MDIO 覆盖此设置,因此应在系统启动后通过读取寄存器来验证有效配置。
另外,请确保 MAC 端和 PHY 端没有同时启用相同的 RGMII 时钟延迟,除非这是电路板时序设计所要求的。
BR,彼得