This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DP83869HM:DP83869HM + LAN7801:未在 Linux "5.6.19-v7+#10 SMP"armhf 下分配 IP

Guru**** 2455360 points
Other Parts Discussed in Thread: DP83869HM, AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/929667/dp83869hm-dp83869hm-lan7801-no-ip-assigned-under-linux-5-6-19-v7-10-smp-armhf

器件型号:DP83869HM
主题中讨论的其他器件: DP83869AM5728

您好!

我是 Michal、我对相关问题的工作感到满意("+询问相关问题"不起作用、显示了高阻力页面)、因此我在那里提出了这个问题。

我继续处理原始问题。 目标是使 LAN7801+DP83869HM 网卡在 GNU/Linux 下工作。 我们将光纤电缆与 SFP 模块配合使用。

软件环境:

Linux:
   Linux CON-RPI 5.6.19-v7+#10 SMP Thu Jul 23 079:40:03 CEST 2020 armv7l GNU/Linux、commit 8b69e4465cafcafcc9fee715ed4f877e12b696fdd9c、repository github.com/.../linux.git

设备树:
   兼容="raspberrypi、3-compute 模块\0brcm、BCM2837";
   序列号="000000002ace7356";
   型号="Raspberry Pi 计算模块3 Plus 版本1.0";

DP83869HM 驱动器:
   /drivers/net/phy/dp83869.c
LAN7801驱动程序:
   /drivers/net/usb/lan78xx.c

我修改了驱动程序以添加:
   *登录内核环形缓冲区
   * LAN7801寄存器转储
   * DP83869HM 寄存器转储
   * MDIO 通信转储
我附加所有转储和驱动程序修改:

/cfs-file/__key/communityserver-discussions-components-files/138/2248.dp83869.c.diff

/cfs-file/__key/communityserver-discussions-components-files/138/4774.lan78xx.c.diff

/cfs-file/__key/communityserver-discussions-components-files/138/mac_5F00_regs_5F00_mdio.txt

/cfs-file/__key/communityserver-discussions-components-files/138/phy_5F00_regs.txt

请注意、MDIO 流量会更改多个 PHY 寄存器。

症状:
   在 Linux 下、没有 IP 分配给使用 LAN7801+DP83869HM 网卡的网络接口。 MAC 和 PHY 驱动程序已加载、两个 IC 的寄存器均可见。

$ dmesg
[1371.983533] libphy:lan78xx-mdiobus:探测
[1371.983548] lan78xx 1-1.4:1.0 (未命名的 net_device)(未初始化):话术期间64
[1371.983554] lan78xx_phy_init
[1371.983559] lan7801_phy_init
[1371.983567]检测到 lan7801_phy_init 外部 PHY
[1371.98352] lan78xx_phy_init dt 节点00000000
[1371.983582] dp83869_phy_reset
[1371.984074] dp83869_config_init
[1371.984079] dp83869_configure_mode
[1371.986966] dp83869_config_port_mirroring
[1372.115212] dp83869_config_init
[1372.115217] dp83869_configure_mode
[1372.118055] dp83869_config_port_mirroring
[1372.245358] dp83869_ack_interrupt
[1372.245774] lan78xx_mdiobus_read: *(0x0013、interrupt_status     )= 0x0000
[1372.245781] dp83869_ack_interrupt:interrupt_status      (0x0013)= 0x0000
[1372.249429] lan78xx_print_regs
[1372.286096] lan78xx_probe:DT 节点43826fd4
[1372.286104] lan78xx_probe:DT 节点名称:USB-port@10.
[1372.286286] usbcore:注册的新接口驱动程序 lan78xx
[1372.380716] 8021q:在设备 eth1上添加 VLAN 0至 HW 滤波器

$ IP A
(笑声)
8:ETH1: MTU 1500 qdisc pfifo_fast 状态下行组默认为 qlen 1000
   链接/以太网00:80:0f:78:03:CD 返修:ff:ff:ff:ff:ff:ff
(笑声)

工作进度:
   1) 1)修改的驱动程序
   2)分析了 Linux 下的寄存器和 PHY 设置(MAC 和 PHY 之间连接的 MDIO 总线)
   3) 3)分析了具有工作网卡的 Windows MAC 寄存器(MDIO 总线断开连接)
   4) 4)从 Windows 复制到 Linux 的 MAC 寄存器设置

结论:
   1) 1) MAC 似乎没有从 PHY 接收 IRQ。
   2) 2) PHY 似乎没有满足生成 IRQ 的条件。

问题:
   1) 1)您建议接下来做什么来实现目标?

此致、

Michal Risa

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    我查看了 phy_5F00_regs.txt 文件、发现寄存器0xC01为0x6149。 这表明链路未启动、PHY 将无法接收数据。 我们可以先进行一些基本检查、以了解为何链路未启动。

    哪个链路伙伴通过光纤电缆连接到 DP83869? 链路合作伙伴是否可与其他光纤以太网设备配合使用?

    您能否确认 DP83869和链路伙伴上使用的 SFP 收发器的波长相同、所用的光纤电缆是否正确?

    在 DP83869设计中、您是否使用 SFP 收发器的信号检测引脚作为 PHY 的输入?

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    [引用 user="Aniruddha Khadye">我查看了 phy_5F00_regs.txt 文件、发现寄存器0xC01为0x6149。 这表明链路未启动、PHY 将无法接收数据。 我们可以先进行一些基本检查、以了解为何链接未启动。

    很棒!

    [引用 user="Aniruddha Khadye"]通过光纤电缆将哪个链路伙伴连接到 DP83869? 链路合作伙伴是否与其他光纤以太网设备配合使用?

    链路合作伙伴是一台带有 SFP 模块的 Mikrotik 路由器。 路由器可与其它光纤以太网设备配合使用。 路由器上的 SFP 接口 LED 指示灯亮起,且网卡无法正常工作连接到路由器。

    [引述 USER="Aniruddha Khadye"]您是否还能确认 DP83869和链路伙伴使用的 SFP 收发器的波长相同、所用的光纤电缆是正确的?

    我无法确认(正在进行此操作)、但我可以确认此设置适用于当前电缆和当前光收发器的不同网卡。 此验证是否足够?

    [引述 user="Aniruddha Khadye"]在 DP83869设计中,您是否使用 SFP 收发器的信号检测引脚作为 PHY 的输入?

    是的。 我们现在将验证信号检测引脚上的逻辑电平。

    祝你一切顺利、
    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    感谢您提供更多数据。 当您说安装程序与其它网卡一起工作时,另一个网卡可能使用与 Mikrotik 路由器不同的 SFP 收发器。当您检查 Mikrotik SFP 收发器的详细信息时, 您能否检查它是否与其他工作网卡上使用的收发器相匹配?

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    [引用用户="Aniruddha Khadye"]

    当您说安装程序与其它网卡一起工作时,另一个网卡可能使用与 Mikrotik 路由器不同的 SFP 收发器。当您检查 Mikrotik SFP 收发器的详细信息时, 您能否检查它是否与其他工作网卡上使用的收发器相匹配?

    [/报价]

    当然、我确认两个收发器的类型完全相同、并且光缆也匹配。

    我们将继续研究信号检测引脚。

    除了我们现在应该检查的信号检测之外、还有什么其他东西吗?

    祝你一切顺利、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    我确认 SIGNAL _DETECT 引脚按预期工作、并且正在硬件设计中使用。

    我们复制了我们的硬件设置、现在我确认我在硬件设置中获得了一致的结果。 光纤链路已打开、但 Linux 报告链路已关闭。

    我附加了更新的寄存器转储。

    /cfs-file/__key/communityserver-discussions-components-files/138/phy_5F00_regs_2D00_link_5F00_up.txt

    我还附加$ IP A 命令的输出。

    $ IP A
    (笑声)
    3:ETH1: MTU 1500 qdisc pfifo_fast 状态下行组默认为 qlen 1000
       链接/以太网00:80:0f:78:03:CD 返修:ff:ff:ff:ff:ff:ff

    此致、
    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    此主题是否有任何新内容? 我是否有机会在一周内得到一些有助于解决问题的回复?

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    很抱歉耽误你的答复。 从寄存器转储中、我们可以确认链路已启动。 寄存器0x01位2为"1"、表示链路已建立。 我不确定为什么 Linux 不将其注册为链接。 通常、MAC 将读取寄存器0x01以查看是否已建立链路、然后指示它是向上还是向下。 调试更高层的 Linux 代码将超出此论坛的范围、但我建议进行一次小检查。 您能否看到接口是否已被'ipconfig'命令禁用?

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    感谢您的回复。 我无法使用 ipconfig、因为它不存在于嵌入式目标上、但我尝试通过 ifconfig 启用该接口、但它没有帮助。

    根据 应用手册 https://www.ti.com/lit/pdf/snla305中的建议,从2020年8月13日下午6:16的回复中描述的“链路启动”状态是通过重新启动自动协商实现 的。 不幸的是、这会导致以下状态:

    1. phy 报告寄存器转储中的“链路已启动”(附 于2020年8月13日下午6:16之后 )。
    2. 目标 Linux 报告"Link is down"。
    3. 无法通过 SFP 接口在目标 Linux 和本地网络上的其他设备之间进行数据通信。
    4. 有时路由器上的"SFP 接口 LED"会关闭。

    如果没有"自动协商重启"、目标 Linux 和 PHY 寄存器都会报告链路已断开。

    我知道可能需要更高级别的层调试。

    问题:

    1. 是否有任何已知的情况下具有相同的链路设置(光纤链路、1Gbps、具有与之前连接的相同驱动程序的 Linux)是否正常工作?
    2. 是否有任何措施可以避免额外的自协商重启、从而使 PHY 识别链路并在 BMSR 寄存器(位2)中报告"链路已启动"?


    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    如何配置 PHY 以进入光纤模式? 您是使用自举电阻器在启动时直接进入光纤模式、还是在不同模式下启动并通过寄存器激活光纤模式。 如果您通过寄存器激活光纤模式、您能否尝试在光纤模式初始化脚本的末尾添加软重启指令。 可通过将0x4000写入寄存器0x1F 来完成软重启。

    关于您的 Q1、我们在 Linux 驱动程序开发时使用 Linux 测试了我们自己的电路板。  

    对于 Q2、BMSR 寄存器位2是锁存低位。 因此、当它从低电平转换为高电平时、需要读取两次。 是否可以更改链路识别算法以读取寄存器两次?  这也可能解释了为什么当您读取寄存器时、它会显示 Link up 但 Linux 目标报告链接 down

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    [引用 user="Aniruddha Khadye"]如何配置 PHY 以进入光纤模式?

    我们使用两种配置方法:

    • 通过搭接引脚:
      • RGMII 至1000BASE-X
      • 信号检测功能
      • 已启用光纤自动协商
    • 通过软件、TI Linux 驱动程序、函数"dp83869_configure_mode":
    static int dp83869_configure_mode (struct phy_device * phydev、
    struct dp83869_private *dp83869){...
    
    
    中定义了每个运行模式的 INIT 序列下面的/*
    *数据表的第9.4.8节。
    *
    RET = phy_write_md (phydev、DP83869_DEVADDR、DP83869_OP_MODE、
    dp83869-> mode);/* dp83869-> mode = DP83869_RGMII_1000_BASE */
    IF (RET)
    回程;
    
    RET = phy_write (phydev、MII_BMCR、MII_DP83869_BMCR_DEFAULT);
    IF (RET)
    返回支架;
    ... 


    我修改了器件树配置、以使用前面一篇文章中附加的编译时常量:

    static int dp83869_hardcoded_init (struct phy_device * phydev){
    struct dp83869_private * dp83869 = phydev->priv;
    
    printk (kern_info "%s\n"、__function__);
    
    dp83869->io_imped=-EINVAL->cl3869;
    clp869_clp8k_output_cldsp =-cl3869_clp8k_clp8k_clp8k_clp8k_clp8k_en_en_en_cldsp;
    dp83869->模式 = DP83869_RGMII_1000_BASE;
    dp83869->IO_IMPEDANCE = 0x10;//50 Ω
    dp83869->port_mirroring = DP83869_port_mirroring_DIS;
    dp83869->RX_FIFO_DEPTH = DP83869_PHYCR_FIFO_DEPTY_4_INDIG_0_DP83869_DP83869_0_NIB_RETURN
    
    
    
    ;DP83869_0_DP83869_DP83869_DP_0_DP83869_NIB_DP83869_DP83869_DP83869_DP_DP_DP_0_DP83869_DIF_DP83869__DP 




    [引用 user="Aniruddha Khadye"]您是使用自举电阻器在启动时直接进入光纤模式,还是在不同模式下启动并通过寄存器激活光纤模式。

    我们同时使用自举电阻器和寄存器配置。 两种方法都设置相同的模式:DP83869_RGMII_1000_BASE。



    [引用 user="Aniruddha Khadye"]如果您通过寄存器激活光纤模式,是否可以尝试在光纤模式初始化脚本的末尾添加软重启指令。 可通过将0x4000写入寄存器0x1F 来完成软重启。 可通过将0x4000写入寄存器0x1F 来完成软重启。 [/报价]


    当然、我已经在"dp83869_config_init"的末尾添加了以下代码:

    static int dp83869_config_init (struct phy_device * phydev)
    {
    ...
    /*执行软重启 reg、value */
    RET = phy_write_md (phydev、DP83869_DEVADDR、0x1F、0x4000);
    IF (RET)
    回程;
    
    printk (Kern_info "%s"-软重启完成、0x%x 写入0x%x\n"、__function__、0x4000、0x1F);
    
    返回 ret;
    } 
    
    

    尚未成功。



    [引述 user="Aniruddha Khadye">关于您的 Q1、我们在开发 Linux 驱动程序时使用 Linux 测试了自己的电路板。 [/报价]

    好的、您能不能共享您的硬件和软件设置、设置电阻器配置、PHY 寄存器转储、具有物理节点和 PHY 驱动器源的器件树?



    [引用用户="Aniruddha Khadye"]Q2、BMSR 寄存器位2是锁存低位。 因此、当它从低电平转换为高电平时、需要读取两次。[/引用]

    • 我修改了 MAC 驱动程序、以允许通过 sysfs 文件读取和 dmesg 进行 PHY 寄存器转储。 如果 PHY 识别链路连接、那么我的假设是否正确、一行中的3个寄存器转储应该读为"link up bit"为1?


      [72935.121913] lan78xx_mdiobus_read:*(0x0004、ANAR) = 0x0580 [72935.122644] lan78xx_mdiobus_read:*(0x0001、BMSR) = 0x6169 //此处 [72935.123344] lan78xx_mdiobus_read:*(0x0000、BMCR) = 0x1140 [72935.124039] lan78xx_mdiobus_read:*(0x0001、BMSR) = 0x6169 //此处 [72935.124658] lan78xx_mdiobus_read:*(0x0009、GEN_CFG1) = 0x1200 [72935.125274] lan78xx_mdiobus_read:*(0x0000、BMCR) = 0x1140 [72935.125887] lan78xx_mdiobus_read:*(0x0001、BMSR) = 0x6169 //此处 [72935.126476] lan78xx_mdiobus_read:*(0x000A、GEN_Status1) = 0x0000 [72935.127069] lan78xx_mdiobus_read:*(0x0000、BMCR) = 0x1140 [72935.127664] lan78xx_mdiobus_read:*(0x0001、BMSR) = 0x6169 //此处 [72935.128267] lan78xx_mdiobus_read:*(0x0005、ALNPAR) = 0x4060 [72935.128951] lan78xx_mdiobus_read:*(0x0001、BMSR) = 0x6169 //此处 [72935.129552] lan78xx_mdiobus_read:*(0x000A、GEN_Status1) = 0x0000 [72935.130179] lan78xx_mdiobus_read:*(0x0005、ALNPAR) = 0x4060
    • 在所连接的 MDIO 通信转储中、我看到 Linux (可能是通用 phy 内核层)多次读取 BMSR。 如果"锁存低电平"链路向上位是标准 PHY 行为、则通用 PHY 层应处理此问题、因为许多其他网卡都可以与通用 PHY 层正常配合使用。


    [引用 user="Aniruddha Khadye"]是否可以更改链接识别算法以读取寄存器两次?


    由于通用 phy 层正用于此目的(至少我认为它是通用 phy)、因此这是不可能的。 如果需要任何非标准行为或任何额外设置、则需要自定义 phy 驱动程序来处理该行为。 我想这就是 TI 适用于 dp83869hm 的 PHY Linux 驱动程序存在的原因。 我不明白为什么在 PHY 以光学模式运行时、TI Linux 驱动程序中没有其他设置:

    static int dp83869_configure_mode (struct phy_device * phydev、
    struct dp83869_private *dp83869){...
    
    
    switch (dp83869-> mode){
    案例 DP83869_RGMII_Copper_Ethernet:
    RET = phy_write (phydev、MII_DP83869_PHYCTRL、
    PHY_CTRL_val);
    IF (RET)
    回程;
    
    RET = phy_write (phydev、MII_CTRL1000、DP83869_CFG1_DEFAULT);
    IF (RET)
    回程;
    
    RET = dp83869_configure_RGMII (phydev、dp83869);
    IF (RET)
    回程;
    中断;
    案例 DP83869_RGMII_SGMII_BRIDGE:
    RET = phy_modify_md (phydev、DP83869_DEVADDR、DP83869_OP_MODE、
    DP83869_SGMII_RGMII_BRIDGE、
    DP83869_SGMII_RGMII_BRIDGE);
    IF (RET)
    回程;
    
    RET = phy_write_md (phydev、DP83869_DEVADDR、
    DP83869_FX_CTRL、DP83869_FX_CTRL_DEFAULT);
    IF (RET)
    回程;
    
    中断;
    案例 DP83869_1000M_media_convert:
    RET = phy_write (phydev、MII_DP83869_PHYCTRL、
    PHY_CTRL_val);
    IF (RET)
    回程;
    
    RET = phy_write_md (phydev、DP83869_DEVADDR、
    DP83869_FX_CTRL、DP83869_FX_CTRL_DEFAULT);
    IF (RET)
    回程;
    中断;
    案例 DP83869_100M_media_convert:
    RET = phy_write (phydev、MII_DP83869_PHYCTRL、
    PHY_CTRL_val);
    IF (RET)
    回程;
    中断;
    案例 DP83869_SGMII_Copper_Ethernet:
    RET = phy_write (phydev、MII_DP83869_PHYCTRL、
    PHY_CTRL_val);
    IF (RET)
    回程;
    
    RET = phy_write (phydev、MII_CTRL1000、DP83869_CFG1_DEFAULT);
    IF (RET)
    回程;
    
    RET = phy_write_md (phydev、DP83869_DEVADDR、
    DP83869_FX_CTRL、DP83869_FX_CTRL_DEFAULT);
    IF (RET)
    回程;
    中断;
    案例 DP83869_RGMII_1000_BASE:
    案例 DP83869_RGMII_100_BASE:
    //此处-空*/
    中断;
    ...
    } 


    这意味着未设置 RGMII 阻抗等。



    [引用 user="Aniruddha Khadye"]这也可能解释了为什么当您读取寄存器时,它显示链接启动,但 Linux 目标报告链接关闭

    不幸的是、这对我来说似乎不太可能、我只有在手动重新启动自动协商(通过 sysfs 文件)时才会启动链路、但此时路由器"光学接口 LED"通常会关闭、PHY 报告"链路建立"。 所有其他情况(无手动自动协商重启)总是以 PHY 报告 BMSR 位2中的"链路断开"结束。

    如果没有额外的自动协商重启、链路伙伴将报告"Link ok"和"Running"、Rx 功率"-5.953 dBm"、

    自动协商

    完成

    速率 1Gbps
    全双工 是的
    TX/Rx 字节 49.9 MIB / 0 B

    RX 字节为0。 TX 字节以大约242bps 的速率增加。



    我发现 PHY 数据表之间存在以下差异、并观察到 PHY 的工作原理:

    • PHY 数据表、9.3.6中断:"为了清除挂起的中断、必须读取两个中断状态寄存器。 在挂起的中断被清除之前、新的中断不能被路由到中断引脚。"
    • PHY 数据表、9.4.2.1 1000BASE-X:"在光纤模式下、速度不是通过自动协商确定的。 链路的两侧必须配置为相同的工作速度。"

    问题:

    1. 如果不使用自动协商来选择链路速度、它的用途是什么?
    2. 是否应该为 RGMII 至1000BASE-X 启用或禁用它?
    3. 我是否正确理解在 RGMII 至1000BASE-X 模式下运行的 PHY 已在 Linux 下进行测试和验证?
    4. 谁应提供可在 RGMII 至1000BASE-X 模式下运行的 PHY Linux 驱动程序?
    5. 在 TI 的 PHY Linux 驱动程序中、我看到仅读取"interrupt_status"寄存器、并且未触摸"FX_INT_STS"寄存器。 是这样吗?
    6. 您能否从 TI 为 DP83869 (或任何最新版本)开发 PHY 驱动程序开始共享硬件和软件设置、自举电阻器配置、PHY 寄存器转储、具有物理节点和 PHY 驱动程序源的器件树?

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    此主题是否有任何新内容? 我是否有机会在一周内得到一些有助于解决问题的回复?

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    如果此主题有任何新内容、请告诉我、我就停留在这里。

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    要回答您的问题、自动协商过程会交换其他信息、如半双工/全双工、远程故障等 在光纤模式下、DP83869HM 不会通过自动协商过程调整速度。 作为一个实验、您可以尝试禁用光纤自动协商以强制其速度达到1Gbps。

    以下是适用于 Linux 代码、头文件和器件树文档的 E2E 主题:  

    在开发驱动程序时、我们使用自举来验证在光纤模式下配置 PHY。 从开发时就很难获取寄存器转储。 但是、E2E 上有一个示例、其中使用 AM5728实现了 DP83869光纤。 以下是 E2E 主题、通过 使用 Linux 驱动程序、禁用自动协商并更改 TX 端的延迟、他们可以让光纤应用程序正常工作:  

    您是否可以分享您的应用原理图? 如果不能将它们放在网上、您可以通过 E2E 私人聊天将其发送给我。

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    感谢您的链接、我仔细查看了您发送的内容。

    我看到有更新的 dp83969 Linux 驱动程序、具有 TX 和 Rx 延迟、自举配置支持和更好的功能。

    不幸的是、症状是相同的:

    *自协商已完成

    *链接关闭

    我确认已读取 BMSR 链路状态两次、通用 phy 驱动程序知道链路状态被锁存为低电平。

    我通过私人聊天附加原理图。

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    我们决定将这种信息附加在这里。

    /cfs-file/__key/communityserver-discussions-components-files/138/PCBA_2D00_02_2D00_03_2D00_02V01_2D00_forTI.pdf

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    感谢您发送原理图、我也接受了您的请求、因此我们可以根据需要通过私人聊天分享更多详细信息。 让我用一天的时间来回顾原理图、我将告诉您我的反馈。

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    我看了原理图、注意到了一些我想澄清的东西。 我看到 VDDIO 通过电阻器 R22设置为1.8V、光纤为3.3V。 来自光纤收发器的信号检测(LOS)引脚以电气方式连接到 PHY、并且也被上拉至 VDDIO。 对于调试实验、是否可以通过 R21尝试 VDDIO = 3.3V。 是否需要光纤收发器数据表中的信号检测引脚上拉? 如果没有、您可以删除它。 请验证 PHY 的信号检测极性是否根据光纤收发器 LOS 引脚的输出极性进行配置。

    此致

    Aniruddha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    我们正在测试您的建议。

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    我们一直在测试您对不同硬件版本的建议、并得出以下一致的结果:

    1) 1)当我使用修改后的内核时、网卡会按预期工作、该内核会更改链接关闭状态以在软件中进行链接(报告虚假链接)。 在前面提到的所有 SD 上拉和 VDDIO 配置中、网卡与修改后的内核一起工作。 过去已经完成了相同的"假链路建立"测试、但使用了错误硬件、因此没有成功。


    2) 2) phy 报告链接关闭并与虚假链接上内核配合使用:

     *当两个 SD 上拉电阻都存在或不存在时、

     *当 VDDIO 设置为1V8或3V3时。


    [引用用户="Aniruddha Khadye"]

    请验证 PHY 的信号检测极性是否根据光纤收发器 LOS 引脚的输出极性进行配置。
    [/报价]

    我确认光纤 收发器的 LOS 引脚为低电平有效。 虽然 PHY 数据表没有实际提到 SD 引脚为低电平有效、但似乎是- SD 引脚为 WPU (弱上拉)类型。

    由于链路状态检测( https://www.ti.com/lit/an/snla305/snla305.pdf?ts=1602503485675 )似乎是最后一个未解决的问题,您是否知道如何将其实施到 Linux 内核或 PHY 驱动程序?

    此致、
    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Aniruddha、

    我想跟进。 有什么新功能吗?

    光纤网卡现在使用"假链路建立"内核运行了一周。

    此致、

    Michal。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Michal、

    我对光纤收发器的 LOS 信号还有一些疑问、下面我的理解是否正确?

    光纤电缆已断开连接、LOS =低电平

    已连接光纤电缆、LOS =高电平

    正如您正确地说过的、PHY 的 SD 引脚需要一个低电平有效输入、因此我只想确保 LOS 信号满足 SD 要求。 为了澄清问题、

    连接光纤电缆时、PHY 期望 SD =低电平

    断开光纤电缆时、PHY 期望 SD =高电平

    应用手册中的建议是实施轮询方法来读取同步和光纤链路状态位。 遗憾的是、实际软件实施将超出此论坛的范围。  

    此致

    Aniruddha