Z1667956094 2024-09-03 22:59 采纳率: 0%
浏览 27
已结题

嵌入式设备网口down后再up时不能link?

使用国产裕泰8521phy芯片,芯片工作在sgmac-to-rgphy 模式,对端接东土的交换芯片,交换芯片已经设置为强制前兆,sgmii 模式。使用的phy驱动为yt8521的专用驱动motircomm,我启动时需要设置一下寄存器的值以便phy工作在正常模式,相关启动脚本如下:

img

第一次启动后,可以正常link 到千兆模式,但我使用ifconfig eth1 down 后,发现不再自动link ,如下

img

img


但是速度与双工模式均正确,此时我再执行命令mdio eth1 0 0x1200 midi eth1 0 0x140 后又可再次link ,查阅芯片手册寄存器写1200是使能自协商,写140是工作在千兆全双工模式,现在想要实现使用ifconfig eth1 up时自动link,而不是手动执行,我在phy驱动的resume 函数和config_aneg函数中均做过修改,但似乎没有效果,应该如何修改?或者跟哪些函数有关?请各位指教

  • 写回答

16条回答 默认 最新

  • 吃不了席 2024-09-03 23:00
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要解决这个问题,首先确保在phy驱动的resume()函数中设置了正确的寄存器值。这里是一个可能的解决方案:

    #!/bin/bash
    
    # 假设phy驱动的resume函数名为resume()
    
    # 在resume函数中设置正确的寄存器值
    resume() {
        # 寄存器地址
        REG_ADDR=0x140
    
        # 设置PHY地址
        if [[ $1 == "eth1" ]]; then
            echo "eth1"
            shift
            REG_ADDR=$1
        elif [[ $1 == "ethl" ]]; then
            echo "ethl"
            shift
            REG_ADDR=$1
        fi
    
        # 设置PHY地址
        echo "Setting PHY address to $REG_ADDR"
    
        # 设置PHY控制寄存器
        sed -i "s/$REG_ADDR/0x$REG_ADDR/" /root/yt8521/drivers/phy/mii/bus/stmmac-0:03/config.txt
    
        # 重启PHY
        reboot
    }
    
    resume eth1
    

    在这个示例中,我们首先检查输入参数是否包含eth1ethl。如果是,我们就将相应的PHY地址作为参数传递给函数。然后,我们在resume函数中设置PHY控制寄存器,并通过sed命令更新它。最后,我们通过reboot命令重启PHY以应用更改。

    请注意,这只是一个基本示例,实际操作可能会根据具体的硬件和软件环境有所不同。此外,你需要确保你的phy驱动程序支持设置PHY控制寄存器。如果你遇到问题,建议查看相关的硬件和软件文档,了解如何设置这些寄存器。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月4日
  • 赞助了问题酬金15元 9月3日
  • 创建了问题 9月3日

悬赏问题

  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分 合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备