你好呀 ,
为了在我们的潜在项目中利用双以太网,我们将两个以太网PHY芯片连接到了Imx6ull处理器上。
其中一块 PHY 芯片是 KSZ8081,另一块 PHY 芯片是 KSZ8041,以下是我们的 DTS 配置:
&fec1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet1>;
phy-mode = "rmii";
phy-handle = <ðphy0>;
phy-reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
phy-reset-duration = <26>;
phy-reset-post-delay=<20>;
phy-supply = <®_peri_3v3>;
状态 = "正常";
};
&fec2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet2>;
phy-mode = "rmii";
phy-handle = <ðphy1>;
phy-reset-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
//phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
phy-reset-duration = <26>;
phy-reset-post-delay=<20>;
phy-supply = <®_peri_3v3>;
状态 = "正常";
mdio {
#address-cells = <1>;
#size-cells = <0>;
ethphy0:以太网物理层@1 {
reg = <1>;
micrel,led-mode = <1>;
clocks = <&clks IMX6UL_CLK_ENET_REF>;
clock-names = "rmii-ref";
};
ethphy1:以太网物理层@3 {
reg = <3>;
micrel,led-mode = <1>;
clocks = <&clks IMX6UL_CLK_ENET2_REF>;
clock-names = "rmii-ref";
};
};
};
pinctrl_enet1:enet1grp {
fsl,pins = <
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031
>;
};
pinctrl_enet2:enet2grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0
MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0
MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0
MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0
MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0
MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0
MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0
MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0
MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0
MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031
>;
};
内核日志中检测到了两个以太网物理层,而且当我们连接以太网电缆时,两个设备上也都能检测到链路。
但是,连接到 KSZ8081 phy 的以太网上可以接收到 IP 地址,而连接到 KSZ8084NL 的以太网上却无法分配 IP 地址。
在KSZ8041NL以太网接口(eth0)上观察到接收错误,以下是日志:
root@sls-imx6ull14x14evk:~# ifconfig
eth0 链路封装:以太网硬件地址 BA:9C:69:1F:76:3A
上行广播组播 MTU:1500 指标:1
接收数据包:0 个错误:1065 个丢弃:0 个溢出:0 个帧:1065 个
发送数据包:65,错误:0,丢弃:0,溢出:0,载波:0
碰撞次数:0 txqueuelen:1000
接收字节数:0 (0.0 B) 发送字节数:12024 (11.7 KiB)
eth1 链路封装:以太网 硬件地址 42:19:11:7F:5E:89
inet addr:10.20.0.184广播地址:10.20.1.255掩码:255.255.254.0
inet6 地址:fe80::8248:9837:9647:2a00/64 范围:链路
广播运行中 多播 MTU:1500 指标:1
接收数据包:18 个,错误:0 个,丢弃:0 个,溢出:0 个,帧:0 个
发送数据包:23 个,错误:0 个,丢弃:0 个,溢出:0 个,载波:0 个
碰撞次数:0 txqueuelen:1000
RX 字节:2494 (2.4 KiB) TX 字节:3162 (3.0 KiB)
lo Link encap:本地环回
inet addr:127.0.0.1掩码:255.0.0.0
inet6 地址: ::1/128 范围:主机
环路已启动,运行中,MTU:65536,指标:1
接收数据包:17 个,错误:0 个,丢弃:0 个,溢出:0 个,帧:0 个
发送数据包:17 个,错误:0 个,丢弃:0 个,溢出:0 个,载波:0 个
碰撞次数:0 txqueuelen:1000
RX 字节:2011 (1.9 KiB) TX 字节:2011 (1.9 KiB)
root@sls-imx6ull14x14evk:~# ethtool eth0
eth0 的设置:
支持的端口:[ TP MII ]
支持的链路模式:10baseT/半高、10baseT/全高
100baseT/半成品 100baseT/全成品
支持的暂停帧使用方式:对称
支持自动协商:是
支持的FEC模式:未报告
宣传的连接模式:10baseT/半成品 10baseT/全成品
100baseT/半成品 100baseT/全成品
广告中暂停帧的使用:对称
广告中提及的自动协商:是
已公布的FEC模式:未报告
链路伙伴宣传的链路模式:10baseT/半成品 10baseT/全成品
100baseT/半成品 100baseT/全成品
链接伙伴宣传的暂停帧使用情况:否
链接合作伙伴已宣传自动协商:是
链接伙伴宣传的FEC模式:未报告
速度:100Mb/s
复式:全套
自动协商:开启
端口:双绞线
PHYAD:3
收发器:外部
MDI-X:未知
支持唤醒:g
唤醒:d
检测到连接:是
我们还检查了时钟,它是 50MHz 的,生成正常,并且也输入到 KSZ8041NL 物理层。
简而言之,使用 KSZ8081 的 1 个以太网接口工作正常,但使用 KSZ8041NL 的 2 个以太网接口无法工作。
请给我们提供解决方案。我们还附上了以太网PHY硬件的截图供您参考。
image (1).png
image (2).jpg
您好,NXP支持团队,
我们已经分享了我们这边遇到的以太网问题的详细信息。
所以,请您从您那边检查一下,如果有任何进展,请与我们联系。
如有需要,我们也可以通过电话与您的团队讨论问题。
等待贵团队的积极反馈。
此致,
里特什·普拉贾帕蒂
你好@HarshilSoni434 @ritesh_prajapat
希望你一切都好。
查看您的KSZ8041原理图的跳线选项:
Manuel_Salas_0-1785172670273.png
隔离模式:上拉(默认)= 启用
下拉= 禁用
PHY 将其 RMII 数据引脚(RXD0、RXD1、CRS/DV、RX_ER、TXD0、TXD1、TX_EN)与 MAC 断开连接。
MDIO/MDC 仍然完全正常,PHY 已被发现,链路脉冲仍在生成,也许这就是 PHY 被检测到且链路处于 UP 状态的原因。
请尝试将 ISOLATE 引脚上的 R37 从上拉电阻改为下拉电阻(~4.7kΩ 至 GND)?
第二件要检查的事情是RESET引脚。请确认复位信号是否已正确置位?
检查 reset_n 信号是否正确连接到:
phy-reset-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
//phy-reset-gpios = <&gpio5 6 GPIO_ACTIVE_LOW>;
然后,请检查 RMII 的 CONFIG[2:0] 绑带是否已物理正确钳位。
此外,在KSZ8041原理图的信号映射表中:
Manuel_Salas_1-1785173206995.png
网络名称似乎互换了(MDC 标记为 enet_mdio,反之亦然)。
顺祝商祺!
萨拉斯。
感谢@Manuel_Salas提供的建议。
我们会核实您提出的所有建议,并于今天内公布结果。
此致,
里特什·普拉贾帕蒂
我们对以太网 FEC 驱动程序 fec_main.c 进行了进一步的调试。用于识别 rx 错误根案例。
因此,我们发现驱动程序由于 CRC 不匹配错误 BD_ENET_RX_CR 而忽略了所有接收数据包。
基于以上情况,请您提出解决问题的建议。
你好@Manuel_Salas ,
根据我们上次的观察,请问有什么最新消息吗?
再次通知您,由于 CRC 错误,所有接收数据包均被忽略。那么,造成这种情况的原因可能是什么呢?
你好@Manuel_Salas ,
早上好,
您是否已查看@HarshilSoni434之前分享的关于此问题的最新更新?能否请您查看一下,并与我们联系您是否有任何线索或发现,以帮助我们缩小接收数据包CRC不匹配失败的具体问题范围? [[ ## completed ##]]
如果您需要我们提供任何信息,请与我们联系。
此致,
里特什·普拉贾帕蒂