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.

[参考译文] TM4C1292NCPDT:具有 RMII 接口的 MAC 至 MAC 连接

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1422451/tm4c1292ncpdt-mac-to-mac-connection-with-rmii-interface

器件型号:TM4C1292NCPDT

工具与软件:

您好!

我们正在尝试将 MCU 连接到以太网交换机 IC 及其 RMII 端口。 根据开关 IC 的数据表:

RMII 接口仅支持 RMII MAC 模式。 当将接口连接到另一 MAC 时、
RMII 引脚必须以控制引脚、时钟引脚和数据引脚方向匹配的方式进行交叉连接
两端。 在此配置中、还可以在 MAC 与 MAC 模式下运行

但我不确定 MCU 是否可以在 MAC 到 MAC 的连接中工作。

我在论坛中找到类似的主题:

e2e.ti.com/.../am335x-rmii-direct-connection-between-two-devices

如果 MCU 的 MAC 设计与 AM335类似、我会相信这会奏效。 或者、您知道这方面是否有成功案例?

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

    嗨、天磊

     我认为从理论上讲、这是可能的。 TM4C129 MCU 上的 EMAC 控制器支持使用 RMII 将 MCU 连接到交换机。 交换机将处理一个 MAC 如何与也通过 RMII 连接到交换机的另一个 MAC 通信。 不过、我不熟悉您的开关。 我要强调的是、TM4C129不知道其他 MAC 如何连接到开关、无论是在 RMII 模式还是通过 PHY 模式下。  

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

    谢谢 Charles。

    您提到:

    TM4C129 MCU 上的 EMAC 控制器支持使用 RMII 将 MCU 连接到交换机

    这是肯定的、如果开关可以假设是 RMII 另一侧的 PHY。

    我想澄清的是、由于 RMII 的另一侧(开关侧)不是 PHY、而是另一侧 MAC (开关无法在 RMII 接口后的 PHY 模式下工作)、因此来自开关 MAC 的 TX-EN 信号需要路由到 MCU 的 EN0RXDV。

    这意味着 MCU 必须接受来自另一个 MAC 的 TX-EN 信号作为 CRS_DV。 由于这两个信号不相同、EMAC 控制器是否会容忍这种情况?

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

    尊敬的 Tianlei:

     尽管下图适用于 RGMII MAC2MAC 连接、但 RMII 也应该相同。 有关 MAC2MAC 连接、请参阅该应用手册。 https://www.ti.com/lit/pdf/sprad07。 

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

    您好、Charles、我将核实这一点。 我可以将 Tx0、Tx1、TX_EM 物理上环回到 Rx0、Rx1和 CRS_DV、并提供外部50MHz 时钟。 从理论上讲、这应该起作用。

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

    尊敬的 Charles:

    它已确认正常工作。 我们将 MCU 连接到交换机 IC、RMII 接口上的 MAC-MAC 连接工作正常。  

    值得一提的是、EN0RXER 引脚必须物理拉低才能使 RMII 接口工作。 数据表中的内容不正确、表明"RX_ER 是一个可选的标准 RMII 信号、未在该器件中使用"。

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

    尊敬的 Tianlei:

     很高兴它能够在 MAC2MAC 中工作。 我自己也学到了一些新的东西。 您能否分享您有关为 RMII 接口配置 EMAC 的代码以及一些用于从 RMII 发送一些数据的简单测试代码。 我非常感谢论坛社区的参与。 谢谢。  

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

    这是 EMAC 配置的代码。 该测试来自向 LAN 广播测试数据包的网络设备、该设备会退回测试数据包。

    空洞
    EthernetRmiiCfg (byte* Mac)

       SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOG);
       GPIOPinConfigure (GPIO_PG3_EN0TXEN);
       GPIOPinConfigure (GPIO_PG4_EN0TXD0);
       GPIOPinConfigure (GPIO_PG5_EN0TXD1);
       GPIOPinConfigure (GPIO_PG6_EN0RXER);
       GPIOPinConfigure (GPIO_PG7_EN0RXDV);
       GPIOPinTypeEthernetMII (GPIO_PORTG_BASE、GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);

       //这是重要的! 没有它、就不具有 RX。
       // Phy 不提供此信号、因此 MCU 必须自行停止
       //
       GPIOPadConfigSet (GPIO_PORTG_BASE、GPIO_PIN_6、GPIO_Sength_4mA、GPIO_PIN_TYPE_STD_WPD);

       SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOQ);
       GPIOPinConfigure (GPIO_PQ5_EN0RXD0);
       GPIOPinConfigure (GPIO_PQ6_EN0RXD1);
       GPIOPinTypeEthernetMII (GPIO_PORTQ_BASE、GPIO_PIN_5 | GPIO_PIN_6 );

       SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOM);
       GPIOPinConfigure (GPIO_PM4_EN0RREF_CLK);
       GPIOPinTypeEthernetMII (GPIO_PORTM_BASE、GPIO_PIN_4);

       //启用和重置以太网模块。
       //
       SysCtlPeripheralEnable (SYSCTL_PERIPH_EMAC0);
       SysCtlPeripheralReset (SYSCTL_PERIPH_EMAC0);

       //等待 MAC 准备就绪。
       //
       while (! SysCtlPeripheralReady (SYSCTL_PERIPH_EMAC0)){
           WdogTemporyFeed ();
       }

       //配置接口
       //
       EMACPHYConfigSet (EMAC0_BASE、(EMAC_PHY_TYPE_EXTERNAL_RMII | EMAC_PHY_AN_100B_T_FULL_DUPLEX));

       //重置 MAC
       //
       EMACReset (EMAC0_BASE);

       //初始化 MAC 并设置 DMA 模式。
       //
       EMACInit (EMAC0_BASE、SysClock、EMAC_BCONFIG_BCONFIG_MIXED_BURST | EMAC_BCONFIG_PRIORY_FIXED、4、4、 0);

       //设置 MAC 配置选项。
       //
       EMACConfigSet (EMAC0_BASE、(EMAC_CONFIG_STREL_CRC | EMAC_CONFIG_FULL_DUPLEX | EMAC_CONFIG_CHECKSUM_OFFLOAD | EMAC_CONFIG_7BYTE_PREAMBLE |)进行配置
                                   EMAC_CONFIG_IF_GAP_96BITS |   EMAC_CONFIG_USE_MACADDR0 | EMAC_CONFIG_SA_FROM_DO|
                                   EMAC_CONFIG_BO_LIMIT_1024 | EMAC_CONFIG_100Mbps)、
                                 (EMAC_MODE_RX_STORE_Forward | EMAC_MODE_TX_STORE_Forward | EMAC_MODE_TX_THRESHOLD_64_BYTES |
                                   EMAC_MODE_RX_THRESHOLD_64_BYTES)、0);

       //初始化以太网 DMA 描述符。
       //
       InitDescriptors (EMAC0_BASE);

       //使用其 MAC 地址对硬件进行编程(用于过滤)。
       //
       EMACAddrSet (EMAC0_BASE、0、Mac);

       //启用以太网 RX 数据包中断源。
       //
       EMACIntEnable (EMAC0_BASE、EMAC_INT_RECEIVE);


       //设置 MAC 过滤选项。 我们接收所有广播和多播
       //数据包以及专门为我们解决的数据包。
       //
       EMACFrameFilterSet (EMAC0_BASE、(EMAC_FRMFILTER_SADDR | EMAC_FRMFILTER_PASS_MULTICASTER | EMAC_FRMFILTER_PASS_NO_CTRL);

       //清除所有挂起的中断。
       //
       EMACIntClear (EMAC0_BASE、EMACIntStatus (EMAC0_BASE、FALSE));

       //将接收描述符标记为可供 DMA 启动
       //接收处理。
       //
       内部 I;
       for (I = 0;I < NUM_RX_DODESKERS;I++){
           g_psRxDescriptor[i].ui32CtrlStatus |= DES0_RX_CTRL_OWN;
       }

       //启用以太网 MAC 发送器和接收器。
       //
       EMACTxEnable (EMAC0_BASE);
       EMACRxEnable (EMAC0_BASE);

       //启用以太网中断。
       //
       IntPrioritySet (INT_EMAC0、Ethernet_PERIOR);
       IntEnable (INT_EMAC0);

       //启用以太网 RX 数据包中断源。
       //
       EMACIntEnable (EMAC0_BASE、EMAC_INT_RECEIVE);
    }

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

    尊敬的 Tianlei:

     非常感谢您的分享。 我相信它将极大地惠及社区中寻求相同解决方案的人。 Bravo 发现  EN0RXER 必须拉低。  

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

    欢迎!