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.
我们正在开发定制板上的以太网外设。 这两个接口都能正常工作,并且链接(eth0和 eth1)可以正常启动/关闭,并且在 PC->device 或 device->PC 中 ping 不起作用。 请查看以下日志片段和 ethtool 输出。 请帮我们解决问题。
电路板:基于 AM437X 的定制电路板。
TISDK-PROCESSOR-SDK-LINUX-AM437X-EVM-06.03.00.106
Linux:Linux-4.19.94
PHY:Microchip LAN8740AI-EN-TR 和 LAN8740AI
PC 到设备的连接:
我们每次手动连接一个板的 eth0和 Eth1。 当我们将以太网电缆连接到以太网电缆时,主板的以太网接口(eth0和 Eth1)会检测到链路。 我们已在 PC 上配置了 USB 以太网适配器、带有169.254.1.60 (测试 eth0时)和192.168.100.55 (测试 eth1时)。 目标 IP 地址 通过板上的“/etc/networks/interface”文件静态分配。 下面是板上使用的实际 IP 和子网详细信息。
eth0配置为“ip - 169.254.1.1;Subnet–255.255.255.0.0”
ETH1配置为“IP - 192.168.100.100;子网–255.255.255.0”
我们已经测试了 USB 转以太网转换器和以太网电缆及其工作正常。 我们通过连接到工作板对其进行了验证。
日志片段:
[1.234284] MDIO_bus 固定-0:用于消费类复位的 GPIO 查找
[1.234297] MDIO_bus 固定-0:使用查找表进行 GPIO 查找
[1.234306] MDIO_BUS 固定-0:未找到 GPIO 使用者复位
[1.255561] MDIO_bus 4a101000.MDIO:用于消费类复位的 GPIO 查找
[1.255573] MDIO_bus 4a101000.MDIO:使用器件树进行 GPIO 查找
[1.255602] of_get_named_gpio_FLAGS:无法解析节点'/OCP@44000000 /以太网@4a100000/MDIO@4a101000[0]的'set-GPIO'属性
[1.255623] of_get_named_gpio_FLAGS:无法解析节点'/OCP@44000000 /以太网@4a100000/MDIO@4a101000[0]的'resset-GPIO'属性
[1.255635] MDIO_bus 4a101000.MDIO:使用查找表进行 GPIO 查找
[1.255645] MDIO_bus 4a101000.MDIO:未找到 GPIO 使用者复位
[1.311668] DaVinci_MDIO 4a101000.MDIO:达芬奇 MDIO 修订版本1.6、总线频率1000000
[1.319377] DaVinci_MDIO 4a101000.MDIO:Detected phy mask fffffffffc
[1.327738] libphy: 4a101000.mdio:探测
[1.331896] DaVinci_MDIO 4a101000.MDIO:PHY[0]:器件4a101000.MDIO:00、驱动程序 SMSC LAN8740
[1.340381] DaVinci_MDIO 4a101000.MDIO:PHY[1]:器件4a101000.MDIO:01、驱动程序 SMSC LAN8740
[1.350163] cpsw 4a100000.以太网:检测到的 MACID = 14:42:fc:94:C1:A6
[1.357003] cpsw 4a100000.ethernet:初始化 cpsw ale 版本1.4
[1.363470] cpsw 4a100000.以太网:ALE 表大小1024
[1.368766] cpsw 4a100000.以太网:CPT:溢出检查周期500 (jiffies)
[1.377012] cpsw 4a100000.以太网:cpsw:检测到的 MACID = 14:42:fc:94:C1:A8
[1.711255] cputidle: enable-method 属性'ti、am4372'找到操作
[7.012316] net eth0:正在初始化 cpsw 版本1.15 (0)
[7.183015] SMSC LAN8740 4a101000.MDIO:00:连接的 PHY 驱动程序[SMSC LAN8740](MII_BUS:phy_addr=4a101000.MDIO:00、IRQ=POLL)
[7.330352] IPv6:ADDRCONF (NETDEV_UP):eth0:链路未就绪
[7.412438] net eth1:正在初始化 cpsw 版本1.15 (0)
[7.593078] SMSC LAN8740 4a101000.MDIO:01:连接的 PHY 驱动程序[SMSC LAN8740](MII_BUS:phy_addr=4a101000.MDIO:01、IRQ=POLL)
[7.704019] IPv6:ADDRCONF (NETDEV_UP):ETH1:链路未就绪
[9.362642] cpsw 4a100000.以太网 eth0:链路向上- 100Mbps/全-流控制关闭
[9.381710] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
[11.358940]器件 eth0进入混杂模式
链接状态:
root@Node1442fc94c1a6:~#[2342.962518] cpsw 4a100000。以太网 eth0:链路断开
[2346.962505] cpsw 4a100000.以太网 eth0:链路向上- 100Mbps/全-流控制关闭
root@Node1442fc94c1a6:~
root@Node1442fc94c1a6:~
root@Node1442fc94c1a6:~#[2355.122283] cpsw 4a100000.ethernet eth0:链路断开
[2356.802511] cpsw 4a100000.以太网 eth1:链路向上- 100Mbps/全-流量控制关闭
[2356.810465] IPv6:ADDRCONF (NETDEV_CHANGE):eth1:链路就绪
[2363.922284] cpsw 4a100000.ethernet eth1:链路断开
[2365.042502] cpsw 4a100000.以太网 eth0:链路向上- 100Mbps/全-流量控制关闭
ethtool 输出:
root@Node1442fc94c1a6:~#./ethtool eth0
eth0的设置:
支持的端口:[ TP MII]
支持的链路模式:10BaseT/Half 10baseT/Full
100BaseT /半个100BaseT /全双工
支持的暂停帧使用:仅对称接收
支持自动协商:是
支持的 FEC 模式:未报告
通告的链路模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
广播的暂停帧使用:否
广播自协商:是
通告的 FEC 模式:未报告
链接伙伴通告的链接模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
链接伙伴通告的暂停帧使用:对称
连接方通告的自动协商:是
连接伙伴通告的 FEC 模式:未报告
速度:100Mb/s
双工:全双工
端口:MII
PHYAD:0
收发器:内部
自协商:开
支持唤醒:D
唤醒:D
当前消息级别:0x00000000 (0)
检测到链接:是
root@Node1442fc94c1a6:~
root@Node1442fc94c1a6:~#./ethtool -S eth0
NIC 统计信息:
正常 Rx 帧:0
广播 Rx 帧:0
多播 Rx 帧:0
暂停 Rx 帧:0
RX CRC 错误:0
RX 对齐/代码错误:0
超大 RX 帧数:0
RX Jabber:0
欠大小(短) Rx 帧:0
RX 片段:0
RX 八位位组:0
良好的 Tx 帧:13.
广播 Tx 帧:0
多播 Tx 帧:13.
暂停 Tx 帧:0
延迟的 Tx 帧:0
冲突:0
单冲突 Tx 帧:0
多个冲突 Tx 帧:0
冲突过多:0
晚期冲突:0
TX 欠运转:0
载波侦听错误:0
TX 八位位组:1514
RX + Tx 64字节帧:0
RX + Tx 65-127八位位组帧:8.
RX + Tx 128-255八位位组帧:5.
Rx + Tx 256-511八位位组帧:0
RX + Tx 512-1023八位位组帧:0
Rx + Tx 1024个八位位组帧:0
净八位位组:1514
帧溢出的 RX 起始:0
帧的 RX 中间溢出:0
RX DMA 超限:0
RX DMA 通道0:head_enqueue:1
RX DMA 通道0:tail_enqueue:127
RX DMA 通道0:PAD_ENqueue:0
RX DMA 通道0:排队错误:0
RX DMA 通道0:DESC_ALLOC_FAIL:0
RX DMA 通道0:PAD_ALLOC_FAIL:0
RX DMA 通道0:runt_receive_buf:0
RX DMA 通道0:runt_transmit:bu:0
RX DMA 通道0:empty_dequeue:0
RX DMA 通道0:BUSY_DEqueue:0
RX DMA 通道0:Good:Dequeue:0
RX DMA 通道0:要求:0
RX DMA 通道0:teardown_dequeue:0
TX DMA 通道0:head_enqueue:13
TX DMA 通道0:tail_enqueue:0
TX DMA 通道0:PAD_ENqueue:0
TX DMA 通道0:排队错误:0
TX DMA 通道0:DESC_ALLOC_FAIL:0
TX DMA 通道0:PAD_ALLOC_FAIL:0
TX DMA 通道0:runt_receive_buf:0
TX DMA 通道0:runt_transmit:bu:0
TX DMA 通道0:empty_dequeue:13
TX DMA 通道0:BUSY_DEqueue:0
TX DMA 通道0:Good:Dequeue:13
TX DMA 通道0:要求:0
TX DMA 通道0:teardown_dequeue:0
DTS 节点:
Mac{(&M)
pinctrl-names ="default"、"sleep";
pinctrl-0 =<&cpsw_default0>、<&cpsw_default1>;
pinctrl-1 =<&cpsw_sleep0>、<&cpsw_sleep1>;
DUAL_EMAC;
状态="正常";
};
cpsw_emac0{&cpsw_emac0}
PHY_ID =<&Davinci_MDIO>、<0>;
PHY-MODE ="RMII";
DUAL_EMAC_res_vlan =<1>;
};
cpsw_emac1{&cpsw_emac1}
PHY_ID =<&Davinci_MDIO>、<1>;
PHY-MODE ="RMII";
DUAL_EMAC_res_vlan =<2>;
};
DaVinci_MDIO{
pinctrl-names ="default"、"sleep";
pinctrl-0 =<&Davinc_MDIO_default>;
pinctrl-1 =<&Davinc_MDIO_SLEEP>;
};
Mahidar、
我刚刚收到 了舒耶勒·帕顿的一个好建议。 他指出、您错过了以下内容:
phy_SEL{&
RMII-clock-ext =<1>;
};
请尝试进行此操作、以查看它是否可以解决您的问题。
此致、
Brad
Brad、您好!
根据建议的更改、我们也不会看到 Ping 对我们有效。
此致、
Mahidhar。
这绝对是一个重要的变化,因此,无论怎样,都应该永远保持这种变化。
您能否验证是否存在50MHz 时钟? 它是由 PHY 生成的、还是有单独的晶体振荡器为处理器和 PHY 提供50MHz 时钟?
是的、存在50MHz 时钟。 该时钟由用于 PHY 的独立50MHz 晶体振荡器提供。
此外、从硬件角度来看、一切看起来都很好、电压电平为@3.3V、信号完整性看起来很好。
您好!
-引导日志显示已识别 PHY 驱动程序,PHY 位于正确的地址。
- ethtool 显示已建立的链接,但 ethtool 统计数据显示未接收到数据包。 它还显示未接收到错误。
我建议执行以下调试步骤:
-需要遵循从器件到器件的 TX 数据包,并证明它们显示在链路伙伴处。 虽然统计数据显示数据包已离开(TX 计数增加)、但我们需要看到它们显示在已连接的 PC 上。 在这里的笔记本电脑上使用 Wireshark 将是理想之选、因为您可以看到从电路板发送的数据包类型。 您还可以在不使用 Wireshark 的情况下测试此功能。 对于此测试、请使用 eth0将电路板直接连接到笔记本电脑、并将 eth1保持断开连接。
-在发出 ping 命令之前,请执行之前在 POST ifconfig -a、ethtool eth0、ethtool -S eth0中执行的以下命令,也请在笔记本电脑上执行这些相同的命令。 如果笔记本电脑未运行 Linux、则需要使用 Wireshark。
-运行 ping 命令,几秒钟后停止该命令,并对连接伙伴的两侧的 ifconfig -a ethtool 等重复前面的步骤。
通过这些结果、我们希望查看笔记本电脑上的 RX 数据包计数是否增加。 如果笔记本电脑上的 RX 计数增加、则表示正在接收来自电路板的数据包。 请将命令的结果附加(而不是剪切和粘贴)到此线程。 如果您使用 Wireshark、请同时附加捕获文件。
您还可以使用 eth1重复测试、但将 eth0保持断开状态。
此致、
Schuyler
Schuyler、您好、
在 Wireshark 上执行从器件到 PC 的 Ping 操作时、我们能够看到 ARP 广播数据包、但 Ping 仍然不成功、似乎没有 RX 活动。
设备到 PC :
2 0.204155 Texasins_94:C1:A6广播 ARP 64、谁拥有169.254.1.60? 请告诉169.254.1.1
3 0.204321 GoodWayI_16:56:67 TexasIns_94:C1:A6 ARP 42 169.254.1.60位于00:50:B6:16:56:67
4 1.264935 TexasIns_94:C1:A6广播 ARP 64、谁拥有169.254.1.60? 请告诉169.254.1.1
5 1.265165 GoodWayI_16:56:67 TexasIns_94:C1:A6 ARP 42 169.254.1.60位于00:50:B6:16:56:67
在执行 PC 到器件的 ping 操作时、我们没有看到 tcpdump 中的任何内容。
PC 到器件 :
296 2147.321328 GoodWayI_16:56:67广播 ARP 42谁拥有169.254.1.1? 请说明169.254.1.60
301 2208.321803 GoodWayI_16:56:67 Broadcast ARP 42谁具有169.254.1.1? 请说明169.254.1.60
此致、
Mahidhar
Nikhilesh、
感谢您的耐心等待。 德克萨斯州的严重冬季风暴正在影响我们回答问题的能力。
我将进一步挖掘、尝试提出建议。 希望 Schuyler Patton 不久将重新上线。
此致、
Brad
在运行时、您能否在地址0x44e10650处读取 CTRL_GMII_SEL 寄存器?
devmem2 0x44e10650
该寄存器中有几个关键值、我想进行双精度检查。
谢谢、
Brad
你(们)好、Brad
[引用用户="Brad Griffies"]
在运行时、您能否在地址0x44e10650处读取 CTRL_GMII_SEL 寄存器?
devmem2 0x44e10650
该寄存器中有几个关键值、我想进行双精度检查。
[/报价]
root@Node1442fc94c1a6:~#./devmem2 0x44e10650
/dev/mem 已打开。
映射到地址 bb6f01000的内存。
在地址0x44E10650 (bb6f01650)处读取:0x000000C5
GMII SEL 设置为 RMII 模式。
RMII1_IO_CLK_EN 被设定为 启用从芯片引脚获得的 RMII 时钟
此致、
Mahidhar。
编辑:删除此回复! 我的错误...
Brad、您好!
在 CTRL_GMII_SEL 寄存器中 、RMIIx_IO_CLK_EN 的可能值为:
1:使 RMII 时钟来自芯片引脚
0:启用来自 PLL 的 RMII 时钟
我们的理解是:
1:使 RMII 时钟来自芯片引脚-这意味着时钟来自外部 -这是当前设置的-如果我们的欠设置错误,请告知我们
0:使能来自 PLL 的 RMII 时钟-这意味着时钟来自 PLL
我查看了 DTS/DTB 文件、可以看到我们添加了该文件
phy_SEL{&
RMII-clock-ext =<1>;
};
Nikhilesh、
哦、geez。 很抱歉,我完全颠倒了。 你是对的。 我解释"源自芯片引脚"是指"源自芯片引脚"或"在芯片引脚上生成"。
很抱歉造成任何混淆。 我将编辑我之前的帖子! (然后再喝一杯咖啡!)
此致、
Brad
要添加观察结果:
您好!
您已发现 ARP 过程已正确传输、并且响应将返回到您的主板。 由于 MAC 硬件统计数据正常 Rx 帧显示为0、这可能表示需要验证 RX 引脚多路复用器上的某些内容。
正常 Rx 帧:0
请附上原理图的片段和 CPSW 接口的 DTS 片段。
此致、
Schuyler
Schuyler、您好、
CPSW 接口的 DTS 片段。
cpsw1_default:cpsw1_default{
pinctrl-single、pins =<
/*从属设备1 */
AM4372_IOPAD (0x90c、PIN_INPUT | MUX_MODE1)/*(B14) mii1_crs.rmii1_crs_dv *
AM4372_IOPAD (0x910、PIN_INPUT | MUX_MODE1)/*(B13) mii1_Rx_er.rmii1_rxer *
AM4372_IOPAD (0x914、PIN_OUTPUT | MUX_MODE1)/*(A13) mii1_TX_en.rmii1_txen *
AM4372_IOPAD (0x928、PIN_OUTPUT | MUX_MODE1)/*(B15) mii1_txd0.rmii1_txd0 */
AM4372_IOPAD (0x924、PIN_OUTPUT | MUX_MODE1)/*(A14) mii1_txd1.rmii1_txd1 *
AM4372_IOPAD (0x940、PIN_INPUT | MUX_MODE1)/*(F17) mii1_rxd0.rmii1_rxd0 */
AM4372_IOPAD (0x93c、PIN_INPUT | MUX_MODE1)/*(B16) mii1_rxd1.rmii1_rxd1 */
AM4372_IOPAD (0x944、PIN_INPUT | MUX_MODE0)/*(A16) rmii1_ref_clk.rmii1_REFCLK *
>;
};
cpsw2_default:cpsw2_default{
pinctrl-single、pins =<
/*从器件2*/
AM4372_IOPAD (0x864、PIN_INPUT | MUX_MODE8)/*(B4) GPMC_A9.rmii2_crs_dv *
AM4372_IOPAD (0x874、PIN_INPUT | MUX_MODE3)/*(B3) GPMC_WPN.rmii2_rxer *
AM4372_IOPAD (0x840、PIN_OUTPUT | MUX_MODE3)/*(C3) GPMC_a0.rmii2_txen *
AM4372_IOPAD (0x854、PIN_OUTPUT | MUX_MODE3)/*(E7) GPMC_A5.rmii2_txd0 */
AM4372_IOPAD (0x850、PIN_OUTPUT | MUX_MODE3)/*(D7) GPMC_A4.rmii2_txd1 */
AM4372_IOPAD (0x86c、PIN_INPUT | MUX_MODE3)/*(D8) GPMC_A11.rmii2_rxd0 *
AM4372_IOPAD (0x868、PIN_INPUT | MUX_MODE3)/*(G8) GPMC_A10.rmii2_rxd1 *
AM4372_IOPAD (0x908、PIN_INPUT | MUX_MODE1)/*(D16) mii1_col.rmii2_REFCLK *
>;
};
原理图片段、我们将分别离线共享它。
此致、
Mahedhar。
您好!
感谢您提供 DTS 和其他数据。 管脚复用、这看起来是正确的。 我需要与其他团队成员讨论。 我将在星期一作出答复。
很抱歉重复此操作、但在该统计数据为非零之前、ethtool -S eth0输出将不会收到数据包。
此致、
Schuyler
您好!
我查看了一些参考电路板器件树文件、其中使用了 RMII。 我遇到了 AM43x EPOS EVM (am43x-epos-evm.dts)、对于该 EVM、我看到在 DTS 中配置了 RXDV 引脚用于 RMII 引脚配置、但当我们查看电路板原理图时、RXDV 引脚未连接到任何位置(未使用)。
我还根据 PHY 数据表检查了 RMII 与 MII 信号间的关系 RMII 不使用 RXDV 信号。
am43x-epos-evm.dts RMII 引脚配置:
cpsw_default:cpsw_default{
pinctrl-single、pins =<
/*从属设备1 */
AM4372_IOPAD (0x90c、PIN_INPUT 下拉| MUX_MODE1)/* mii1_crs.rmii1_crs *
AM4372_IOPAD (0x910、PIN_INPUT 下拉| MUX_MODE1)/* mii1_rxerr.rmii1_rxer*
AM4372_IOPAD (0x914、PIN_OUTPUT 下拉| MUX_MODE1)/* mii1_txen.rmii1_txen *
AM4372_IOPAD (0x918、PIN_INPUT 下拉| MUX_MODE1)/* mii1_rxdv.rmii1_rxdv *
AM4372_IOPAD (0x924、PIN_OUTPUT 下拉| MUX_MODE1)/* mii1_txd1.rmii1_txd1 *
AM4372_IOPAD (0x928、PIN_OUTPUT 下拉| MUX_MODE1)/* mii1_txd0.rmii1_txd0 *
AM4372_IOPAD (0x93c、PIN_INPUT 下拉| MUX_MODE1)/* mii1_rxd1.rmii1_rxd1 *
AM4372_IOPAD (0x940、PIN_INPUT 下拉| MUX_MODE1)/* mii1_rxd0.rmii1_rxd0 *
AM4372_IOPAD (0x944、PIN_INPUT 下拉| MUX_MODE0)/* rmii1_REFCLK/rmii1_REFCLK *
>;
};
我不确定这里是否有线索、驱动程序是否在寻找要配置的此引脚?
[引用用户="NIKEHILESH CHAVAN"] AM4372_IOPAD (0x918、PIN_INPUT_PULLUGLE | MUX_MODE1)/* mii1_rxdv.rmii1_rxdv */
就我所能说的那样、特定信号/运行模式是不存在的。 我正在与其他人核实。 我认为它与 RMII 没有任何关系。
我注意到 EVM 中的所有引脚都激活了内部下拉电阻器。 我不知道有任何此类要求、但在此期间、您可以轻松尝试。 请尝试一下吗? 我认为这不应该有所不同、但鉴于我们仍然没有解决问题、这是一个很好的测试。
Brad、您好!
我们已经尝试在激活了内部下拉的情况下配置引脚、它不会产生任何影响。
我们还尝试仅配置 cpsw_emac0、仅查看我们是否由于 DUAL_EMAC 而遇到任何问题、但这也不会带来任何影响。
PHY 具有返回 MAC 的 CRS (MII)和 CRS_DV (RMII)。 我们错误地连接了 CRS 而不是 CRS_DV、这会导致 Rx 不工作。
在 RMII 模式下、MAC 正在寻找 CRS_DV 以获得有效的 Rx 数据、但返回 Mac 的引脚是 CSR (MII 模式) 、这就是 MAC 从不识别任何 RX 数据的原因。
将 csr_dV 连接到 MAC 后、我们能够看到 Tx 和 Rx 按预期工作。 Ping 工作正常。
感谢 Brad 和 Schuyler 为您提供的所有支持。
感谢您的更新。 我很高兴听到它正在工作!