专栏算法工具链J5 DVB实战教程(2)-基于J5芯片的ETH开发相关详解及常见问题解析

J5 DVB实战教程(2)-基于J5芯片的ETH开发相关详解及常见问题解析

Feng2022-11-24
259
2

本篇主要用于解决客户基于J5芯片的ETH开发相关问题,指导客户如何修改Uboot、Kernel代码调试、适配外部PHY芯片,并提供ETH开发过程中的常见问题索引及相关解决方法。

地平线J5芯片支持双千兆网口,支持RGMII/MII/GMII,详细硬件说明如下:

  1. 双网卡ETH0:0×59110000,ETH1:0×59120000

  2. 支持RGMII.MII.ETH0还支持GMII

  3. ETH0支持唤醒系统,以及提供PPS给其他模块(LPWM)使用

  4. 支持TSO功能

  5. 支持PTP同步

  6. ETH0支持PPS out/extern PPS in

  7. 支持多队列功能

  8. 支持AVB/TSN

  9. 支持C22及C45协议PHY

驱动适配

Uboot ETH开发--Phy配置

在J5系统软件中,uboot中主要功能之一烧录镜像依赖于网络,因此网络适配与调试为uboot开发过程中主要关注问题。
根据原理图确定复位的GPIO及PHY的mdio地址(hobot-j5-dvb.dtsi、hobot-j5-pinctrl.dtsi)。
如下图所示:

Uboot ETH开发--PinCtrl配置

在网络调试过程中,需要关phy的供电电压与J5 eth的供电电压是否相同,检查PAD的配置电压是否匹配,以及在波形不符合预期的情况下,可以配置J5对应引脚的驱动能力。如$TOPDIR/uboot/arch/arm/dts/hobot-j5-pinctrl.dtsi中

其中:

名称

定义

function

pin脚的功能选择

low-power-enable/
low-power-disable

PAD电压选择,使能后工作电压为1.8V,与其对应的low-power-disable代表该组引脚配置为3.3V

drive-strength

驱动能力,单位mA,当信号有衰减时可以增加信号驱动能力。代表的为该组引脚的驱动能力调整为等级1

Note:
1. J5与PHY/Switch的电压配置要匹配上
2. 驱动能力配置修改后需要有高低温兼容性测试

Uboot ETH开发--Fix-link配置

在J5不经过phy芯片,直连switch的情况下,即称之为fix-link模式,如$TOPDIR/uboot/arch/arm/dts/hobot-j5-matrix5.dts中下图所示。

其中:

名称

定义

speed = <1000>

表示工作在千兆模式下

full-duplex

表示工作状态为全双工模式

Note:
J5不支持tx_clk、rx_clk的delay功能,需要phy或switch支持clk delay配置

Kernel ETH开发--代码路径

代码路径

文件说明

drivers/net/ethernet/hobot/hobot_eth_jplus.c

Ethernet驱动代码

drivers/net/ethernet/hobot/hobot_eth_jplus.h

Ethernet驱动头文件,包含驱动结构体定义

drivers/net/ethernet/hobot/hobot_reg.h

Ethernet驱动头文件,包含驱动寄存器宏定义等

drivers/net/ethernet/hobot/hobot_eth_jplus_tc.c

Ethernet中关于TSN相关配置的文件

drivers/net/ethernet/hobot/hobot_eth_mmc.c

Ethernet中获取mmc计数相关配置的文件

drivers/net/ethernet/hobot/hobot_eth_mmc.h

Ethernet驱动头文件,包含mmc寄存器宏定义等

Kernel ETH开发--DTS配置

  1. PINCTRL配置:参见Uboot章节说明

  2. PHY复位:当前kernel流程未做Phy复位操作uboot下做一次即可。若有启动时间优化、可以将PHY复位挪到Kemel里配置

  3. PHY其它配置:CLK delay、C22/C45协议、fx-link等

  4. TSO功能开关:注释掉snps.tso关闭TSO功能。TSO开启后,GSO(Generic Segmentation Offload)会自动开启

  5. Queue CBS配置

实现方法

基于kernel的platform driver模型,实现网络节点、phy的注册,实现了net_device_ops、ethtool_ops等接口以及资源分配等功能。

  • net device operations
    网络设备接口包含网口节点的打开、关闭、发送(tso)功能,以及tsn的配置功能。
    static const struct net_device_ops netdev_ops = {
    .ndo_open = eth_netdev_open,
    .ndo_stop = eth_netdev_stop,
    .ndo_start_xmit = eth_netdev_do_start_xmit,
    .ndo_do_ioctl = eth_netdev_do_ioctl,
    .ndo_setup_tc = eth_netdev_setup_tc,
    .ndo_set_rx_mode = eth_netdev_set_rx_mode,
    .ndo_set_mac_address = eth_mac_addr,
    .ndo_select_queue = eth_netdev_tsn_select_queue,
    };

    序号

    操作符

    功能

    1

    eth_netdev_tsn_select_queue

    用于选择不同的queue从而选择不同的优先级及带宽

    2

    eth_netdev_do_ioctl

    包含phy设置、ptp初始化以及tsn设置(cbs、est、fp)等功能

    3

    eth_netdev_open

    初始化phy\mac\DMA及申请中断

    4

    eth_netdev_stop

    关闭网口释放资源

    5

    eth_netdev_do_start_xmit

    sk_buff发送

  • ethtool operations
    ethtool包含通用eth工具操作接口,读取eth连接状态,统计计数、打开唤醒功能等。
    static const struct ethtool_ops ethtool_ops = {
    .get_drvinfo = ethtool_get_drv_info,
    .get_link = ethtool_op_get_link,
    .get_link_ksettings = ethtool_get_link_ksettings,
    .set_link_ksettings = ethtool_set_link_ksettings,
    .get_strings = get_strings,
    .get_sset_count = ethtool_get_sset_count,
    .get_ethtool_stats = get_ethtool_stats,
    .get_regs_len = ethtool_get_regs_len,
    .get_regs = ethtool_get_regs,
    .get_ts_info = ethtool_get_ts_info,
    .get_wol = ethtool_get_wol,
    .set_wol = ethtool_set_wol,
    };

    序号

    操作符

    功能

    1

    ethtool_get_sset_count

    获取网卡统计计数

    2

    ethtool_get_regs

    获取寄存器值

    3

    ethtool_get_ts_info

    获取PHC能力信息

    4

    ethtool_set_wol

    设置网卡唤醒功能

  • ptp_clock_info

    序号

    操作符

    功能

    1

    eth_ptp_adjust_freq

    调整PHC频率

    2

    eth_ptp_adjust_time

    根据delta值调整PHC时间

    3

    eth_ptp_get_time

    获取PHC绝对时间

    4

    eth_ptp_set_time

    设置PHC绝对时间

    5

    eth_ptp_enable

    设置PPS输出及外部trigger网卡。pps0/pp1输出保留用于RTC时间同步extern pps0-rtc; extern pps1-gps; extern pps2-lidar; extern pps3-ap;

调试方法

  • Uboot环境变量配置

    环境变量

    配置方法

    MAC地址

    setenv eth1addr 64:00 F1:44:55:66 //eth1 mac;
    setenv ethaddr 64:00:F1:11:22:33 //eth0 mac

    IP地址

    setenv ipaddr 10.106.35.50 //本机IP;
    setenv gatewayip 10.106.321 //网关IP;
    setenv netmask 255.255. 255.0 //掩码;
    setenv serverip 10.106.34.76 //服务器IP

    其他

    setenv ethact ethernet@59120000 //默认使用网口;
    setenv tftpboot_cmd XXX //网络启动
  • Uboot调试命令

  1. Phy读写命令:mii/mdio

  2. J5寄存器读写命令:md/mw

  • Kernel调试常用工具

    名称

    功能

    示例

    phytool

    Phy读写命令

    ethtool

    查看统计计数,设置PHY等

    ethtool –S eth1 --查看统计计数。
    note: irq_rgmii_n -- Link中断统计可以用于判断网络稳定性

    vconfig

    配置vlan,也可以用ip配置

    vconfig add eth0 3 或ip link add link eth0 name eth0.3 type vlan id 3

    iperf3

    带宽测试

    server: iperf3 –s
    client tcp: iperf3 –c serverip –t 60
    client udp: iperf3 –c serverip –u –b 1G –l 32K –t 60

    tcpdump

    抓包

    tcpdump –i eth1 –e --过滤报文并输出到终端
    tcpdump –i eth1 –w eth1.pcap -- 过滤报文保存到文档,可以用winshark分析

开发常见问题

序号

问题

调试方向

1

复位失败

switch或phy未提供接收时钟给J5,检查phy/switch软/硬件配置

2

MAC2MAC Ping不通

1. J5与Switch电压不匹配,调整J5与Switch电压
2. 未收到数据,配置Switch的TX/RX clk delay
3. 信号质量问题,修改J5/Switch的驱动能力

3

PHY link不上

1. 使用mdio/mii/phytool命令能否正常读写phy寄存器
2. 检查PHY时钟、phy 复位、PHY供电等
3. 检查变压器等

4

发送失败

1. 检查phy link是否UP
2. 检查工作模式(速率,双工等)
3. 确认transmit接口是否被调用
4. 确认发送统计计数
5. 对端查看是否错包等
6. 使用环回定位故障点

5

接收失败

1. 测量phy tx时钟
2. mac环回,若正常收包。可判定phy tx时钟 与 MAC rx接收配合问题
3. 查看是否有错包,如果有ECC错包可推断是信号质量问题

6

千兆不通,百兆通

1. 检查TX/RX时钟是否为125M
2. 检查phy/switch寄存器clk是否加了clk delay
3. 检查AC_HW_Feature0(0x11c). ACTPHYSEL phy接口是否为期望的rgmii

7

大量错包

1. 检查clk是否符合要求
2. 条件允许的话,测下信号的眼图
3. 降速测试(100M或10M)

8

Kernel环境如何读取PHY

1. C22协议(EVM ETH1):
/app/scripts/phytool read eth1/0xe/1
/app/scripts/phytool write eth1/0xe/0 0xff
2. C45协议(EVM ETH0):
/app/scripts/phytool read eth0/0x7:1/2
/app/scripts/phytool write eth0/0x7:1/0 0xff
Note:有多次读写PHY命令时可能会与Kernel定时读取PHY冲突,可以一次粘贴多条命令来执行,减少相互影响

9

MAC内环回

可以验证mac是否正常。包括mac时钟,pin配置,mac数据收发等。设置MAC:speed、全双工,loopback使能位

10

PHY内环

可以验证MAC与PHY接口是否匹配。以MV88EA1512举例:通过phytool 设置phy 0_0.14=1

11

PHY外环

用于验证phy与变压器及对端的连接问题。以MV88EA1512举例:通过phytool设置21_2.14=1

12

IP/MAC如何保存不丢失

1. hrut_ipfull s <eth0/eth1> IP(x.x.x.x) MASK(y.y.y.y) GATEWAY(z.z.z.z)
2. hrut_ipfull c <eth0/eth1>
Note: 如果命令执行失败,请确认软件版本是否太旧。如果不设置IP,默认不UP端口

13

MAC设置

1. hrut_mac s <eth0 / eth1> XX:XX:XX:XX:XX:XX //保存MAC地址到EMMC中,下次启动生效
2. hrut_machrut_mac c <eth0 / eth1> //清除后下次启动会再次随机生成并保存在EMMC中
3. 系统软件版本第一次启动会生成一个随机MAC地址并固定下来。
Note:老版本如果不使用hrup_ipfull设置 IP,MAC不生效。新版本已修复

14

IP/MAC的设置逻辑

基于/usr/bin/defaultip.sh实现,可以修改重新烧写生效

算法工具链
征程5官方教程
评论2
0/1000
  • 费小财
    Lv.5

    Mark,学习学习

    2023-01-16
    0
    0
  • 云飞
    Lv.1

    厉害,弥补了我很多疑惑

    2025-07-02
    0
    0