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.

[参考译文] Linux/DP8.3867万IR:dp8.3867万输出125m时钟

Guru**** 2463330 points


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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/625451/linux-dp83867ir-dp83867-output-125m-clock

部件号:DP8.3867万IR

工具/软件:Linux

大家好,我们在Rockchip RK3288平台上使用TI DP8.3867万IRRGZR PHY。  DP8.3867万IR的18针CLK_OUT需要提供125MHz时钟以满足CPU RK3288的规格。

但它总是25MHz CLK-OUT。 我们已将register[12:8](CLK_O_SEL)配置为0x08,0x04,0x00,但CLK-out是相同的25MHz,

然后我回到读寄存器值,它是我的配置值。

那么接下来我该怎么办呢?  谢谢!

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

    为什么CPU需要DP8.3867万IR的CLK_OUT?
    您是否在使用RGMII? 对于RGMII,您只需向MAC发送RX_CLK。
    当PHY处于1G模式时,时钟将为125MHz。

    此致,
    罗斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    rk3288需要phy提供另一个125m时钟,但TX/Rx_clk除外,
    我们使用RGMII接口,phy处于1G操作,
    因此,我们通过配置phy将125m CLK_OUT输出到CPU。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Michael:

    当通过寄存器0x170进行控制时,DP8.3867万能够在频率之间切换。 系统上是否有任何其它PHY具有类似PHY地址?

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

    我们只有一个phy。

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

    您好,Micheal:

    寄存器0x170中位[12:8]的默认值为0x0C,它将输出25MHz的参考时钟。 当这些位更改为0x0B- 0x08和0x03-0x00时,它们将输出125MHz。 在这种情况下,该注册表中的其他部分并不关心,应保持不变。 我在设置中将0x0C0E读取为默认值,并在整个实验中保持较低字节不变(0x0E)。

    此致,

    Aniruddha  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将寄存器0x170中的位[12:8]配置为0x08,0x04,0x00,CLK-out是相同的25MHz,
    是否可以在DP8.3867万演示板中验证此问题?
    谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    1.在将[12:8]配置为0x08后,能否读取并共享寄存器0x0170的寄存器值。

    2.您测量时钟输出的针脚是什么?

    3.请分享示意图。

    此致,
    很棒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.在将[12:8]配置为0x08后,能否读取并共享寄存器0x0170的寄存器值。
    a:结果:0x0c
    2.您测量时钟输出的针脚是什么?
    dp8.3867万引脚18:CLK_OUT
    3.请分享示意图。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    0x0170:0x0c:
    a)我相信您只发送给我更高的字节,更低的字节应为0x0E
    b)较高字节的值,如0x0C:表示“0.11万”:参考时钟(与XI输入时钟同步)为25 MHz。 与引脚上的探头匹配。

    我想,你不能正确地对寄存器进行编程。 鉴于此寄存器位于扩展寄存器空间中,请参阅8.4 .2.1 一节以读取/写入这些寄存器。

    此致,
    很棒
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    +dp8.3867万_phy_fixup,clk_o_sel:0xc0e
    -dp8.3867万_phy_fixup,CLK_O_SEL:0xe
    我的代码如下:
    Val = phy_read_MMD_indirect (phydev,0x0170,DP8.3867万_DEVADDR,phydev->addr);
    printk ("+%s,CLK_O_SEL:0x%x\n",__func__,val);
    Val &=~(0x1f<8);
    //val |=(0x4<8);
    PHY_WRITE_MMD_INDIRECT (phydev,0x0170, DP8.3867万_DEVADDR,phydev->addr,val);
    Val = phy_read_MMD_indirect (phydev,0x0170,DP8.3867万_DEVADDR,phydev->addr);
    printk ("-%s,CLK_O_SEL:0x%x\n",__func__,val);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../LAN_5F00_DP8.3867万IRR.pdf

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

    我相信你在你的计划中没有评论以下内容。

    //val |=(0x4<8);

    此致,
    很棒

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

    125m CLK正常,但phy仍然不起作用。 (0x0170=0xe,时钟输出选择:通道A接收时钟)

     还有其他建议吗? 谢谢。

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

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

    "125m CLK可以,但phy仍然无法工作。 (0x0170=0xe,时钟输出选择:通道A接收时钟)"

    您的意思是,您可以在CLK_OUT上看到125 MHz时钟。

    您能解释一下您现在面临的问题吗?

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

    现在100m还可以,但是1000M就不行了。
    [ 32.35.3548万 ] stmmc_pltfr_fix_mac_speed:将速度固定为100
    [ 32.35.3597万 RGMI] stmmc_pltfr_fix_mac_speed:固定RGMII的速度
    [ 32.35.3621万 ]++++++ Set_RGMII_100M++++++
    [ 32.35.3644万 ] libphy:stmmac-0:00 -链接已打开- 100/已满
    root@rsb4680:/# ping 172.21 .170.48
    Ping 172.21 .170.48 (172.21 .170.48) 56 (84)字节数据。
    来自172.21 .170.48 的64字节:icmp_seq=1 TTL=64 1.11 ms
    来自172.21 .170.48 的64字节:icmp_seq=2 TTL=64 0.506 ms
    来自172.21 .170.48 的64字节:icmp_seq=3 TTL=64 0.567 ms

    [ 197.45.0854万 ] stmmc_pltfr_fix_mac_speed:将速度固定为1000
    [ 197.45.0902万 RGMI] stmmc_pltfr_fix_mac_speed:固定RGMII的速度
    [ 197.45.0927万 ]++++++ Set_RGMII_1000M++++++
    [ 197.45.095万 ] libphy: stmmac-0:00 -链接已打开- 1000/已满
    1|root@rsb4680:/# ping 192.168 .1.1
    Ping 192.168 .1.1 (192.168 .1.1) 56 (84)字节数据。
    来自192.168 .1.2 :ICMP_Seq=1目标主机无法访问
    来自192.168 .1.2 :ICMP_Seq=2目标主机无法访问
    来自192.168 .1.2 :ICMP_Seq=3目标主机无法访问

    我启用了TX_clk/rx_clk延迟,我的配置如下所示:
    Val = phy_read_MMD_Indirect (phydev,DP8.3867万_RGMIICCL,
    DP8.3867万_DEVADDR, phydev->addr);
    Val ||(DP8.3867万_RGMII_TX_CLK_DELAY_EN |)
    DP8.3867万_RGMII_RX_CLK_DELAY_EN);
    PHY_WRITE_MMD_INDIRECT (phydev,DP8.3867万_RGMIICCL,
    DP8.3867万_DEVADDR, phydev->addr, val);

    延迟=(0x7 |(0x5<< DP8.3867万_RGMII_TX_CLK_DELAY));
    PHY_WRITE_MMD_INDIRECT (phydev,DP8.3867万_RGMIIDCTL,
    DP8.3867万_DEVADDR, phydev->addr, delay);

    Val = phy_read_MMD_Indirect (phydev,0x0170,
    DP8.3867万_DEVADDR, phydev->addr);
    Val &=~(0x1f<8);
    PHY_WRITE_MMD_INDIRECT (phydev,0x0170,
    DP8.3867万_DEVADDR, phydev->addr, val);
    Val = phy_read_MMD_Indirect (phydev,0x0170,
    DP8.3867万_DEVADDR, phydev->addr);

    1000M RGMII接口的波形为bmp文件

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

    您好,

    是否在用于ping的Rx或Tx路径上发现问题? 您是否能够看到您的对等设备收到ping命令?

    要在RGMII接口上配置延迟,必须计算Tx和RX路径上路由带来的延迟,并且可以按照上述方法使用寄存器0x0086引入额外的延迟。 有关如何计算延迟数和计算,请参阅下面的应用手册  

    或者,您可以尝试几个数字来查看是否通过接口获取数据?

    此致,

    很棒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,您使用的VIO是什么? 这似乎是围绕1.8 v

    此致,
    很棒
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将VIO修改为1.8V,没问题,谢谢