文章目录

  • 前言
  • 1、YT8511是什么?
  • 2、调试准备工作
  • 3、千兆网口不通,是否需要移植裕太微官方驱动?
  • 4、开始调试网口
    • 4.1 硬件调试
    • 4.2 内核配置
    • 4.2 内核编译
  • 5、运行内核并测试网口
  • 6、例外说明
  • 总结

前言

  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

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

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

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

若以上的管脚复用不对,可以在 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  --->

根据硬件 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

编译完成后:

  • 生成内核文件: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=6eth0 - (dev. name: stmmaceth - id: 0, IRQ #55IO base addr: 0xfc020000)
libphy: STMMAC MII Bus: probed
eth0: 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: 0x36Enhanced descriptor structure
MACADDR in get is ff:ff:ff:ff:ff:ffno valid MAC address for MAC 1;please, use ifconfig or nwhwconfig!
stmmac_associate_phy: phy 1 mode=6eth1 - (dev. name: stmmaceth - id: 0, IRQ #55IO 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)如果(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 bytes
64 bytes from 192.168.32.1: seq=0 ttl=254 time=18.156 ms
64 bytes from 192.168.32.1: seq=0 ttl=254 time=18.156 ms
  • 5.2.2 错误示范: 假设我们将 eth1 PHY地址 配置为 2 ,重新编译并运行内核,尝试启动 eth1 网口时提示信息如下:
# ifconfig eth1 up
libphy: PHY 1:02 not found
eth1: Could not attach to PHY
stmmac_open: Cannot attach to PHY (error: -19)
ifconfig: SIOCSIFFLAGS: No such device

这就是典型的 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                     //调整链接参数

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速率只适配100MBphydev->duplex = DUPLEX_FULL;             //全双工phydev->autoneg = AUTONEG_DISABLE;         //禁止自协商功能phydev->pause = 1;phydev->asym_pause = 1;return 0;
}

总结

  • 调试 YT8511 PHY芯片时,一般情况下是不需要移植裕太微官方驱动的,除非你有其他特殊的功能需要添加;
  • 再次声明关于 “6.2 PHY芯片自协商功能修改”,大家必须要确保是不需要自协商功能才做的修改,否则百兆设备不能适配的情况,还是需要检查硬件上的网口间是否有干扰,或内核配置是否有误等情况并重新做调整。
  • 关于 PHY 和 MAC 之间的工作原理与联系,网上已有很多大神写的很详细了,在这里我就不过多陈述了。如果大家感兴趣,推荐几篇博文与大家共勉:
  • Network 之二 Ethernet(以太网)中的 MAC、MII、PHY 详解
  • 以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍
  • Linux以太网卡架构解析-MAC层和PHY层
  • hi35xx stmmac网卡驱动源码解读
  • linux PHY驱动

海思YT8511千兆网不通的解决方法相关推荐

  1. 海康工业相机MVS SDK使用云钥科技GigeVision千兆网工业相机

    介绍 因为海康工业相机完全支持GigeVision协议标准,海康工业相机的MVS SDK可以使用支持Gige Vision的工业相机.云钥科技的UGSMT系统千兆网络相机完全兼容GigeVision协 ...

  2. zynq linux千兆网卡驱动,zynq linux ar8031驱动 使得支持千兆网

    使用相同的环境,目前稍好点,mii info能看到东西了: U-Boot 2018.01 (Jun 04 2020 - 02:02:40 +0000) Xilinx ZynqMP ZCU102 rev ...

  3. 一个udp用户数据报的数据字段为8192_基于FPGA的千兆网UDP通信分析

    千兆网UDP通信 以太网帧格式 图8‑12 以太网帧格式 表8‑5 以太网帧格式说明 UDP协议分析 为什么UDP协议在FPGA实现时很受欢迎,最主要一个原因就是简单,简答到什么地步呢?UDP协议只是 ...

  4. linux libpcap 效率,Linux ubuntu PF_RING+libpcap 极速捕获千兆网数据包,不丢包

    本文转自:http://blog.chinaunix.net/uid-23225855-id-3228867.html 上一篇文章讲到了,尤其在千兆网的条件下,大量的丢包,网上搜索好久,大概都是PF_ ...

  5. 千兆网综合布线系统的线缆选型

    综合布线系统包含建筑群布线子系统.建筑物主干布线子系统.水平布线子系统(包含工作区电缆)三大布线子系统.千兆网综合布线系统除具有一般快速以太网综合布线系统设计的特点之外,更重要的是要合理选择UTP.光 ...

  6. 华为S5700S-52P-LI-AC千兆网管交换机web登录界面配置

    研究一下午,包装附的说明书根本就是错误的,通过技术售后和官方的文档结合,总算可以登录交换机的web管理界面. 首先需要使用通讯控制线缆(包装中附)连接电脑和交换机,一头接交换机的Console口,一头 ...

  7. 利用软路由,轻松实现宽带叠加,已达到千兆网速的效果

    利用软路由,轻松实现宽带叠加,已达到千兆网速的效果 官网:http://www.VedioTalk.com B站:https://space.bilibili.com/28459251 优酷:http ...

  8. Verilog 实现千兆网UDP协议 基于88E1111--数据发送

    Verilog 实现千兆网UDP协议 基于88E1111–数据发送 注:此版本没有添加ARP PING 等,未完待续. 注:项目采用Verilog开发,基于Vivado编译器. UDP(User Da ...

  9. 飞凌嵌入式丨千兆网之RGMII SGMII解析

    一般来说,底板的千兆网大多选用RGMII和SGMII两种接口,也有可以拓展出更多网口的QSGMII接口. 这篇文章主要是对前两种常用的千兆网接口的介绍,以直观的方式对比这两种接口在引脚方面的不同,比较 ...

最新文章

  1. golang的mongodb操作(mgo)
  2. 微信打开网址后自动调用手机自带默认浏览器或提示选择浏览器打开如何实现...
  3. 几个不错的自己到的少的游戏站
  4. mkswap命令详解
  5. 源码 状态机_阿里中间件seata源码剖析七:saga模式实现
  6. Haiku OS 的黎明
  7. 深度学习(五十八)caffe移植至mxnet
  8. Standard Deviation Normal Distribution
  9. java 注解学习_JAVA注解学习
  10. 小米会在芯片产业异军突起吗?
  11. 《CCIE路由和交换认证考试指南(第5版) (第2卷)》——1.6节理解与记忆
  12. Proxy 对象简介
  13. 关于如何修改CSDN中的字体大小和颜色
  14. lamp一键安装包不安装mysql_LAMP一键安装包-CentOS 5/6下自动编译安装Apache、MySQL、PHP...
  15. sap 双计量单位_SAP 基本计量单位更改(转载)
  16. 名悦集团:车上不能缺的行车小物件,安全第一条
  17. 写好商业计划书,融资就成功了一半!
  18. 南水北调中线调水量仅占丹江口水库水量1/4
  19. .net微信 验证 Token完整代码
  20. windows那些讨厌的CPU占用进程

热门文章

  1. Git出现|MERGING解决
  2. 迪蒙人工智能共享停车吸引国际关注
  3. 【信息技术】【2008.06】基于上下文感知和注意力的视觉对象跟踪
  4. axure中继器求和_如何利用Axure中继器,实现商品数量增减、价格总计效果
  5. 用友固定资产对账提示不平衡
  6. 度小满牵手南京银行打造”AI鑫”计划:银行零售业掀起变革运动
  7. 【电力电子技术】THE CUK 电路
  8. Web Worker 的运用
  9. JS高级程序设计(6)
  10. Angular7简单安装教程