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.

[参考译文] MCU-PLUS-SDK-AM243X:自定义 PHY -意外的状态转换

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1195799/mcu-plus-sdk-am243x-custom-phy---unexpected-state-transition-from

器件型号:MCU-PLUS-SDK-AM243X

尊敬的 TI 专家:

我们在固件中使用自定义 PHY 驱动程序(使用 SDK 8.4.0.17与 lwip)、并且我们在以太网端口没有与其他以太网端口的链接时遇到意外行为。

我们需要在第一次复位后配置链路/操作 LED、以使这些指示灯正常工作。 但对于未连接的以太网端口、我们观察到~ 8秒后出现短暂闪烁。

在启用 PHY 状态的日志记录后、我们发现似乎有一个自动协商超时、这会导致一个复位、然后是该 PHY 端口的新配置。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[17222] DebugP: EnetPhy_phyTimeout: PHY 3: timeout has occurred
[17222] DebugP: EnetPhy_setNextState: PHY 3: NWAY_WAIT -> FOUND (0 ticks)
[17322] DebugP: EnetPhy_setNextState: PHY 3: FOUND -> RESET_WAIT (10 ticks)
[17422] DebugP: EnetPhy_setNextState: PHY 3: RESET_WAIT -> ENABLE (0 ticks)
[17522] DebugP: EnetPhy_enableState: PHY 3: enable
[17524] DebugP: EnetPhy_enableState: PHY 3: req caps: FD100 HD100 FD10 HD10
[17524] DebugP: EnetPhy_enableState: PHY 3: PHY caps: FD100 HD100 FD10 HD10
[17524] DebugP: EnetPhy_enableState: PHY 3: MAC caps: FD1000 FD100 HD100 FD10 HD10
[17524] DebugP: EnetPhy_enableState: PHY 3: refined caps: FD100 HD100 FD10 HD10
[17524] DebugP: EnetPhy_enableState: PHY 3: PHY is NWAY-capable
[17524] DebugP: EnetPhy_enableState: PHY 3: setup NWAY
[17524] DebugP: EnetPhy_setupNway: PHY 3: NWAY advertising: FD100 HD100 FD10 HD10
[17524] DebugP: EnetPhy_setupNway: PHY 3: config is needed
[17525] DebugP: EnetPhy_setupNway: PHY 3: restart autonegotiation
[17525] DebugP: EnetPhy_setNextState: PHY 3: ENABLE -> NWAY_START (50 ticks)
[17622] DebugP: EnetPhy_setNextState: PHY 3: NWAY_START -> NWAY_WAIT (80 ticks)
[25722] DebugP: EnetPhy_phyTimeout: PHY 3: timeout has occurred
[25722] DebugP: EnetPhy_setNextState: PHY 3: NWAY_WAIT -> FOUND (0 ticks)
[25822] DebugP: EnetPhy_setNextState: PHY 3: FOUND -> RESET_WAIT (10 ticks)
[25922] DebugP: EnetPhy_setNextState: PHY 3: RESET_WAIT -> ENABLE (0 ticks)
[26022] DebugP: EnetPhy_enableState: PHY 3: enable
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在该 SDK 的文档(AM243x MCU+ SDK:以太网 PHY 集成指南)中、我找不到有关超时和该状态转换的信息。

增加 nwayWaitStateTicks 可能是某种变通办法、但我应该配置什么来完全禁用自动协商超时?

Fullscreen
1
ptPhyCfg->timeoutCfg.nwayWaitStateTicks = 0xFFFFFFFF;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

此致

Alex

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

    尊敬的 Alex:

    我们已经开始研究这个问题。 让我在星期四前回来

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

    您能否检查以下内容:

    在文件 examples/networking/lwip/enet_lwip_cpsw/test_enet.c 中

    输入功能  EnetApp_initLinkArgs() check for below line

    phyCfg->phyAddr and tell me what is the value of phyCfg->phyAddr.

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

    您好 Nilab、

    该值为3或7、具体取决于EnetApp_initLinkArgs()被调用的端口(ENET_MAC_PORT_1或 ENET_MAC_PORT_2)。

    只需澄清一点:我们在定制固件中使用 lwip、在我们自己的硬件上使用定制 PHY (TI DP83826)。 我们不使用 EVM 上的示例进行测试。

    此致

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

    尊敬的 Alex:

    在这里要澄清的是、您是否说您没有连接电缆的 PHY 在8秒后启动并运行?

    您还想禁用该 phy 还是要使用它? 您是从驱动程序同时启用 phy 还是仅启用一个 phy?

    此外、从打印件中、"EnetPhy_phyTimeout" PHY 3似乎未使用自定义 phy 驱动程序。 打印内容似乎指向内部 phy 驱动程序。

    第一个端口(连接的一个)工作正常。

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

    您好 Nilabh、

    这两个端口都由我们的定制 PHY 驱动程序实现控制。 PHY 7已连接并正在运行、PHY 3未连接、每8秒闪烁一次链路/活动 LED。

    未连接的端口3未运行、但每8秒复位一次、这是自协商超时的结果。 在我们的情况下,这会导致链路/动作 LED 闪烁,因为 LED 在复位后亮起,并且在我们的自定义 PHY 驱动程序的 config()调用后正确配置 LED。

    我想知道自协商超时后为什么会复位、我在 PHY 驱动程序集成文档中找不到这样的状态转换。 我想完全禁用自动否定超时。

    我的日志中的打印输出来自 TI EnetPhy 层、其中我们的定制 PHY 驱动程序由 hPhy->HDRV 指针引用

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

    感谢 Alex 澄清了我的问题。

    根据初始观察结果:

    phy statemachine   ENETPHY_FSM_State_Reset_Wait 中的以下状态。

    它会调用   EnetPhy_resetWaitState、在其他情况 下、它会调用 EnetPhy_phyTimeout。

    根据 phy 的不同、它不是它的调用  

    ENETPHY_FSM_State_Link_Wait (捆绑)
    ENETPHY_FSM_State_Found
    您能告诉我 phy 是否处于捆绑模式吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    phy 未处于捆绑模式,因为我注意到,否则将不会调用我们 phy 驱动程序的 config()函数

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

    尊敬的 Alex:

    如果 phy 未处于捆绑模式、则会发生超时、即 link_wait

    以删除超时  

     功能实现中

    静态 EnetPhy_linkWaitState (EnetPhy_handle hPhy)、您可以删除以下行:

    State->timeout--
    这样您就不会发生超时。
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Nilabh、

    我想如果按照您的建议从 EnetPhy_linkWaitState()中删除您建议的行,将无法解决我的问题,因为我观察到状态从 Nway 等待变为已找到,而不是从 link_wait 变为在我的日志中找到的状态。

    当然,EnetPhy_nwayWaitState()函数中也有类似的行,我可以删除,但这不是我的初始意图。

    我本希望在不修改和重新编译 SDK 代码的情况下提供解决方案(例如、将超时值初始设置为0、禁用超时处理)、这是我打开此 e2e 票证的主要原因。

    我想知道为什么会有这样一个从 Nway 等待到发现的状态转换、尽管没有记录这一点。

    此致

    Alex

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

    尊敬的 Alex:

    [引用 userid="3470" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1195799/mcu-plus-sdk-am243x-custom-phy---unexpected-state-transition-from/4518240 #4518240"]我本希望在不修改和重新编译 SDK 代码的情况下获得解决方案(例如将超时值初始设置为0并禁用超时处理),这是我打开此 e2e 票证的主要原因。

    遗憾的是、我们不支持禁用 enetphy statemachine 中自动协商的超时。 因此、我们将添加此支持、这意味着、如果您想在当前 SDK 上获取补丁(在新 SDK 发布之前)、可能需要重新编译 SDK。

    [引用 userid="3470" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1195799/mcu-plus-sdk-am243x-custom-phy---unexpected-state-transition-from/4518240 #4518240"]

    我想知道为什么会有这样一个从 Nway 等待到发现的状态转换、尽管没有记录这一点。

    [/报价]

    在 AM243x MCU+ SDK:以太网 PHY 集成指南文档 中,未提及自动协商未完成或未在 PHY 中启动时的错误情况。 在驱动程序实现中、在这些情况下、驱动程序标记为超时并移至"State_Found"、其中驱动程序从开始重新启动过程(PHY 复位)。  
    因此、根据实施方案、以下状态转换是可能的-
     Nway 开始->已找到、Nway 等待->已找到、LINK_WAIT ->已找到。
    状态转换的文档中缺少这些转换。 我们将在 SDK 中解决此问题。