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.

[参考译文] TMS320F28388D:让 RMII 正常运行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1282149/tms320f28388d-getting-rmii-to-work

器件型号:TMS320F28388D
主题中讨论的其他器件:DP83640

您好!
我们有一个 TMS320F28388D controlCARD (具有使用 MII 接口的板载 PHY)、一个带 TMS320F28388D 的定制 PCB 和一个带 RMII 接口的 TI DP83640 PHY。 我无法使后者正常工作、例如使用 ethernet_ex4_ptp_basic_master。 您能帮助我对 RMII 进行必要的更改并调试它不工作的原因吗?

我所做的:

  • 首先、我在 controlCARD 上运行了示例"Ethernet_ex4_ptp_BASIC_MASTER"。 我只需在 cm_common_config_C28x 项目中定义宏"以太网"。 正如预期的那样、我每秒可以在 Wireshark 中看到 PTP 消息。
  • 然后、我修改了 RMII 定制硬件的引脚:

       //
       //为以太网配置 GPIO。
       //

       //
       // MDIO 信号
       //
       GPIO_setPinConfig (GPIO_105_ENET_MDIO_CLK);       // PHY:MDC
       GPIO_setPinConfig (GPIO_106_ENET_MDIO_DATA);      // PHY:MDIO

       //
       //仅将其用于 RMII 模式
       GPIO_setPinConfig (GPIO_73_ENET_RMII_CLK);        //PHY:X1

       //
       //RMII 信号
       //
       GPIO_setPinConfig (GPIO_75_ENET_MII_TX_DATA0);    //PHY:TXD_0
       GPIO_setPinConfig (GPIO_122_ENET_MII_TX_DATA1);   //PHY:TXD_1

       GPIO_setPinConfig (GPIO_118_ENET_MII_TX_EN);      //PHY:TX_EN

       GPIO_setPinConfig (GPIO_114_ENET_MII_RX_DATA0);   //PHY:RXD_0
       GPIO_setPinConfig (GPIO_115_ENET_MII_RX_DATA1);   //PHY:RXD_1
       GPIO_setPinConfig (GPIO_113_ENET_MII_RX_ERR);     //PHY:RX_ERR
       GPIO_setPinConfig (GPIO_112_ENET_MII_RX_DV);      //PHY:CRS/CRS_DV

  • 此外、我必须定义 USE_20MHz_XTAL、因为这是我们的定制板具有的功能。
  • 最后、我更改了以太网_ex4_ptp_basic_master 中的此行
    initInterfaceConfig.phyMode = Ethernet_SS_PHY_INTF_SEL_RMII;
    并添加了
    initInterfaceConfig.clockSel = Ethernet_SS_CLK_SRC_internal;

通过 SMI、我可以验证是否协商了100Mbit 全双工链路(有效链路标志变为高电平)。 我还可以测量 TX_EN、TXD_0、TXD_1 (示例预期每秒一次)和 RMII_CLK/X0上的活动。 但是、唉、Wireshark 中看不到任何内容。
将代码从 MII 迁移到 RMII 时、我是否错过了一些事情?
可以使用 EMAC 的任何寄存器来调试问题吗?
我们检查了 PHY 的所有搭接引脚、并通过 SMI 验证了配置(RMII 模式、RMII 从时钟模式)。

如果有任何提示,我们将不胜感激。
此致、Nils

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

    Nils、

    从软件方面来看,对 RMII 所做的更改似乎是正确的。   

    1.您验证了 RMII 时钟吗? 您已将其配置为内部。  确保相应地设置时钟源和分频器以提供50MHz 时钟。

    2.是否能够读取/写入 PHY 寄存器?  请在 PHY 寄存器 BMSR 中检查链路状态。

    此致

    西达尔特

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

    感谢您发送编修。 是的、我们已验证 C2000在 GPIO_73上输出50MHz。 我没有更改示例中的时钟源和分频器。 我描述了我所做的所有与时钟相关的更改(所有其他内容都保留在原始示例中)、这些更改是 USE_20MHz_XTAL 和 ETHERNET_SS_CLK_SRC_INTERNAL 填充。

    另外、我们可以通过 SMI 读取 PHY 寄存器、并在 BMSR 的链路状态中获取有效链路。 我想如果时钟不正确、这是不可能的?

    您有进一步的想法吗?

    此致、Nils

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

    Nils、

    此时、我没有任何其他输入。  您对 RMII 所做的更改似乎没有问题。  

    我将此问题转发给 PHY 团队、看看他们是否有任何输入或建议。

    此致

    西达尔特

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

    嗨、Nils:

    我在深夜看到了这个,没有时间进行全面的审查,请允许另一天去。 明天会再次响应。

    此致、

    阿尔瓦罗

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

    好的、谢谢。 非常感谢您的帮助。

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

    嗨、Nils:

    在过于深入探究任何内容之前、我们可以对 PHY 进行几次健康检查吗?

    • 探测 CLKOUT 引脚
      • 这就像看到心跳、预期的输出是25 MHz 方波。
    • 链接
      • 是否正在获取链接? 您可以通过读取寄存器0x1来看到链接。

    此致、

    阿尔瓦罗

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

    您好 Alvaro、

    当然可以! 这是来自 CLKOUT 的输出。
    是的、正如我在第一篇文章中所写的、我们可以读取 SMI 寄存器、 远近 就会出现问题。

    此致、
    尼尔斯

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

    嗨、Nils:

    我想指出的是、DP83640是一种较旧的器件、其支持程度非常有限。 我这样说是因为我无法访问包含该器件的电路板、并且无法验证器件的某些行为。

    我 可能忽略了一些内容、您是否要将 PHY 配置为 RMII 从模式? 如果是这样的话、PHY 需要一个50 MHz 输入时钟、这将使我从 CLKOUT 中等待一个50 MHz 波形。 您是否能够确认输入时钟为50 MHz?

    无论如何、您都可以从 CLKOUT 测量波形、这意味着 PHY 开启。 当 PHY 建立链路 但没有数据吞吐量时、通常表明 MAC 接口中存在连接问题。 PHY 和 MAC 可能无法正常通信。 我们可以通过将 PHY 置于 MII 环回模式来测试此情况。 您必须对 TMS320F28388D 上的 MAC 进行编程以开始传输数据并查看它是否收到返回的数据。 如果接收到数据、则 MAC 接口正常、问题出在其他地方。   有关环回配置的更多信息(需要寄存器写入访问)、请参阅 DP83640数据表中的第5.3.5节内部环回。  

    此致、

    阿尔瓦罗

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

    谢谢您的提示。
    是的、PHY 配置为 RMII 从模式(我们已验证它的 X1引脚上从 Delfino 接收到50MHz 时钟)。
    根据您的提示、我启用了 PHY 内部回送、这样产生了一个非常有趣的结果:Rx_Multicast_Packets_Good 计数器对发送和循环的数据包进行计数而不会丢失。 因此、RMII 通信无法(完全)中断。
    该 PHY 还具有远程环回模式。 如果我启用它、从连接的 Windows PC 发送到 PHY 的数据包在 Wireshark 中会显示加倍-它们全部由 PHY 环回-因此我假定 PHY 的以太网侧也在工作。
    令我们感到困惑的是、为什么在两个方向上都没有数据包在 RMII 侧和 PHY 的以太网侧之间传递。 它看起来像"隔离模式"、但该模式当然是禁用的。
    明天我们将对 RMII 信号进行一些测量、比较中的波形(尤其是、ENET_RX、RMII CLK、RX_DV)、其中 a)从正在工作的以太网器件接收数据包(不工作)以及 b)以环回模式接收数据包(工作)。
    如果能得到更多的提示,我们将不胜感激。 此致、Nils

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

    谢谢 Nils。

    我等待这些波形、并咨询我的团队以了解进一步的调试策略。

    此致、

    阿尔瓦罗

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

    测量结果让我们找到了解决方案:100Mbit (50MHz)的时钟正确、位 RX0和 RX1信号太慢。 因为 MAC 在10Mbit 模式下运行 。 MAC_Configuration 寄存器中链路速度的默认设置为10Mbit、driverlib-examples 不会触摸任何位置的该位(FES)(关于改进的强烈建议!)。 我想在使用 controlCARD (MII 模式和外部时钟、与我们的 RMII 模式和内部时钟不同)时、没有必要改变这个位、这就是为什么"没有人"注意到的原因。

    因此、如果任何其他人想要使用 RMII 模式和内部时钟:

    • 从 TI 提供的示例开始、
    • 在 CPU1代码中更改 RMII 引脚的引脚配置
    • 将此配置添加到 CM 代码中:
      initInterfaceConfig.phyMode = Ethernet_SS_PHY_INTF_SEL_RMII;
      initInterfaceConfig.clockSel = Ethernet_SS_CLK_SRC_internal;
    • 最后(这是我们缺失的位 FES):
      #define ETHERNET_MAC_CONFIGURATION_100Mbit 0x4000U
      Ethernet_setMACConfiguration (EMAC_BASE、ETHERNET_MAC_CONFIGURATION_100Mbit);
      (当然、这必须与 PHY 设置相匹配)