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.

[参考译文] AM6442:从应用中配置 PHY 寄存器(自动协商)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1521068/am6442-configure-phy-register-auto-negotiation-from-application

器件型号:AM6442
主题:DP83869中讨论的其他器件

工具/软件:

尊敬的团队:

我的客户正尝试从 R5F 内核(FreeRTOS)配置 PHY 寄存器。  

他们尝试使用 Enet LLD IOCTL 以及 EnetPhy_writeReg 更改 PHY 寄存器值、但这两种方法都没有成功。  

例如、他们尝试:

  • 在链路建立状态期间、将自协商寄存器位(BMCR 寄存器位12)从打开更改为关闭
    • 结果类似于复位(即发生链路断开和链路建立、自动协商值 保持开启)
  • 将链路断开状态期间同一自动协商寄存器位从开更改为关
    • 他们在更改后检查了自动协商寄存器值、设置为 OFF、但在2-3秒后更改为 ON。

我将 通过电子邮件共享他们的示例项目、供您参考(在分配 E2E 后)、因此请 Ping 此主题并回复。

一些关于他们为何要从应用程序中更改 PHY 寄存器的背景信息:

  • 他们正在开发的设备将连接到不支持自动协商的旧网络设备、因此他们希望根据所连接的设备打开/关闭此功能
    • 是否有其他方法可以在运行时通过应用程序控制自动协商开/关?

此致、

Mari Tunnoda

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

    为方便起见、添加一些附加上下文和参考。

    电路板: AM64x EVM

    MCU+SDK: v10.00.00.20

    PSDK (Linux): v10.00.07.04

    关于 DP83869 PHY 上的 BCMR 寄存器:

    • 默认情况下、自动协商位设置为(开启)、BMCR 寄存器设置为0x1140、但用户希望将其关闭、以便将0x140写入 BMCR 寄存器

    关于 R5F 应用:

    • 它们具有 CLI 程序、用于写入/读取 PHY 寄存器值、如下所示
    • 他们尝试了两种模式(使用 ENET_IOCTL 和 EnetPhy 驱动程序 API)

    • Enet_IOCTL 用于读取寄存器值:
    • Enet_IOCTL 用于写入寄存器值:
    • 用于读取寄存器值的 EnetPhy 驱动程序 API:
    • 用于写入寄存器值的 EnetPhy 驱动程序 API:

    他们检查了获取和设置寄存器值时是否有网络连接。

    在它们未连接到网络的情况下、结果如下:

      • 最初、BMCR 值读取为0x1140
      • 它们尝试使用将 BMCR 值更改为0x140 Enet_IOCTL
      • 更改后、它会保持0x140大约2~3秒、但返回到原始值(请检查 AutoNeg_EN 位)
      • 最初、BMCR 值读取为0x1140
      • 它们尝试使用将 BMCR 值更改为0x130 EnetPHY API
      • 更改后、它会保持0x140大约2~3秒、但返回到原始值(在这种情况下、有时它们可以使用 CLI 多次读出设置值0x140)

    在他们连接到网络的情况下、结果如下:(已连接以太网路由器)

      • 最初、BMCR 值读取为0x1140
      • 尝试使用 ENET_IOCTL 将 BMCR 值设置为0x140
      • 链路断开、发生链路接通
      • 返回到原始0x1140值
      • 使用 EnetPHY API 时生成类似的结果

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

    尊敬的 Nitika:

    我看到您已被分配到该主题   、并通过电子邮件与您共享了 TI 驱动器链接。

    此致、

    Mari Tunnoda

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

    尊敬的 Mari:

    谢谢您的信息,我会检查 它,并得到你.

    此致、

    Nitika.

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

    尊敬的 Mari:

    我已经 了解了示例代码和 PHY 驱动程序功能。 当前例程触发链路复位、从而使 PHY 再次完成链路建立过程。 但是、由于 PHY 句柄未更新为新的链路配置、因此 PHY 仍将在与开始时采用相同的配置。  

    当前的 PHY 驱动程序不支持在运行时直接更新链路配置、因为 MAC 端口链路配置也应与 PHY 链路同步。 因此、如果链路重新协商时间没有问题、可以按照以下例程操作:

    更新链接配置:

    1. 从应用程序触发链路断开事件:这应包括将 macport 状态设置为禁用
    2. 使用"ENET_PER_IOCTL_CLOSE_PORT_LINK" IOCTL 关闭 PHY
    3. 将最初在"EnetApp_enablePorts"中配置的 linkCfg 更新为所需配置。
      此时应具有 PHY 链路配置和 MACPORT 链路配置。 请确保它们保持不变。
    4. 使用 IOCTL"CPSW_ALE_IOCTL_SET_PORT_STATE"将 MACPORT 状态设置为转发
    5. 现在、使用"ENET_PER_IOCTL_OPEN_PORT_LINK"以更新的配置初始化 PHY 驱动程序。

    这是在不更改驱动程序的情况下执行此操作的首选方法。 如果链路重新建立时间很关键、则可以考虑使用使用 "enetExtPhy.c"的外部 PHY 管理。 但这不是一种状态机实现、而是在循环中执行。 您可以在 PHY 句柄配置中添加额外的 API 来更新已更新参数的详细信息。 通过在示例代码中触发 PHY 寄存器写入之前调用此 API、可以实现相同的功能。 但这些更改以后在 MCU Plus SDK 中不会保持不变

    谢谢。此致、
    Teja。