ZHCAEL2 October   2024 AM3351 , AM3352 , AM3354 , AM3356 , AM3357 , AM3358 , AM3359 , AM4372 , AM4376 , AM4377 , AM4378 , AM4379 , AM620-Q1 , AM623 , AM625 , AM625-Q1 , AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM6411 , AM6412 , AM6421 , AM6422 , AM6441 , AM6442

 

  1.   1
  2.   摘要
  3.   商标
  4. 术语
  5. 先决条件
  6. 快速初始步骤
  7. 调试概述
  8. 网络驱动程序初始化过程
  9. 以太网 PHY 分析
  10. 以太网 MAC 统计信息分析
  11. 如何获取 IPv4 地址
  12. 跟踪数据包
  13. 10调试网络拓扑和技术
    1. 10.1 直接连接
    2. 10.2 静态 IP 地址
    3. 10.3 设置低比特率
    4. 10.4 连接交换机时的注意事项
  14. 11Linux® 实用程序汇总
  15. 12申请以太网支持的检查清单

网络驱动程序初始化过程

在 TI 基于 Arm® 的处理器上,有两个在 Linux 引导期间初始化的驱动程序:MDIO 驱动程序以及 CPSW 和/或 PRU_ICSSG 驱动程序。MDIO 驱动程序用于与以太网 PHY 通信。CPSW 和/或 PRU_ICSSG 驱动程序可以设置以太网 MAC。为了检查这些驱动程序是否已正确初始化,需要检查 DUT 的引导日志。此时将出现以下初始化阶段:

  1. MDIO 和 CPSW 或 PRU_ICSSG 驱动程序均已初始化且没有错误。
  2. MDIO 驱动程序已在电路板 DTS 文件中定义的相应 PHY 地址处检测到 PHY。确切的 PHY 地址由 PHY 硬件自举决定。
  3. 以太网接口为 up 状态并建立了链路,假设在启动前已将电缆连接到以太网端口。

以下日志显示了初始化过程中应该执行的操作的示例。为每行打印的时间戳在不同的引导序列之间可能不同。

[    1.060850] davinci_mdio 8000f00.mdio: Configuring MDIO in manual mode
[    1.095345] davinci_mdio 8000f00.mdio: davinci mdio revision 9.7, bus freq 1000000
[    1.098179] davinci_mdio 8000f00.mdio: phy[0]: device 8000f00.mdio:00, driver TI DP83867
[    1.098198] davinci_mdio 8000f00.mdio: phy[1]: device 8000f00.mdio:01, driver TI DP83867
[    1.098246] am65-cpsw-nuss 8000000.ethernet: initializing am65 cpsw nuss version 0x6BA01103, cpsw version 0x6BA81103 Ports: 3 quirks:00000006
[    1.098500] am65-cpsw-nuss 8000000.ethernet: initialized cpsw ale version 1.5
[    1.098505] am65-cpsw-nuss 8000000.ethernet: ALE Table size 512
[    1.099141] pps pps0: new PPS source ptp0
[    1.099456] am65-cpsw-nuss 8000000.ethernet: CPTS ver 0x4e8a010c, freq:500000000, add_val:1 pps:1
[    1.120288] am65-cpsw-nuss 8000000.ethernet: set new flow-id-base 19

在此示例中,MDIO 驱动程序是 davinci_mdio,CPSW 驱动程序是 am65-cpsw-nuss。DUT 上有两个 TI DP83867 PHY,预期的 PHY 地址将自举至地址 0 和 1。MDIO 驱动程序在电路板 DTS 中指定的这些地址处检测到这些 PHY,并将 PHY 连接到 DP83867 PHY 驱动程序。在启动序列之前未连接以太网电缆,因此不会显示链路 up 状态消息。

以下日志显示了 MDIO 驱动程序扫描总线以查找在 DUT 的 DTS 文件中定义的以太网 PHY。这是符合预期的正常初始化序列。此过程将确定 PHY 供应商,也将确定相应的 PHY 驱动程序。

[    6.902614] am65-cpsw-nuss 8000000.ethernet eth1: PHY [8000f00.mdio:01] driver [TI DP83867] (irq=POLL)
[    6.902648] am65-cpsw-nuss 8000000.ethernet eth1: configuring for phy/rgmii-rxid link mode
[    6.938874] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)
[    6.938911] am65-cpsw-nuss 8000000.ethernet eth0: configuring for phy/rgmii-rxid link mode

电路板 DTS 文件中定义的 PHY 然后由相应 DTS 定义中的 CPSW 端口引用。以下代码是从 TI EVM 提取的一段编辑过的代码,其中展示了 MDIO 和用于以太网端口的 PHY,以及在 Linux 引导期间如何在 Linux 控制台中识别 MDIO 和 PHY。

A DTS PHY node example, shortened for discussion purposes

&cpsw3g_mdio {
	cpsw3g_phy0: ethernet-phy@0 {
		reg = <0>;    <-- check PHY address, verify this is correct
		......
	};
};

This line shows the PHY defined in the DTS being identified 

[    6.938874] am65-cpsw-nuss 8000000.ethernet eth0: PHY [8000f00.mdio:00] driver [TI DP83867] (irq=POLL)

如果 MDIO 驱动程序无法与以太网 PHY 通信,则可能会发生多个错误,这些错误要么与 DTS 有关,要么由于硬件实施问题导致 PHY 状态出现问题。

注:

针对 PHY 初始化问题的调试建议:

现在,以太网 PHY 已经被识别,接下来可以查询这些 PHY 以查看是否与链路伙伴建立了链路。如果连接了以太网电缆并建立了链路,DUT 控制台上会显示以下日志。数据比特率和双工模式在建立链路时商定。请注意,在此示例中,速度为 1Gbps、链路为全双工、以太网接口随时可用。

[   11.042192] am65-cpsw-nuss 8000000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[   11.042255] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

TI EVM 上的以太网速度和双工模式在链路伙伴之间通过自动协商确定。上面的消息显示了一个成功的初始化序列。

如果驱动程序初始化有问题,建议参考与电路板设计相关的 TI EVM,检查电路板 DTS。以下代码是用于定义 TI SK-AM62B-P1 EVM 的 CPSW 接口(以太网 MAC)的 DTS 文件示例,可用作参考。

以下 DTS 示例展示了在使用定制电路板 DTS 时需要验证的一些检查点。

Linux Source tree directory: arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi 
...
&cpsw3g {
	bootph-all;
	pinctrl-names = "default";
	pinctrl-0 = <&main_rgmii1_pins_default>;   <-- verify pin mux is correct
};

&cpsw_port1 {
	bootph-all;
	phy-mode = "rgmii-rxid";         <-- verify interface mode is correct
	phy-handle = <&cpsw3g_phy0>;     <-- verify phy name is referenced correctly
};
...
&cpsw3g_mdio {
	bootph-all;
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&main_mdio1_pins_default>;    <-- verify pin mux is correct

	cpsw3g_phy0: ethernet-phy@0 {
		bootph-all;
		reg = <0>;
		ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>; <-- rx clock delay 
		ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
		ti,min-output-impedance;
	};
};

章节摘要:

以下是表明初始化过程成功的条件:

  • MDIO 驱动程序已初始化且无错误,并且已识别 MDIO 总线上的所有预期 PHY。
  • CPSW 和/或 PRU_ICSSG 驱动程序已初始化且无错误。
  • CPSW 驱动程序报告了一条包含预期比特率和双工模式的链路 up 状态消息。