nvidia agx orin phy调试

nvidia agx orin驱动千兆网卡88EA12PB2上节介绍的nvidia agx orin驱动千兆网卡,如果未顺利识别,则需要进行调试。

一、PHY芯片介绍

维度描述
功能- 实现 OSI 模型物理层功能
- 处理电 / 光信号转换
- 信号调制解调
- 错误检测(如 CRC)
- 速率适配(10/100/1000Mbps)
- 自动协商(与对端设备协商参数)
接口类型MAC-PHY 接口:GMII/RGMII/SGMII/TBI/RTP 等
物理介质接口:RJ45(电口)、SFP(光口)、MIIM(管理接口,用于寄存器配置)
集成度低集成度:仅含 PHY 功能,需外接 MAC 控制器
高集成度:集成 MAC+PHY(如某些 SoC 内置)
附加功能:部分集成交换芯片、PoE 供电、硬件卸载功能(如 TCP 分段)
典型应用- 以太网交换机 / 路由器
- 网卡(PCIe 转 RJ45)
- 工业控制网络
- 数据中心服务器网卡
关键参数- 传输速率(1G/2.5G/5G/10Gbps)
- 功耗(如 IEEE 802.3az 能效以太网)
- 支持的线缆类型(UTP / 光纤)
- 工作温度范围(工业级 / 消费级)

二、agx orin与88EA12PB2连接方式

(1)agx orin的Gigabit Ethernet控制器含有mac;

(2)agx orin与88EA12的数据通信,通过RGMII接口;

(3)agx orin与88EA12的控制,通过MDIO接口;

三、PHY芯片调试手段

3.1 PHY芯片供电是否正常

使用万用表测试供电点是否正常,1.8V或3.3V。

3.2 判断驱动是否加载

执行:dmesg | grep 2310000         #其中0x2310000是千兆网卡寄存器

输出:

[    8.590881] nvethernet 2310000.ethernet: Adding to iommu group 52
[    8.591175] nvethernet 2310000.ethernet: failed to read skip mac reset flag, default 0
[    8.591389] nvethernet 2310000.ethernet: failed to read MDIO address
[    8.591562] nvethernet 2310000.ethernet: Failed to read nvida,pause_frames, so setting to default support as disable
[    8.591846] nvethernet 2310000.ethernet: setting to default DMA bit mask
[    8.592031] nvethernet 2310000.ethernet: max-platform-mtu DT entry missing, setting default 1500
[    8.592275] nvethernet 2310000.ethernet: missing nvidia,pad_auto_cal_pu_offset, setting default 0
[    8.592503] nvethernet 2310000.ethernet: missing nvidia,pad_auto_cal_pd_offset, setting default 0
[    8.601542] nvethernet 2310000.ethernet: Ethernet MAC address: 48:b0:2d:91:af:f3
[    8.601969] nvethernet 2310000.ethernet: macsec param in DT is missing or disabled
[    8.605935] nvethernet 2310000.ethernet: Macsec not supported/Not enabled in DT
[    8.614176] nvethernet 2310000.ethernet: eth1 (HW ver: 53) created with 8 DMA channels
[   15.839960] nvethernet 2310000.ethernet eth1: Link is Up - 1Gbps/Full - flow control off

如果出现上述”nvethernet 2310000.ethernet eth1: Link is Up - 1Gbps/Full - flow control off“表明千兆phy已经被识别。否则根据报错信息解决。

3.3 测量phy芯片参考时钟

需要测试如图红色标记的CLK125引脚是否输出正常的124MHZ的波形,如果没有输出需要排查phy的配置和供电。

3.4 测量phy芯片的复位引脚

需要测试下图红色标记的RESET引脚,若phy芯片不复位,需要排查设备树配置和引脚功能配置。

3.5 MDIO存在代码

创建mdio.c文件

#include <stdio.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/mii.h>
#include <linux/sockios.h>
#include <linux/types.h>
#include <net/if.h>

#define reteck(ret)                                            \
	if (ret < 0) {                                             \
		printf("%m! \"%s\" : line: %d\n", __func__, __LINE__); \
		goto lab;                                              \
	}

#define help()                                        \
	printf("phyreg:\n");                                \
	printf("read operation: phyreg reg_addr\n");        \
	printf("write operation: phyreg reg_addr value\n"); \
	printf("For example:\n");                         \
	printf("phyreg eth0 1\n");                          \
	printf("phyreg eth0 0 0x12\n\n");                   \
	exit(0);

int sockfd;

int main(int argc, char *argv[])
{
	struct mii_ioctl_data *mii = NULL;
	struct ifreq ifr;
	int ret;

	if (argc == 1 || !strcmp(argv[1], "-h")) {
		help();
	}

	memset(&ifr, 0, sizeof(ifr));
	strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
	sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
	reteck(sockfd);	 // get phy address in smi bus
	ret = ioctl(sockfd, SIOCGMIIPHY, &ifr);
	reteck(ret);
	mii = (struct mii_ioctl_data *)&ifr.ifr_data;

	if (argc == 3) {
		mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);
		ret = ioctl(sockfd, SIOCGMIIREG, &ifr);
		reteck(ret);
		printf("read phy addr: 0x%x reg: 0x%x value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_out);
	} else if (argc == 4) {
		mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);
		mii->val_in = (uint16_t)strtoul(argv[3], NULL, 0);
		ret = ioctl(sockfd, SIOCSMIIREG, &ifr);
		reteck(ret);
		printf("write phy addr: 0x%x reg: 0x%x value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_in);
	}
lab:
	close(sockfd);
	return 0;
}

编译mdio.c文件有两种方式:

(1)在宿主机上交叉编译;

(2)直接在agx orin系统上编译。

 编译完成后,使用方法如下:

读取寄存器:./mdio  reg_addr

写入寄存器:./mdio  reg_addr  value

 3.5 通过MDIO接口存在PHY芯片寄存器

(1)阅读88E1512PB2-NNP2C000-U9.pdf手册,存在页寄存器切换情况。

(2)默认是0页的寄存器,可以读取0页地址为1的phy寄存器值

 

    (3)读取PHY的ID寄存器

    执行:./mdio  read  eth1 1

    返回:0x796d

     

     (4)切换页18读取20寄存器值

     

    先写入页18

    执行:./mdio  write eth1 22 18

    再执行:./mdio  read eth1 18

     

     四、总结调试方法

    4.1、硬件层调试

    手段工具 / 方法作用
    链路状态检测网线测试仪、LED 指示灯观察验证物理链路连通性(如网线是否断路、PHY 的 Link/Activity 灯是否正常)
    信号质量分析示波器、逻辑分析仪检测 TX/RX 信号波形(如幅度、上升沿、时钟抖动),排查信号失真问题
    电源测试万用表、电源轨监控测量 PHY 芯片各供电引脚电压(如 3.3V、1.8V),确保电源稳定
    物理层环回PHY 寄存器配置环回模式(Loopback)验证 PHY 内部收发路径是否正常(无需对端设备,自环测试)

    4.2、寄存器级调试

    手段工具 / 方法作用
    基本寄存器读取MIIM/I2C 工具(如ethtool -g读取 PHY 状态寄存器(如 BMSR、BMR),检查链路状态、自协商结果
    扩展寄存器访问phytool、自定义驱动程序访问 vendor-specific 寄存器(如 Marvell、Broadcom 的私有寄存器)
    寄存器日志记录抓包分析寄存器配置时序验证驱动程序对 PHY 的配置流程是否正确(如自协商参数设置顺序)

    4.3、软件层调试

    手段工具 / 方法作用
    内核日志分析dmesg、syslog查看驱动加载过程(如 PHY 探测、自协商结果),定位初始化失败原因
    ethtool 工具ethtool ethX查询 PHY 状态(ethtool -s修改配置)、自协商参数、错误计数器(如 CRC 错误)
    网络抓包tcpdump、Wireshark分析数据包收发情况(如丢包率、错包率),验证数据通路是否正常
    驱动调试内核调试选项(如CONFIG_PHY_DEBUG启用驱动详细日志,跟踪 PHY 状态机转换(如链路 up/down 事件)

    4.4、高级调试技术

    手段工具 / 方法作用
    硬件断点JTAG/SWD 调试器在 PHY 芯片初始化流程中设置断点,检查关键寄存器值
    功耗分析功率计、电流探针监控 PHY 工作功耗,排查异常耗电问题(如芯片锁死导致的高功耗)
    温度测试红外热成像仪、热敏贴纸检测 PHY 芯片工作温度,避免因过热导致性能下降或丢包
    应力测试网络流量发生器(如 Ixia、Spirent)在高负载下验证 PHY 稳定性(如 100% 线速转发时的丢包率)

     4.5、 网络分析仪调试

    网络分析仪(如 Keysight E5071C、R&S ZNB 系列)在 PHY 芯片调试中主要用于测试高频信号特性验证物理层性能。以下是其具体应用场景、操作步骤及注意事项:

    测试项目作用
    S 参数测试测量信号反射(回波损耗)和传输特性(插入损耗),评估阻抗匹配和信号完整性
    眼图分析评估高速信号质量(如抖动、噪声容限),验证是否满足 IEEE 标准
    误码率测试(BERT)在不同速率和编码下测试误码率,确定 PHY 的极限性能
    频响特性测试分析信号带宽、截止频率和群延迟,优化传输介质匹配
    电磁干扰(EMI)分析检测信号辐射和串扰,优化 PCB 布线和屏蔽设计

    4.6、 常见问题排查流程

    1. 物理层验证

      • 检查网线连接、LED 状态
      • 使用示波器观察信号质量
      • 配置 PHY 环回模式测试
    2. 自协商问题定位

      • 通过ethtool查看自协商状态
      • 强制 PHY 工作在固定速率 / 双工模式(ethtool -s ethX speed 1000 duplex full
      • 检查对端设备配置是否匹配
    3. 数据通路验证

      • 使用ping测试连通性
      • 通过iperf测试吞吐量
      • 抓包分析丢包位置(PHY 前 / 后)
    4. 驱动与固件调试

      • 检查内核驱动版本兼容性
      • 更新 PHY 固件(如有)
      • 对比参考设计的寄存器配置值

    4.7、注意事项

    • 硬件依赖:不同 PHY 芯片的寄存器映射和调试接口(如 MIIM/I2C)可能不同,需参考芯片手册
    • 电源敏感性:PHY 对电源噪声敏感,建议使用低噪声 LDO 供电
    • 散热考量:高速 PHY(如 10Gbps)需注意散热设计,避免温度影响信号质量

    ### NVIDIA AGX Orin 系统迁移教程 #### 准备工作 为了顺利将现有系统迁移到NVIDIA AGX Orin平台,需准备好如下设备和环境配置: - **硬件需求** - NVIDIA Jetson AGX Orin 开发者套件一台[^1] - 装有Ubuntu系统的主机电脑用于辅助安装过程 - **软件准备** - 安装最新版本的JetPack SDK到AGX Orin上,这包含了Linux操作系统以及必要的驱动程序和支持库 - 如果项目依赖于特定框架或工具链,则应提前确认这些资源能够在新平台上正常运行,并做好相应调整 #### 迁移流程 ##### 数据备份与导出 建议先在当前使用的Jetson AGX Xavier或其他旧版设备上完成重要资料的备份。可以通过网络共享或者外部存储介质的方式转移应用程序源码、训练模型以及其他关键资产。 ##### 新环境搭建 按照官方文档指引,在AGX Orin目标板卡上刷入合适的固件镜像并启动初始设置向导。此阶段会涉及到分区表创建、内核参数设定等工作项。 ##### 应用移植适配 针对原有基于Isaac ROS构建的应用场景,重点在于验证API接口兼容性和性能优化方面的工作。由于Orin架构较之前代产品有了显著提升,部分函数调用方式可能有所变化;同时也要注意充分利用新增特性带来的效率增益[^2]。 ```bash # 更新包管理器索引 sudo apt-get update && sudo apt-get upgrade -y # 安装ROS和其他必要组件 sudo apt install ros-noetic-desktop-full python3-catkin-tools ``` ##### 测试验证 最后一步是对整个迁移后的解决方案进行全面的功能测试和技术指标评估。确保所有预期功能都能稳定执行,并且达到甚至超越原有的表现水平。 ---
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    坏一点

    您的鼓励是我最大的动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值