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.

[参考译文] AM6548:AM6548 + DP83867IR 在 BOOT 时锁定自动转发流量

Guru**** 2897200 points

Other Parts Discussed in Thread: AM6548, DP83867IR

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1638405/am6548-am6548-dp83867ir-lock-up-with-autoforwarded-traffic-on-boot

器件型号: AM6548
主题中讨论的其他器件: DP83867IR

我有一个奇怪的场景、我希望有一些输入。 我们有基于 AM6548 的定制电路板、该电路板设置为网络监听器、作为其功能的一部分。 它正在使用 08.06.00.47 Linux SDK。 所有 PRU 实例都在电路板上进行了拆分、所有实例都使用 DP83867IR PHY 通过 RGMII 连接到 PRU。 所有 PRU 都加载了默认的 PRU 以太网固件 (SDK 08.06.00.47)、唯一的修改是 PRU 以太网驱动程序已被修改、以初始化正确的寄存器设置、使得每个 PRU 自动转发流量(因此 PRU0 自动转发到 PRU1,反之亦然 — 通过寄存器 0x0Bx32000、0x0Bx32010、0x0Bx32004、0x0Bx32014 和每个 PRU 实例设置)。 只要一切都已启动、这就可以正常工作、然后我插入以太网电缆。 但是、如果我在启动时插入了以太网电缆、一旦加载了 PHY 驱动程序并启动了 PRU 固件、某种东西必须进入奇怪的状态、一个通道永远不会自动协商到 100Mb 连接、它就在那里偶尔会使 LED 一直闪烁。 另一个通道最终降至 10Mb、有时仅位于该通道、有时也会闪烁 LED。 此时、如果我拔下并重新插入电缆、则无法恢复。  

恢复的唯一方法是重新启动 PRU 固件(关闭接口,然后再次进行备份 — IP LINK set ethx down,然后再打开)。 这将恢复一切、网络连接稳定、自动转发正常工作、我可以拔下并重新插入以太网电缆、每次都能正常工作。 这种恢复在 100%的时间内工作。 对于我在这里进行的测试、自动转发的以太网网络只是从我的笔记本电脑连接到我可以远程连接到的另一台台式机。  

此处有两个有趣的数据点:

  1. 如果我的 EtherCAT 网络的 PRU 自动转发了 1ms 周期时间、那么我永远不会遇到此问题。 在启动时、它每次都成功地自动转发、并且永远不会锁定(至少在我的测试中-可能存在一个边缘情况,它仍然可以锁定)。 这与以太网网络形成鲜明对比、以太网网络在我的测试中 100%锁定。  
  2. 如果我执行软重启(就像在控制台中键入 reboot 命令一样)、则不会发生锁定。 它仅在进行下电上电时才会发生。

不知道该怎么做。 当然、我可以通过编写 ip link set ethx down 脚本以及在启动时运行的 up 命令来解决这一问题、但这很奇怪。 我宁愿解决根本原因、但不完全确定从哪里开始。 对这里可能发生的事情有什么想法吗?

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

    我更新了一个以添加到该文件中。 结果表明、只有当网络的另一侧设置为仅 100Mb 时、才会发生这种情况。 因此、如果我的笔记本电脑和其他台式机中的网络适配器设置为仅接受 100Mb、则会出现此问题。 如果我对它们启用自动协商、则不会出现问题。 如果我只有其中一个设置为 100Mb、而另一个设置为自动协商、则 只有连接到强制 100Mb 连接的 PRU 以太网存在问题。 要解决此问题、我必须禁用*Other* PRU 以太网、然后重新启用。 所以在我看来,这个问题是与 PHY *和*自动转发的某种初始化有关的。 我觉得很奇怪、重新启动两个 PRU 可以解决这个问题。

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

    您好、

    我想确认几件事。 器件上有 R5 内核、但是看起来您是否将 Linux 实用程序与 ICSSG 接口配合使用?  

    通常、对于 Linux、PHY 设置为自动协商? 此外、在上电时您提到的 100Mbps、PHY 是否未处于自动协商模式? 当链路挂起时、ethtool 报告了什么?

    此致、

    Schuyler

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

    是的、我没有将 R5 内核用于任何目的。 它们应该处于空闲状态。  

    AM6548 板上的 PHY 设置为自动协商。 虽然连接到我的主板的两台 Windows 计算机的最大速度设置为 100Mbps。 如果将它们设置为自动协商、则问题消失。 启动时、两个接口卡住的情况如下所示:

    eth4 的设置:
    支持的端口:[ TP mii ]
    支持的链路模式:10BaseT/Full
    100BaseT/Full
    1000BaseT/Full
    支持的暂停帧使用:否
    支持自动协商:可以
    支持的 FEC 模式:未报告
    广播的链路模式:100BaseT/Full
    广播的暂停帧使用:否
    广播的自动协商:是
    广播 FEC 模式:未报告
    链路伙伴广播的链路模式:10BaseT/Half 10baseT/Full
    100BaseT/Half 100BaseT/Full
    链路伙伴广播的暂停帧使用:对称
    链路伙伴广播的自动协商:是
    链路伙伴广播的 FEC 模式:未报告
    速度:100MB/s
    双工:全双工
    自动协商:打开
    master-slave cfg:首选从器件
    主从状态:从器件
    端口:双绞线
    PHYAD:3.
    收发器:外部
    MDI-X:未知
    当前消息级别:0x00007fff (32767)
    如果 rx_err tx_err tx_queuted intr tx_done rx_status pktdata 硬件 wol、则 DRV 探头链路计时器 ifdown
    检测到链路:是

    eth3 的设置:
    支持的端口:[ TP mii ]
    支持的链路模式:10BaseT/Full
    100BaseT/Full
    1000BaseT/Full
    支持的暂停帧使用:否
    支持自动协商:可以
    支持的 FEC 模式:未报告
    广播的链路模式:100BaseT/Full
    广播的暂停帧使用:否
    广播的自动协商:是
    广播 FEC 模式:未报告
    速度:10MB/s
    双工:半双工
    自动协商:打开
    master-slave cfg:首选从器件
    主从状态:未知
    端口:双绞线
    PHYAD:0
    收发器:外部
    MDI-X:未知
    当前消息级别:0x00007fff (32767)
    如果 rx_err tx_err tx_queuted intr tx_done rx_status pktdata 硬件 wol、则 DRV 探头链路计时器 ifdown
    检测到链路:否

    在这种情况下、eth4 能够实现稳定的 100Mb 连接、而 eth3 偶尔会使链路 LED 闪烁、就像它尝试协商一样、但永远无法获得连接。 仅当另一侧的计算机设置为 100Mbps 最大速度时、才会再次发生这种情况。

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

    您好、

    感谢 ethtool 输出。 eth4 能够显示链路伙伴广播的链路模式、但 eth3 不能。 我同意您认为 PHY 存在问题的那一刻。 至少、eth3 输出会显示失败的 AutoNeg 序列、链路速度最终达到 10Mbps 和半双工。 eth3 也无法显示链路伙伴设置。  

    目前、如果两个端口在两台计算机之间切换、会发生什么情况? eth4 是否变为 10M 且 eth3 获得比较稳定的链路? 我尝试查看 eth3 上的 PHY 是否存在问题。

    您是否尝试过在 eth3 上使用 ethtool 将/接收设置为 100Mbps、全双工并关闭自动协商?

    此致、

    Schuyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只有在另一侧的计算机设置为 100Mbps 的最大速度时、才会再次发生这种情况。

    https://www.ti.com/document-viewer/DP83867E/datasheet#GUID-6C5020C1-7364-4558-B16D-B88543CABB4E/TITLE-SNLS484SNLS484547 您能尝试在 PHY 中设置扩展 FD 功能位吗

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

    首先回答您的问题、如果我在 eth3 和 eth4 之间交换电缆、则没有任何变化。 如所示、在上述场景中、eth4 能够以 100mb 再次连接、而 eth3 根本无法连接。 有时 eth4 只能以 10MB 连接、而 eth3 不能连接。 它似乎有点随机。 只要处于 10Mb 连接处、就会出现以下消息“TI DP83867 b132400.MDIO:03:从协商速度 100Mbps 到实际速度 10Mbps 发生下移、请检查布线!“

    在您的建议下,我尝试使用以下命令在 eth3 和 eth4 上强制使用 100Mb 连接:

    ethtool -s eth3 速度 100 双工全自动协商关闭
    ethtool -s eth4 速度 100 双工全自动协商关闭

    有趣的是 、这解决了问题、并且网络能够正常运行。 因此、至少在这种情况下、一切都是可恢复的。

    我也尝试 使用 phytool 在 PHY 中设置扩展 FD 能力位、但似乎没有任何区别。  

    此外、这似乎是一个与时序相关的 问题。 我忘记了我在其他一些测试中使用的主板、我有 CPU 1-3 与 Linux 内核隔离、并使用以下 uenv 选项“isolcpus=1-3 noz_full=1-3 rcu_nocbs=1-3 rcu_nocb_poll irqaminity=0 “。 当然、这会使电路板启动速度变慢。 如果我取消这种隔离并让内核有权访问所有内核、则问题不再存在。 当 CPU 被隔离时、时序差异很大、而不是被隔离时。 我观察到第一个 PRU 联机到最后一个 PRU 所需时间存在~3s 差异。

    所以不管出于什么原因,似乎随着慢的启动速度,自动协商似乎永远不起作用. PHY 驱动程序或 PRU 驱动程序/固件中是否存在某种超时? 我不确定是否看到慢速启动时序与自动协商之间的连接不起作用。 感谢您的帮助!

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

    我想在这里添加一些内容。 我们一直在查看它。 即使启动速度快、我也能够创建一种 PHY 似乎完全锁定的场景。 当我拔下以太网电缆时、链路 LED 保持亮起、当 我从锁定的 PHY 执行任何寄存器读取时、每个寄存器读取 0x796D。 有时我能够拔下电缆、最终 PHY 再次做出响应、但大多数情况下、它需要进行下电上电。