pcupid emac debug SOP
REVISION HISTOR¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 06/19/2024 | |
1.1 | 12/05/2024 |
前言: pcupid 只有rmii¶
pcupid 只有 rmii, 没有mii。因此需要注意phy的读写, 可以参考pcupid的 Ethernet使用参考 中的 phytool使用 和 phyStatusWR phy读写 debug节点。
问题一: 短网线网络ping不通¶
流程 | 方法 | 出口条件 | 下一步 or 结论 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 跟正常网络环境交换网线, 做交叉测试 | 出口条件1: 非网线问题 出口条件2: 网线问题 |
出口条件1: ==> B 出口条件2: 结束 ==> 网线问题 |
||
B | 在正常网络环境中介入该中转设备(交换机或路由器) | 出口条件1: 介入中转设备后网络正常 出口条件2: 介入中转设备后网络不通 |
出口条件1: ==> C 出口条件2: 结束 ==> 中转设备问题 |
||
C | 执行ping后查看提示 "网络不可达" 还是 卡住 | 出口条件1: 卡住 ==> 表示网络可达 出口条件2: 网络不可达 ==> 局域网配置有误, 如网关, IP网段, IP table等 |
出口条件1: ==> D 出口条件2: 结束 ==> 网络配置问题 |
||
D | 方法1: 拔插网线, 查看link up或down的log 方法2: 读phy寄存器的link状态位 |
出口条件1: link down 或没有link up的log 出口条件2: link up |
出口条件1: ==> E 出口条件2: ==> F |
通过phy寄存器可以看是否link up bank_phy0 offset1 bit2 : 1: Link is up 0: Link is down phy寄存器读取方法:phytool读取 或 debug节点 |
|
E | 用ethtool确认当前速率是否为force 10M 如果是, 手动切换下MDI/MDIX, 寄存器: bank_phy0 offset 0x43 bit[12:11] 若value != 2'b11, 则将value设为 2'b11 否则将value设为 2'b10 |
出口条件1: 当前速率不是10M, 或者执行上述方法后不能link up 出口条件2: 当前速率是force 10M, 且手动切换下MDI/MDIX后能正常link up上 |
出口条件1: ==> F 出口条件2: 结束 ==> Auto MDI/MDIX问题 |
提供串口log 执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
命令: ./ethtool eth0 P2 EMAC+internal ephy force 10M下link不上问题 |
F | mii(片内phy):无需检查 rmii(片外phy): 公板: 先检查padmux的对应dtsi, 对应的gpio引脚是否存在冲突 或 配置成其他gpio模式。 如果没有,再检查 eth_mode。 非公版: 需要根据客户实际的引脚设计检查是否存在引脚被错误复用的问题 |
出口条件1: 流程E link down,且 mii or rmii引脚配置正常 出口条件2: mii or rmii引脚配置正常 出口条件3: rmii引脚配置异常 |
出口条件1: 结束 ==> 找SWRD 出口条件2: ==> G 出口条件3: 结束 ==> 引脚配置异常 |
提供串口log 执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
pcupid eth_mode: RIU bank 0x103c offset 0x6e eth0: bit[1:0] BGA: 3 QFN: 2 eth1: bit[7:4] BGA: 2 QFN: 1 |
G | 敲击ifconfig后, ping一段时间后, 再使用ifconfig查看统计信息 如果TX packets计数增长量为0, 则 TX 方向存在问题 如果RX packets计数增长量为0, 或 errors增加, 则为 RX 方向存在问题 |
出口条件1: RX 问题 出口条件2: TX 问题 出口条件3: 上述都不符合(都有计数) ==> 可能是网络环境问题 |
出口条件1: ==> H 出口条件2: ==> M 出口条件3: 找SWRD分析环境问题 |
ifconfig前后的log 辅测和板端的抓包信息 两边的网络配置信息, 如ip地址、mac地址、arp表、路由表等 |
若都没有计数, 可以先排查RX问题, 再排查TX问题 |
H | 如果rx packets为0, 则为没有counter问题 如果存在rx error计数, 则为error packet问题 |
出口条件1: 没有counter问题 出口条件2: error packet问题 |
出口条件1: ==> J 出口条件2: ==> I |
||
I | rmii(片外phy): 一般不需要调整,有需要可联系phy厂商 mii(片内phy): 调整driver的驱动能力, 尝试增强tx驱动能力以及调整rx的阻抗 调整后再次尝试ping看能否ping通 |
出口条件1: 可以ping通 出口条件2: 无errors计数增加,但仍然ping不通 出口条件3: errors计数仍然增加 |
出口条件1: 结束 ==> driver能力问题 出口条件2: ==> H 出口条件3: 结束 ==> 需要找CAE查看硬件是否存在问题 |
提供测试的串口log | pcupid没有MII , 可以先找CAE检查硬件是否存在问题 MII的相关命令可参考: EMAC Driver Proc Command |
J | 1、PC开启wireshark抓包,板子开启tcpdump抓包。 2、板子pingPC, 观察报文交互, 查看板端是否有发出icmp请求, PC是否有响应的ICMP应答 |
出口条件1: 板子没有icmp报文发出 出口条件2: pc没有icmp报文发出 |
出口条件1: ==> L 出口条件2: ==> K |
||
K | 确认 PC/辅测设备 是否有开启防火墙导致板端发送的icmp报文被过滤 | 出口条件1: 有开启防火墙 出口条件2: 没有开启防火墙 |
出口条件1: 结束 ==> 关闭防火墙, 可能是防火墙拦截了板端的报文 出口条件2: 结束 ==> 可能是网络环境问题, 有需要可联系SWRD分析 |
ifconfig前后的log 辅测和板端的抓包信息 两边的网络配置信息, 如ip地址、mac地址、arp表、路由表等 |
|
L | mii(片内phy): 一般不会有clk出错问题 rmii(片外phy): 检查 SC_GP_CTRL 的 reg_ckg_emac 相关寄存器值 如果寄存器值正确则使用示波器查看, 观察REF_CLK波形是否正常(如果有波形的话, 频率是否为50M) |
出口条件1: phy clk寄存器配置错误或clk异常 出口条件2: phy clk正常 |
出口条件1: 结束 ==> 找SWRD确认 出口条件2: ==> M |
提供测试的串口log | pcupid emac0: RIU bank 0x1133 offset 0x2a = 0x0004 RIU bank 0x1133 offset 0x2b = 0x0004 pcupid emac1: RIU bank 0x1133 offset 0x33 = 0x0004 RIU bank 0x1133 offset 0x34 = 0x0004 |
N | 找SWRD确认 | ||||
O | 找SWRD确认 | ||||
Q | 使用tool读取OTP/Efuse的disable emac bit(不知道方法找OTP owner协助) | 出口条件1: 读取结果为00或11 ==> 没有被disable 出口条件2: 读取结果为10或01 ==> 有被disable |
出口条件1: 结束 ==> 找SWRD 出口条件2: 结束 ==> 找SWPM |
提供OTP读取结果截图 |
问题二: 长网线网络ping不通或丢包¶
流程 | 方法 | 出口条件 | 下一步 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 更换一条正常网络环境下的短网线 查看是否依然存在ping不通 或者丢包现象有没有好转 |
出口条件1: 依然ping不通 或 丢包现象无好转 出口条件2: 可以ping通 或 丢包现象好转 |
出口条件1: ==> B 出口条件2: ==> D |
||
B | 问题是 ping不通 还是 丢包 | 出口条件1: ping不通 出口条件2: 丢包 |
出口条件1: ==> C 出口条件2: ==> G |
||
C | 参考 问题一: 短网线网络ping不通 进行排查 | ||||
D | 更换正常网络环境下的长网线查看是否依然存在问题 或者将该长网线接入其他正常的设备查看是否依然存在问题 |
出口条件1: 恢复正常 出口条件2: 问题依然存在 |
出口条件1: ==> 结束流程, 网线问题 出口条件2: ==> E |
||
E | 确认网线的长度以及使用场景下的带宽 | 出口条件1: 符合使用场景 出口条件2: 不符合使用场景 |
出口条件1: ==> F 出口条件2: ==> 结束流程, 使用场景超出设计的能力 |
P3P支持 100M带宽下100米的长网线 以及10M带宽下250米的长网线 |
|
F | 更换设备及网线到直连环境中, 查看是否恢复正常 | 出口条件1: 恢复正常 出口条件2: 问题依旧存在 |
出口条件1: ==> 结束流程, 网络环境问题 出口条件2: ==> G |
||
G | 使用ethtool关闭设备自协商 将两端设备配置成相同的工作模式 |
出口条件1: 恢复正常 出口条件2: 问题依旧存在 |
出口条件1: ==> 结束流程, 自协商没生效问题, 找对应SWRD 出口条件2: ==> H |
出口条件1: ==> 提供串口log ==> 执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
ethtool工具使用介绍 |
H | 检查设备的cpu loading是否正常 命令: top -d 1 可以查看进程占用的CPU百分比, 第二行的CPU: 表示CPU的使用信息, 其中 idle 表示空闲资源。idle越少, cpu loading越大(cpu loading = 100% - idle) |
出口条件1: cpu loading 没有满载 出口条件2: cpu loading 满载 |
出口条件1: ==> I 出口条件2: ==> 结束流程, 查看导致loading的程序, 找对应SWRD |
top -d 1的信息 在top后的UI界面, 按 1 后的信息 |
某些版本top和常用的不一样, 可以使用命令: busybox top -d 1 -d 1 表示刷新间隔1s |
I | mii(片内phy)可以尝试调整driver的驱动能力: 增强tx驱动能力 以及 调整rx的阻抗 调整后看能否ping通/丢包 |
出口条件1: 调整后好转 出口条件2: rmii(片外phy) 或 片内phy调整后无好转 |
出口条件1: 结束 ==> 驱动能力问题 出口条件2: 结束 ==> 找对应SWRD排查问题 |
1、提供串口log 2、执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
命令: echo swing_100 2 > /sys/devices/virtural/sstar/emac0/turndrv ==> 增加100M带宽下 tx驱动能力两个挡位 echo swing_10 2 > /sys/devices/virtural/sstar/emac0/turndrv ==> 增加10M带宽下 tx驱动能力两个挡位 echo rx_imp 7 > /sys/devices/virtual/mstar/emac0/turndrv ==> 将rx阻抗设置为7(范围-4~7) |
问题三: 网络带宽不足¶
流程 | 方法 | 出口条件 | 下一步 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 检查测速工具的命令是否正确, 常见问题如下: 1、iperf 测量udp带宽时需要-b指定最大带宽 2、iperf2 服务端和客户端都需要加 -u 才可以正常收发udp |
出口条件1: 命令正确 出口条件2: 命令错误 |
出口条件1: ==> B 出口条件2: 结束 ==> 工具使用问题 |
iperf等测试工具执行的server端和client端log | iperf3使用参考 |
B | 1、检查端口的速率和双工模式 2、检查与对端端口配置的速率和双工模式是否匹配 3、若对端端口的速率模式不方便查看, 也可通过ifconfig查看是否存在大量error、collision、drop报文确认 |
出口条件1: 一切正常 出口条件2: 存在异常, 端口配置速率低、两端速率模式不匹配、存在大量错误报文统计等 |
出口条件1: ==> D 出口条件2: ==> C |
命令: ./ethtool eth0 ethtool工具使用介绍 |
|
C | 1、 使用 ethtool 固定两端速率和双工模式重新测试 | 出口条件1: 带宽依然不足 出口条件2: 带宽正常 |
出口条件1: ==> D 出口条件2: 结束 ==> 自协商问题 |
1.提供测试过程中的相关日志 2.现场的网络拓扑情况 3.协助SWRD复现 |
|
D | 检查是否是中转设备(路由器, 交换机)做了影响带宽的qos策略或带宽限制策略导致的带宽不足 方法: 使用直连方式测试设备带宽 |
出口条件1: 直连测试下带宽依然不足 出口条件2: 直连测试下带宽正常 |
出口条件1: ==> E 出口条件2: 结束 ==> 中转设备限速 |
||
E | 检查设备以及测试带宽所用的辅助设备(如pc)等是否开启了防火墙 如果有, 则关闭防火墙重新测试 |
出口条件1: 没有开启防火墙 或 关闭防火墙情况下带宽依然不足 出口条件2: 关闭防火墙情况下带宽恢复正常 |
出口条件1: ==> F 出口条件2: 结束 ==> 防火墙原因 |
||
F | 在测试带宽过程中, 使用top命令观察系统资源的使用情况, 主要关注: 1、是否还有空闲内存 (Mem: xxx free) 2、是否还有空闲cpu (CPU: xx% idle) |
出口条件1: 系统资源充足 出口条件2: 系统资源不足 |
出口条件1: ==> G 出口条件2: 结束 ==> 性能问题 |
1.提供测试过程中的相关日志 2.执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
idle 表示空闲资源。idle越少, cpu loading越大(cpu loading = 100% - idle) 某些版本top和常用的不一样, 可以使用命令: busybox top -d 1 -d 1 表示刷新间隔1s |
G | 1、拔插网线后重新测试 2、更换一条正常网络下的网线重新测试 |
出口条件1: 带宽恢复正常 出口条件2: 带宽依然不足 |
出口条件1: 结束 ==> 物理连接问题 出口条件2: 结束 ==> 反馈SWRD |
1、提供测试过程中的相关日志 2、执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
|
H | 尝试更换打流方向或者打流设备 1、iperf使用-R命令,改变打流方向 2、更换同型号设备,使用同一个image |
出口条件1: 带宽恢复正常 出口条件2: 带宽依然不足 |
出口条件1: 结束 ==> 硬件问题,找CAE排查 出口条件2: 结束 ==> 反馈SWRD |
1、提供测试过程中的相关日志 2、执行以下脚本, 并提供相应log p3p-emac-dump-register.sh |
如果更换打流方向或更换设备后,带宽正常,可以换一个server端或client端设备,以此判断是 原来设备的tx端问题 还是 rx端问题(也可能都有问题) |
问题四: uboot下网络无法使用¶
流程 | 方法 | 出口条件 | 下一步 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 将原本连接设备的网线接入其他网络正常的设备, 测试网络是否正常 | 出口条件1: 网络正常 出口条件2: 网络异常 |
出口条件1: ==> B 出口条件2: 结束 ==> 检查网络环境 |
||
B | 1、查看启机log是否打印了"Net: MAC Address xxx"确认 2、若启机log无相关打印, 则通过执行estart命令执行emac初始化 3、检查网络是否可用 |
出口条件1: 网络可用 出口条件2: 网络不可用 |
出口条件1: 结束 ==> 网卡未初始化问题 出口条件2: ==> C |
可通过设置环境变量autoestart=1启用启机自动初始化网卡 | |
C | 检查环境变量的配置是否正确 | 出口条件1: 环境变量配置正确, 且是动态获取ip地址(dhcp) 出口条件2: 环境变量配置正确, 且是静态ip 出口条件3: 环境变量配置错误 |
出口条件1: ==> D 出口条件2: ==> E 出口条件3: 结束 ==> 正确配置后重新测试 |
Uboot ENV配置参考 | |
D | 检查DHCP 方法: 更换其他人的MAC地址, 尝试DHCP看是否能ping通PC |
出口条件1: dhcp无法获取ip 或 依然无法ping通 出口条件2: 网络正常 |
出口条件1: ==> E 出口条件2: 结束 ==> 可能是由于ip地址冲突, 检查是否有其他相同MAC地址的设备, 或找 MIS |
Uboot ENV配置参考 | |
E | 片内phy:无需检查 片外phy 1、查看启机log中是否有"Can't get correct PHY Addr and reset to 0", 有该log说明mdio连接异常 2、使用命令: phy_r 1 , 读取到的数值为全0或全F, 代表mdio连接异常 |
出口条件1: mdio连接异常 出口条件2: mdio连接正常 |
出口条件1: ==> G 出口条件2: ==> F |
调试过程的相关log 协助SWRD复现 |
|
F | 使用命令: phy_r 1 , 检查phy link状态 | 出口条件1: link up 出口条件2: link down |
出口条件1: 结束 ==> 找SWRD反馈 出口条件2: 结束 ==> 可能是phy有问题, 尝试更换phy或者找CAE排查 |
调试过程log | 通过phy寄存器可以看是否link up bank_phy0 offset1 bit2 : 1: Link is up 0: Link is down |
G | 根据客户实际的引脚设计检查是否存在rmii引脚被错误复用的问题 | 出口条件1: pinmux无错误复用 出口条件2: pinmux错误复用 |
出口条件1: ==> H 出口条件2: 结束 ==> 引脚复用错误 |
调试过程log | |
H | 使用LA或示波器量信号/波形, 观察: 1、高电平3.3V左右, 低电平0V 2、波形是否正常无杂波 |
出口条件1: 信号/波形正常 出口条件2: 信号/波形异常 |
出口条件1: 联系SWRD继续排查 出口条件2: 结束 ==> 检查电压是否正常、芯片虚焊、引脚被phy端控制等 |
调试过程log | 参考 问题五: 新型号 Ephy 或switch网卡适配失败 排查 1、电压异常可能需要排查跳帽等, 需要联系CAE分析 2、波形异常, 有杂波, 可能是芯片虚焊, 或者外挂phy在控制引脚。可以尝试phy reset。 其他可参考wiki: EMAC phy reset |
问题五: 新型号 Ephy 或 switch网卡 适配失败¶
流程 | 方法 | 出口条件 | 下一步 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 检查phy或者switch的引脚与芯片是否物理连接上 检查有无虚接情况 |
出口条件1: 物理连接正常 出口条件2: 未正常连接 |
出口条件1: ==> B 出口条件2: 结束 ==> 物理连接异常 |
||
B | 检查连接引脚的pinmux 确保均已设置成正确mode, 且无占用情况 |
出口条件1: pinmux正常 出口条件2: pinmux异常 |
出口条件1: ==> C 出口条件2: 结束 ==> pinmux异常 |
pcupid eth_mode: RIU bank 0x103c offset 0x6e eth0: bit[1:0] BGA: 3 QFN: 2 eth1: bit[7:4] BGA: 2 QFN: 1 |
|
C | 根据phy手册或switch手册上的reset时序要求, 检查实际配置的reset时序 | 出口条件1: 时序正常, reset引脚配置正确 出口条件2: 时序错误, 或reset引脚被占用 |
出口条件1: ==> D 出口条件2: 结束 ==> reset引脚错误 |
pcupid 的sw phy reset逻辑由于外接反向电路,因此代码内是先拉高再拉低 pcupid 的reset引脚默认没有连接, 需要补焊电阻,芯片才能控reset引脚 默认拉低reset引脚保持20ms, 再拉高reset引脚保持50ms 客户可能会有修改, 需要去确认实际reset时序是否符合要求 同时需要确认reset引脚选择是否正确, 是否存在pinmux错误复用问题 pcupid reset引脚值参考 |
|
D | 确认是否开启fixed-link switch网卡适配 或 不关注phy状态(无mdio等) 需要启用fixed-link |
出口条件1: 已开启 或 不需要fixed-link 出口条件2: 未开启 |
出口条件1: ==> E 出口条件2: 结束 ==> 未启用fixed-link |
fixed-link phy方案 | |
E | 检查phy/switch提供的clk是否为50Mhz | 出口条件1: 是 出口条件2: 不是 |
出口条件1: ==> F 出口条件2: 结束 ==> 时钟不匹配导致适配失败 |
phy clock | |
F | 向phy厂商或者switch厂商确认是否需要更新驱动 | 出口条件1: 不需要 出口条件2: 需要 |
出口条件1: 结束 ==> 联系SWRD进一步排查 出口条件2: 结束 ==> 需要更新驱动 |
调试过程log | 适配片外phy |
问题六: 网络频繁掉线¶
流程 | 方法 | 出口条件 | 下一步 | 需提供给SWRD的资料 | 备注 & 相关FAQ |
---|---|---|---|---|---|
A | 检查是否由于网线质量导致的频繁掉线 跟正常网络环境交换网线, 做交叉测试 |
出口条件1: 非网线问题 出口条件2: 网线问题 |
出口条件1: ==> B 出口条件2: 结束 ==> 网线问题 |
||
B | 检查是否因为网络环境导致 改为直连测试是否会频繁掉线 |
出口条件1: 直连测试依然频繁掉线 出口条件2: 网络正常 |
出口条件1: ==> C 出口条件2: 结束 ==> 网络环境或中转设备问题 |
||
C | 检查phy状态寄存器, 查看是否频繁变化, 读取的link状态是否与当前一致 | 出口条件1: phy状态正常 出口条件2: 片外phy 且 phy状态异常 出口条件3: 片内phy 且 phy状态异常 |
出口条件1: ==> D 出口条件2: ==> E 出口条件3: 结束 ==> 反馈SWRD |
调试过程log | 通过phy寄存器可以看是否link up bank_phy0 offset1 bit2 : 1: Link is up 0: Link is down phy寄存器读取方法:phytool读取 或 debug节点 |
D | 检查设备的端口配置(双工模式/速率)是否与对端端口匹配 | 出口条件1: 不匹配 出口条件2: 匹配 |
出口条件1: ==> 配置匹配的端口模式后重试 出口条件2: 结束 ==> 反馈SWRD |
调试过程log | 命令: ./ethtool eth0 ethtool工具使用介绍 |
E | 检查连接引脚的pinmux 确保均已设置成正确mode, 且无占用情况 |
出口条件1: pinmux正常 出口条件2: pinmux异常 |
出口条件1: ==> F 出口条件2: 结束 ==> pinmux异常 |
pcupid eth_mode: RIU bank 0x103c offset 0x6e eth0: bit[1:0] BGA: 3 QFN: 2 eth1: bit[7:4] BGA: 2 QFN: 1 |
|
F | 通过示波器检查phy晶振引脚的波形是否正常 | 出口条件1: 波形正常 出口条件2: 波形异常 |
出口条件1: ==> G 出口条件2: 结束 ==> phy晶振损坏 |
||
G | 根据phy手册或switch手册上的reset时序要求, 检查实际配置的reset时序 | 出口条件1: reset flow正确 出口条件2: reset flow错误 |
出口条件1: 结束 ==> 反馈SWRD 出口条件2: 结束 ==> 调整reset flow之后重新测试 |
调试过程log | pcupid 的sw phy reset逻辑由于外接反向电路,因此代码内是先拉高再拉低 pcupid 的reset引脚默认没有连接, 需要补焊电阻,芯片才能控reset引脚 默认拉低reset引脚保持20ms, 再拉高reset引脚保持50ms 客户可能会有修改, 需要去确认实际reset时序是否符合要求 同时需要确认reset引脚选择是否正确, 是否存在pinmux错误复用问题 pcupid reset引脚值参考 |