定制化开发海思YT8511千兆网不通的解决方法

文章目录


前言

  1. 定制化开发本文比较适合在内核 arch/arm/boot/dts/ 定制化开发没有对应芯片设备树的场景调试。
  2. 定制化开发若内核已有对应芯片的设备树,定制化开发调试会相对简单一些,定制化开发在这里就不描述了,定制化开发不过解决问题的思路类同。

1、YT8511是什么?

简介:

  • 定制化开发在外围不断打压国内芯定制化开发片的背景下,2017定制化开发年裕太微电子成立于苏州市,定制化开发它是国内唯一自主以太网PHY芯片!
    YT8511定制化开发是裕太微旗下的一款支定制化开发持千兆以太网PHY芯片。

特性

  • 兼容10BASE-Te/100BASE-Tx/1000base
  • 支持WoL (wake -on- lan)定制化开发检测魔术报文,通知休眠系统唤醒强大的电缆放电事件
  • 支持RGMII接口到MAC设备,宽I/0电压等级选项2.5V,兼容3.3V 1/0
  • 全双工
  • 自动极性校正RGMll定时模式
  • 符合IEEE 802.3u的自协商
  • 软件可编程LED模式
  • 多种Loopback模式用于诊断
  • 前馈均衡器,反馈均衡器和定时恢复,以提高信号在嘈杂环境中的性能

2、调试准备工作

1.主控芯片:Hi3536
2.双网卡硬件(原理图)说明:

  • 千兆网口1:
    型号: YT8511
    RGMII口: RGMII0
    PHY地址: 1
    时钟: EPHY0_CLK
    通信: MDIO,MDCK
    复位: EPHY_RSTN0
  • 千兆网口2:
    型号: YT8511
    RGMII口: RGMII1
    PHY地址: 0
    时钟: EPHY1_CLK
    通信: MDIO,MDCK
    复位: EPHY_RSTN0

特别声明:千兆网口1 和 千兆网口2 的 MDIO, MDCK, EPHY_RSTN0 是共用一套复用管脚的。

3、千兆网口不通,是否需要移植裕太微官方驱动?

关于移植已否取决于你的实际需求。但是我想告诉你的是,其实内核是有一个通用驱动的,如果是为了调通千兆网口,是不需要移植的。

4、开始调试网口

4.1 硬件调试

首先根据硬件原理图,确保一些关键的管脚复用是正确的。海思平台可通过 himm 命令来查看:

4.1.1 查看 EPHY0_CLK 复用

# himm 0x120F0044*** Board tools : ver0.0.1_20121120 *** [debug]: {source/utils/cmdshell.c:166}cmdstr:himm====dump memory 0X120F0044====0x120F0044: 0x00000001	//01 表示已复用为 EPHY0_CLK
  • 1
  • 2
  • 3
  • 4
  • 5

4.1.2 查看 EPHY1_CLK 复用

# himm 0x120F008c*** Board tools : ver0.0.1_20121120 *** [debug]: {source/utils/cmdshell.c:166}cmdstr:himm====dump memory 0X120F008C====0x120F008c: 0x00000001	//01 表示已复用为 EPHY1_CLK
  • 1
  • 2
  • 3
  • 4
  • 5

4.1.3 查看 MDCK 复用

# himm 0x120F0090*** Board tools : ver0.0.1_20121120 *** [debug]: {source/utils/cmdshell.c:166}cmdstr:himm====dump memory 0X120F0090====0x120F0090: 0x00000001	//01 表示已复用为 MDCK
  • 1
  • 2
  • 3
  • 4
  • 5

4.1.4 查看 MDIO 复用

# himm 0x120F0094*** Board tools : ver0.0.1_20121120 *** [debug]: {source/utils/cmdshell.c:166}cmdstr:himm====dump memory 0X120F0090====0x120F0090: 0x00000001	//01 表示已复用为 MDIO
  • 1
  • 2
  • 3
  • 4
  • 5

若以上的管脚复用不对,可以在 uboot 或 kernel 里把它们配置好(推荐在 uboot 配置)

4.2 内核配置

# make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- menuconfigDevice Drivers  --->	[*] Network device support  --->		[*]   Ethernet driver support  --->			<M>   STMicroelectronics 10/100/1000 Ethernet driver, TNK added  --->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

根据硬件 PHY地址 和 RGMII口 的说明在内核里一一对应配置。若板子上的硬件没有问题,把内核运行起来后千兆网口是必定能 ping 通的。

4.2 内核编译

# make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- uImage -j16# make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux- modules -j16
  • 1
  • 2

编译完成后:

  • 生成内核文件:arch/arm/boot/uImage
  • PHY通用驱动:drivers/net/ethernet/stmmac/stmmac.ko (替换到根目录的/hitoe/)

5、运行内核并测试网口

5.1 内核启动后会自动检测 mdio 总线上的 phy_id 和 phy_addr,正确打印如下:

stmmac_associate_phy: phy 0 mode=6	eth0 - (dev. name: stmmaceth - id: 0, IRQ #55			IO base addr: 0xfc020000)libphy: STMMAC MII Bus: probedeth0: PHY ID 0000010a at 0 IRQ 0 (1:00)eth0: PHY ID 0000010a at 1 IRQ -6 (1:01) active    //检测到eth0的phy_id(0x10a),phy_addr(1)设备挂载在mdio总线上	DWMAC1000 - user ID: 0x10, Synopsys ID: 0x36	Enhanced descriptor structureMACADDR in get is ff:ff:ff:ff:ff:ff	no valid MAC address for MAC 1;please, use ifconfig or nwhwconfig!stmmac_associate_phy: phy 1 mode=6	eth1 - (dev. name: stmmaceth - id: 0, IRQ #55			IO base addr: 0xfc024000)eth1: PHY ID 0000010a at 0 IRQ 0 (1:00) active    //检测到eth1的phy_id(0x10a),phy_addr(0)设备挂载mdio总线上eth1: PHY ID 0000010a at 1 IRQ -6 (1:01)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

备注说明
1)如果(4.2 内核配置)PHY地址 配置有误,则 ethX (X表示:0, 1, …) 打印的信息是没有 active 的;
2)这种情况下,可根据 硬件说明 重新核对(4.2 内核配置)PHY地址 配置项

5.2 测试网口:

  • 5.2.1 如果 PHY地址 和 RGMII口 配置都正确,测试网口能正常 ping 通(以eth1为例):
# route add default gw 192.168.32.1 //设置eth1网关# ifconfig eth1 192.168.32.78 netmask 255.255.254.0 broadcast 192.168.32.255 up //设置eth1 IP地址、mask地址、广播地址# ping 192.168.32.1 //测试网关(正常ping通信息如下):PING 192.168.32.1 (192.168.32.1): 56 data bytes64 bytes from 192.168.32.1: seq=0 ttl=254 time=18.156 ms64 bytes from 192.168.32.1: seq=0 ttl=254 time=18.156 ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 5.2.2 错误示范: 假设我们将 eth1 PHY地址 配置为 2 ,重新编译并运行内核,尝试启动 eth1 网口时提示信息如下:
# ifconfig eth1 uplibphy: PHY 1:02 not foundeth1: Could not attach to PHYstmmac_open: Cannot attach to PHY (error: -19)ifconfig: SIOCSIFFLAGS: No such device	
  • 1
  • 2
  • 3
  • 4
  • 5

这就是典型的 PHY地址 配置有误的情况!!!

6、例外说明

6.1 PHY地址 和 RGMII口 配置都正确,但是网口还是无法 ping 通:

  • 场景: 千兆双网口同时连接不同速率的交换机或通信设备(1个千兆、1个百兆)
  • 现象: 连接千兆设备的网口能 ping 通,而连接百兆设备的网口无法 ping 通,这种情况就要检查网口的自协商功能了(大概如下):
drivers/net/ethernet/stmmac/stmmac_main.c 	--> stmmac_dvr_probe 	--> stmmac_mdio_register		--> mdiobus_register				//drivers/net/phy/mdio_bus.c			--> mdiobus_scan				--> get_phy_device			//drivers/net/phy/phy_device.c					--> get_phy_id					--> phy_device_create	//初始化phy设备自协商等参数信息						--> INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); //其中phy_state_machine会不断的检查网口状态,并回调stmmac_adjust_link调整链接参数   											drivers/net/phy/phy_device.c 	--> genphy_read_status 					//检查链路状态并更新当前链路状态drivers/net/ethernet/stmmac/stmmac_main.c 	--> stmmac_adjust_link 					//调整链接参数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6.2 PHY芯片自协商功能修改:

  • 预览 (6.1) PHY 芯片大概的工作流程:很容易看出,当我们拔插网线时 genphy_read_status 会最新检查到链路状态的更新。
  • 连接千兆设备的网口能 ping 通,而连接百兆设备的网口无法 ping 通,不排除在硬件上千兆网口干扰了百兆网口。如果连接百兆设备的网口不需要自协商,可考虑在此函数内做特殊处理(针对特定的 PHY地址 禁止自协商功能并设置固定的速率)。在 genphy_update_link 函数之后添加:
if (CONFIG_STMMAC_PHY1_ID == phydev->addr){	phydev->speed = SPEED_100;					//设定PHY1速率只适配100MB	phydev->duplex = DUPLEX_FULL;				//全双工	phydev->autoneg = AUTONEG_DISABLE;			//禁止自协商功能	phydev->pause = 1;	phydev->asym_pause = 1;	return 0;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

总结

  • 调试 YT8511 PHY芯片时,一般情况下是不需要移植裕太微官方驱动的,除非你有其他特殊的功能需要添加;
  • 再次声明关于 “6.2 PHY芯片自协商功能修改”,大家必须要确保是不需要自协商功能才做的修改,否则百兆设备不能适配的情况,还是需要检查硬件上的网口间是否有干扰,或内核配置是否有误等情况并重新做调整。
  • 关于 PHY 和 MAC 之间的工作原理与联系,网上已有很多大神写的很详细了,在这里我就不过多陈述了。如果大家感兴趣,推荐几篇博文与大家共勉:
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发