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.

[参考译文] AM62P:支持 RMII 的以太网

Guru**** 2540720 points
Other Parts Discussed in Thread: AM62P, AM67

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1558227/am62p-ethernet-with-rmii

Thread 中讨论的其他器件:AM62PAM67

工具/软件:

我使用 RMII、并在定制载板上安装了 AM62P SoC。
PHY 芯片为 KSZ8081。
关于时钟、电路板上有一个使用振荡器生成的时钟、PHY 接收时钟作为输入以生成自己的 50MHz 时钟。

我有以下 DTS、但很遗憾、我无法建立以太网链路:

	aliases {
		ethernet0 = &cpsw_port1;
		// ethernet1 = &cpsw_port2;
	};

&main_pmx0 {
	bootph-all;

	main_mdio1_pins_default: main-mdio1-default-pins {
		pinctrl-single,pins = <
			AM62PX_IOPAD(0x0160, PIN_OUTPUT, 0) /* (F17) MDIO0_MDC */
			AM62PX_IOPAD(0x015c, PIN_INPUT, 0) /* (F16) MDIO0_MDIO */
		>;
		bootph-all;
	};

	main_rmii1_pins_default: main-rmii1-default-pins {
		pinctrl-single,pins = <
			AM62PX_IOPAD(0x0130, PIN_INPUT, 1) /* (B17) RGMII1_TXC.RMII1_CRS_DV */
            AM62PX_IOPAD(0x0148, PIN_INPUT, 1) /* (A16) RGMII1_RXC.RMII1_REF_CLK */
			AM62PX_IOPAD(0x014c, PIN_INPUT, 1) /* (B15) RGMII1_RD0.RMII1_RXD0 */
			AM62PX_IOPAD(0x0150, PIN_INPUT, 1) /* (B16) RGMII1_RD1.RMII1_RXD1 */
			AM62PX_IOPAD(0x0144, PIN_INPUT, 1) /* (A15) RGMII1_RX_CTL.RMII1_RX_ER */
			AM62PX_IOPAD(0x0134, PIN_INPUT, 1) /* (A18) RGMII1_TD0.RMII1_TXD0 */
			AM62PX_IOPAD(0x0138, PIN_INPUT, 1) /* (C17) RGMII1_TD1.RMII1_TXD1 */
			AM62PX_IOPAD(0x012c, PIN_INPUT, 1) /* (B18) RGMII1_TX_CTL.RMII1_TX_EN */
		>;
    };
 };
 
 
 
&cpsw3g {
	pinctrl-names = "default";
	pinctrl-0 = <&main_rmii1_pins_default>;
	status = "okay";
};

&cpsw_port1 {
	//phy-mode = "rgmii-rxid";
	phy-mode = "rmii";
	phy-handle = <&cpsw3g_phy0>;
	status = "okay";
};

// &cpsw_port2 {
// 	phy-mode = "rgmii-rxid";
// 	phy-handle = <&cpsw3g_phy1>;
// 	status = "okay";
// };

&cpsw3g_mdio {
	pinctrl-names = "default";
	pinctrl-0 = <&main_mdio1_pins_default>;
	status = "okay";

	cpsw3g_phy0: ethernet-phy@0 {
		reg = <0>;
		compatible = "microchip,ksz8081", "ethernet-phy-ieee802.3-c22";
		bootph-all;
		//ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
		//ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
		//ti,min-output-impedance;
	};
};


如果您能给我一些提示来解决问题、我将不胜感激。

来自 dmesg 的日志:

\u@\h:\w$ dmesg | grep -i cpsw

[    1.276860] am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA01903, cpsw version 0x6BA81903 Ports: 3 quirks:00000006

[    1.352404] am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.5

[    1.359536] am65-cpsw-nuss 8000000.ethernet: ALE Table size 512, Policers 32

[    1.367305] am65-cpsw-nuss 8000000.ethernet: CPTS ver 0x4e8a010d, freq:500000000, add_val:1 pps:0

[    1.387349] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19

[    6.846624] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [Micrel KSZ8081 or KSZ8091] (irq=POLL)

[    6.869420] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rmii link mode

 \u@\h:\w$ dmesg | grep -i phy
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] arch_timer: cp15 timer(s) running at 200.00MHz (phys).
[    1.342802] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver Micrel KSZ8081 or KSZ8091
[    7.381436] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [Micrel KSZ8081 or KSZ8091] (irq=POLL)
[    7.395812] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rmii link mode


此致、
Mohamed

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

    大家好、AM67 上的硬件也有同样的问题。

    可能需要包括 ethtool -S eth0 输出。
    对于我来说、我收到 p0_rx_good_frames 上的数据包、但不会将这些数据包转发到 eth0 rx_good_frames

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

    尊敬的 Evan:
    感谢您分享您的问题。
    “ethtool -S eth0“的输出为所有帧显示 0。
    我发现 KSZ8081 的 XI 引脚采用 25MHz 时钟作为输入、但 ref_clk 根本没有信号。 我不确定是否必须将 KSZ8081 配置为另一种模式。
    您可以共享您的配置吗?

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

    尊敬的 Mohamed:

    在这种情况下、请验证您的布线并检查您的 phy 索引。
    我的硬件通过电阻器搭接/配置为 0。

    如果您的硬件 phy 设置为不同的数字、则您需要更改 Ethernet-phy@0 和相应的 reg =<0>;以匹配。 (即,phy 为 1 将@1 且 reg =<1>)。
    您也可以尝试删除这两行、因为驱动程序是为我自动配置的、只要我有正确的 phy index/reg。
    兼容=“微芯片、ksz8081“、“Ethernet-phy-IEEE802.3-C22";“;
    全部引导;

    另外、在我的设置中、我使用的是交叉电缆、因为我直接连接到 PC、并且我的设置无法自动切换 TX/Rx 引脚。

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

    尊敬的 Evan:

    我检查 PHYAD[1:0]引脚并将其配置为 IPD、因此它们也会使用下拉电阻器进行捆绑。 因此 phy-0 应该正确。
    我的怀疑是 KSZ8081 芯片的 REF_CLK 有问题。 它应该向 MAC 芯片输出 50MHz、但我认为情况并非如此。

    还尝试删除驱动程序线路“compatible =“、“microchip、ksz8081“、“ethernet-phy-IEEE802.3-C22";“;“、但遗憾的是、它没有提供帮助。

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

    您好、Mohamed、我的 50MHz 时钟输出会自动配置。 可以使用 MDIO-TOOLS 尝试手动启用它。

    此外、我要将这些引脚更改为输出:

    AM62Px_IOPAD (0x0134、PIN_OUTPUT、1)/*(A18) RGMII1_TD0.RMII1_TXD0 */
    AM62Px_IOPAD (0x0138、PIN_OUTPUT、1)/*(C17) RGMII1_TD1.RMII1_TXD1 */
    AM62Px_IOPAD (0x012c、PIN_OUTPUT、1)/*(B18) RGMII1_TX_CTL.RMII1_TX_EN */

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

    尊敬的 Evan:

    我想我的电路板出现硬件问题、我得到了一个新的电路板、链接似乎与我的当前配置一致。
    问题是它只能朝一个方向工作、使用 tcpdump、我可以看到数据包从我的电路板发送到我的 PC、PC 回复回来、但我的电路板没有接收到任何数据包。 这是你面临的同一个问题吗?

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

    嗨、Mohamed、是的、这是我遇到的同一个问题。 我的 PIN 配置很差、从 RGMII 到 RMII 的复制粘贴很差。
    看起来您应该尽我所能地工作。

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

    您好、Mohamed、

    感谢您发送编修。感谢您发送编修。

    我猜我的电路板有硬件问题、我得到了一个新的电路板、链接似乎与我的当前配置一致。
    问题是它只能朝一个方向工作、使用 tcpdump、我可以看到数据包从我的电路板发送到我的 PC、PC 回复回来、但我的电路板没有接收到任何数据包。 您面临的问题是否相同?

    看到电路板没有接收到数据包后、能否分享“ethtool -S eth0“的结果? 如果您的 PC 是 Linux PC、请在 PC 端共享相同的“ethtool -S“结果。  

    此外、您能否检查“ethtool eth0“的结果以查看检测到的链路是否为“yes"?“?

    您使用的是哪个 Linux SDK 版本?

    -道林