主题中讨论的其他器件:TCA9535
您好! 我们正在尝试将 DP83826 Phy 集成到我们的定制基板中。 我们使用基于 i.MX8QXP 的 SoM、运行基于 Yocto 的 Linux 发行版、当前在内核版本5.4.3上。
我想我们至少有一些事情是正确的、因为现在我们能够启动 eth 接口并成功地将 MAC 连接到 PHY、但从未有任何 TX 或 RX 数据包。 我将在下面列出配置器件所执行的步骤。
1) 1)在下图中、有一部分原理图涉及 eth phy。
上拉 Strap4以在基本模式下启用 RMII。
imx8qxp 处理器具有2个 FEC (快速以太网控制器) MAC (ENET0、ENET1)。 我们将使用 enet1引脚(我将在下面提供器件树的一部分)。
2) dp83822驱动程序(支持83826 IC)未在5.4.3上游内核上完全更新,因此我从 https://www.ti.com/tool/ETHERNET-SW 获取了 dp83822.c 文件的更新版本 。 我已将其修补到我们的内核中、该内核需要在 phy_core.c 和 phy_device.c 上添加一个小修补程序、以添加驱动程序使用的一些定义和辅助方法。
3) 3)通过 CONFIG_DP83822启用驱动程序、并成功编译。
4)相关器件树节点:
pinctrl_fec2_enet1:fec2_grp{
FSL、引脚=<
IMX8QXP_SPDIF0_RX_CONN_ENET1_RGMII_RXD0 0x00000040
IMX8QXP_ESAI0_TX3_RX2_RX2_CONN_ENET1_RGMII_RXD1 0x00000040
IMX8QXP_ESAI0_TX2_RX3_CONN_ENET1_RMII_RX_ER 0x00000040
IMX8QXP_SPDIF0_TX_CONN_ENET1_RGMII_RX_CTL 0x00000040
IMX8QXP_ESAI0_TX4_RX1_CONN_ENET1_RGMII_TXD0 0x00000040
IMX8QXP_ESAI0_TX5_RX0_CONN_ENET1_RGMII_TXD1 0x00000040
IMX8QXP_ESAI0_SCKR_CONN_ENET1_RGMII_TX_CTL 0x00000040
IMX8QXP_ENET0_MDIO_CONN_ENET1_MDIO 0x00000020
IMX8QXP_ENET0_MDC_CONN_ENET1_MDC 0x00000040
IMX8QXP_ESAI0_FSR_CONN_ENET1_RCLK50M_IN 0x00000040
// PWRD/INT#
IMX8QXP_MIPI_DSI1_GPIO0_01_LSIO_GPIO2_IO00 0x00000060
>;
};
//以太网1 (FEC2)
fect2{
pinctrl-names ="default";
pinctrl-0 =<&pinctrl_fec2_enet1>;
PHY-SUPPLY =<_3V3>;
PHY-MODE ="RMII";
PHY-Handle =<ðphy>;
FSL、魔术包;
mac-address =[ 00 00 00 00 00 00 00];
local-mac-address =[ 00 00 00 00 00 00];
最大速度=<100>;
状态="正常";
PHY-RESET-GPIO =<&T 9535_EXPANDER15 GPIO_ACTIVE_LOW>;
PHY-RESET-DURATION =<200>;
MDIO{
#address-cells =<1>;
#size-cells =<0>;
ethphy:ethernet-phy@1{
兼容="Eth以 太网-phy-IEEE802.3-C22";
reg =<1>;
};
};
};
5) phy 在总线上找到并连接到。 这是"dmesg | grep eth"的输出
[2.288987] FEC 5b050000。以太网 eth0:寄存 PHC 设备0
[ 7.335403] TI DP83826NC 5b050000.Ethernet-1:01:连接的 PHY 驱动器[TI DP83826NC](MII_BUS:phy_addr=5b050000.Ethernet-1:01、IRQ=POLL)
[9.407544] FEC 5b050000。以太网 eth0:链路向上- 100Mbps/全-流控制 Rx/TX
[9.415564] IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
但是、我们无法以任何有意义的方式传输任何数据或使用 eth0接口。 以下是一些可能有用的信息:
- ethtool:
eth0的设置:
支持的端口:[ TP MII]
支持的链路模式:10BaseT/Half 10baseT/Full
100BaseT /半个100BaseT /全双工
支持的暂停帧使用:对称
支持自动协商:是
支持的 FEC 模式:未报告
通告的链路模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
通告的暂停帧使用:对称
广播自协商:是
通告的 FEC 模式:未报告
链接伙伴通告的链接模式:10BaseT /半10baseT/全
100BaseT /半个100BaseT /全双工
链接伙伴通告的暂停帧使用:对称仅接收
连接方通告的自动协商:是
连接伙伴通告的 FEC 模式:未报告
速度:100Mb/s
双工:全双工
端口:MII
PHYAD:1.
收发器:内部
自协商:开
支持唤醒:g
唤醒:D
检测到链接:是
- ethtool -S eth0:
一切都是0。
- ifconfig eth0:
eth0 Link encap:ethernet HWaddr 00:d0:93:51:22:e0
iNet addr:192.168.0.100 Bcast:192.168.0.255掩码:255.255.255.0
inet6 addr:fe80::2d0:93ff:fe51:22e0/64范围:链接
运行多播 MTU:1500公制:1的上广播
RX 数据包:0错误:0丢弃:0超限:0帧:0
TX 数据包:0错误:0丢弃:0超限:0载波:0
冲突:0 txqueuelen:1000
RX 字节:0 (0.0 B) TX 字节:0 (0.0 B)
目前不确定 IP 地址为192.168.0.100、它不是 DHCP。
6)我们还使用 phytool (https://github.com/wkz/phytool)通过 MDIO 总线读取 DP83826上的一些寄存器、但似乎存在很多不一致之处、因此我不确定我们可以信任哪些数据以及哪些数据不正确。 例如、寄存器0x467应在 PHY 初始化时返回设置状态。 读取它将返回0x2001、这意味着 PHY 地址不是0x01、这是不正确的、因为它是错误的。
一些相关的寄存器及其内容:
0x00 = 0x3100
0x09 = 0000
0x0A = 0x0100
0x0b = 0000
0x10 = 0x5115
0x11 = 0x010b
0x17 = 0x0065
0x19 = 0xbc01
0x467 = 0x2001
0x468 = 0000
7) 7)我们测量了 TX_EN 和 RX0、TX0信号。 RX 引脚上似乎有一些活动、但 TX 引脚(EN 和 TX[1:0])仍然存在。
8)我们测量了 RST_N (引脚32)和 PWRDN/INT (引脚21)、两者都处于高电平。 奇怪的是、寄存器似乎指示 PWRDN 引脚被用作中断、如果没有明确的寄存器配置、就不应该发生这种情况。
9) 9)我们偶尔也会得到 TX 环形转储、其外观如下所示:
------ [在此处剪切]-----
[263.915343] NETDEV 看门狗:eth0 (FEC):发送队列0超时
[263.921736]警告:CPU:3 PID:0 at net/sched/sch_generic.c:454 DEV_Watchdog+0x2fc/0x308
[263.930009]链接的模块:crct10dif_ce a6 usbnet FSL_imx8_DDR_perf flexcan _dev galcore (O)
[263.939172] CPU:3 PID:0 Comm:swapper/3被污染:G O 5.4.3-tq+g02868ec #1
[263.947444]硬件名称:ATBN 1.0 (DT)上的六角农业 i.MX8QXP TQMa8XQP4
[263.955022]状态:20000005 (nzCv daif -PAN -UAO)
[263.959818] PC:DEV_安全 装置+0x2fc/0x308
[263.963829] LR:DEV_WATCHDOG+0x2FC/0x308
[263.967841] sp:ff80001001bdb0
[263.971158] X29:ff80001001bdb0 x28:ff0000794e8300
[263.976475] X27:000000000004 x26:0000000000000140
[263.981791] x25:0000ffff x24:ff0000786cf000
[263.987108] x23:ff0000786cf39c x22:ff0000786cefb8
[263.992425] x21:ff0000786cf3b8 x20:ff800011876000
[263.997741] x19:000000000000 x18:000000000010
[264.003058] X17:000000000000 x16:0000000000000000
[264.008375] x15:ff0000780b3c70 x14:ffffffffffffffffffffff
[264.01362] X13:ff80009001bb17 x12:ff80001001bb1f
[264.019008] x11:000000000000 x10:0000000000000000
[264.024325] x9:0000000000000000 x8:ff8000119a3000
[264.029642] x7:ff8000106ad930 x6:0000000000000181
[264.034958] x5:0000000000000000 x4:0000000000000008
[264.040275] x3:000000000004 x2:0000000000000100
[264.045592] x1:1bcbcda14a1fc800 x0:000000000000
[264.050911]呼叫追踪:
[264.053367] DEV_安全 装置+0x2FC/0x308
[264.057034] call_timer_fn.isra.0+0x20/0x78
[264.061218] RUN_TIMER_softirq+0x1a0/0x408
[264.065320]__do_softirq+0x120/0x23c
[264.068985] IRQ_EXIT+0xb8/0xd8
[264.072131]__Handle_domain_IRQ+0x64/0xb8
[264.076227] GIC_Handle_IRQ+0x5c/0x148
[264.079982] el1_IRQ+0xb8/0x180
[264.083128] arch_cpu_idle+0x10/0x18
[264.086709] do_idle+0x200/0x280
[264.089936] CPU_STARTUP_END+0x20/0x40
[264.093868] secondary _start_kernel+0x154/0x190
[264.098396]--[结束线迹6670558fa7ef539a]--
[264.103053] FEC 5b050000.以太网 eth0:TX 环转储
后跟 TX 环形缓冲器的转储。 这似乎表明 PHY 无法满足内核发送数据包的请求。
现在、我们还不知道要调查的其他事项。 希望有这样的想法。
此致、
Alex