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.

[参考译文] TM4C129ENCPDT:以太网端口无法发送数据包

Guru**** 2463330 points
Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/656816/tm4c129encpdt-ethernet-port-cannot-transmit-packet

器件型号:TM4C129ENCPDT

您好!

我想知道是否有人可以为我提供一些线索。 我们的电路板使用 TM4C129ENCPDT MCU、目前我们正在对其执行 ESD 测试。 ESD 通常会导致以太网端口的传输部分停止工作。 以下是观察结果:

1、MCU 未经历复位;

2.固件仍然可以看到正确的传入数据包;

2.固件可以正常分配以太网 TX 描述符并通过启动 DMA 发送以太网包;

3.只有数据包不能放在线路上(LAN 中的其他设备不接收数据包);

4.从以太网活动 LED 指示灯看,一切都正常;

5.拔下并插回以太网电缆没有任何帮助(通过查看 LED 指示灯建立链路,但问题仍然存在);

6.复位 MCU 可以恢复问题(下拉复位线路)。

我的问题是:

1.这可能是 EMAC/PHY 中的问题吗?

2.是否可以检测到它,以便固件可以在需要时重置 EMAC (假设链路已启动并看起来正常)?

谢谢。

天列

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    您有多少电路板接受了 ESD 测试、有多少电路板经历了这种行为? 您能否探测来自 MCU 的 EN0TXON 和 EN0TXOP 信号? 我想知道 MCU 和 RJ45插孔之间的任何东西是否会对您看到的问题产生影响。 您是否还可以尝试仅重置 PHY 而不是整个 MCU 并查看它是否起作用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    这是第一块用于 ESD 测试的电路板。 以下是新发现。

    我创建了一个函数 InitializeEthernet() (请参阅以下内容),它基本上会重置整个端口。 此函数正常工作、实际上可以从错误条件中恢复以太网功能。 此时、我正在寻找来自以太网端口的指示、以便可以使用它来触发此功能。 此时、我不确定错误是否在 DMA、MAC 或 PHY 中。

    调用 SysCtlPeripheralReset (SYSCTL_Periph_EPHY0)是否足以复位 PHY?

    谢谢、

    天列

    无效
    InitializeEthernet()

       //
       //启用和复位以太网模块。
       //
       SysCtlPeripheralEnable (SYSCTL_Periph_EMAC0);
       SysCtlPeripheralEnable (SYSCTL_Periph_EPHY0);
       SysCtlPeripheralReset (SYSCTL_Periph_EMAC0);
       SysCtlPeripheralReset (SYSCTL_Periph_EPHY0);
       //
       //等待 MAC 准备就绪。
       //
       while (!SysCtlPeripheralReady (SYSCTL_Periph_EMAC0)){
           WdogTemporyFeed();
       }
       //
       //配置以便与内部 PHY 一起使用。
       //
       EMAPPHYConfigSet (EMAC0_BASE、(EMAC_PHY_TYPE_内部| EMAC_PHY_INT_MDIX_EN | EMAC_PHY_AN_100B_T_FULL_DUPLEX);
       //
       //重置 MAC 以锁定 PHY 配置。
       //
       EMACReset (EMAC0_BASE);
       //
       //初始化 MAC 并设置 DMA 模式。
       //
       EMACInit (EMAC0_BASE、SysClock、EMAC_BCONFIG_Mixed_burst | EMAC_BCONFIG_PRIORY_FIXED、4、4、4、 0);
       //
       //设置 MAC 配置选项。
       //
       EMACConfigSet (EMAC0_BASE、(EMAC_CONFIG_FULL_DUPLEX | EMAC_CONFIG_CHECKSUM_卸 载|   EMAC_CONFIG_7BYTE_PRELENATE |
                            EMAC_CONFIG_IF_GAP_96BITS |   EMAC_CONFIG_USE_MACADDR0 | EMAC_CONFIG_SA_FTER_descriptor |
                            EMAC_CONFIG_BO_LIMIT_1024)、
                          (EMAC_MODE_RX_STORE_Forward | EMAC_MODE_TX_STORE_Forward | EMAC_MODE_TX_THREST_64_Bytes |
                            EMAC_MODE_RX_THRESHOLD_64_Bytes)、0);
       //
       //初始化以太网 DMA 描述符。
       //
       InitDescriptors (EMAC0_BASE);
       //
       //使用硬件的 MAC 地址对硬件进行编程(用于过滤)。
       //
       EMACAddrSet (EMAC0_BASE、0、macaddr);

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

       SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
       GPIOPinTypeEthernetLED (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);
       GPIOPinConfigure (GPIO_PF0_EN0LED0);
       GPIOPinConfigure (GPIO_PF1_EN0LED2);

       EMAPPHYExtendedWrite (EMAC0_BASE、0、EPHY_LEDCR、EPHY_LEDCR_BLINKRATE_20Hz);
       EMACPHYExtendedWrite (EMAC0_BASE、0、EPHY_LEDCFG、EPHY_LEDCFG_LED0_LINK | EPHY_LEDCFG_LED2_RxTx);

       //驱动程序库不正确。 该位实际上控制 LED 指示器的极性
       //
       HWREG (EMAC0_BASE + EMAC_O_CC)|= EMAC_CC_ECEXT;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    SysCtlPeripheralReset (SYSCTL_Periph_EPHY0)将复位 PHY。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我将函数简化为仅包含此语句(SysCtlPeripheralReset (SYSCTL_Periph_EPHY0)),并且它也起作用(可以在错误条件下恢复以太网端口)。 这意味着它是 PHY 的问题、复位它将解决它。

    我还尝试查看 EN0TXON 和 EN0TXOP 之间的信号。 但看起来 PROB 会影响以太网功能。 连接 PROB 后、端口将不会出现(未建立链路)。

    不管怎样、我是否可以通过任何方法检查 PHY 的状态并从代码中发现错误条件?

    谢谢、
    天列
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    您能否通过读取 EPHYBMSR (MR2)寄存器了解 PHY 状态? 是否设置了任何位?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我输入代码将 EPHYBMSR (MR1)的值转储到串行终端。 除了 EPHY_BMRS_LINKSTAT 正确反映链接状态外、错误期间没有任何位置位。

    我还监视了 EPHYSTS (MR16)的值并捕获了以下内容:
    在正常工作状态下、值为0x0715
    2.在错误状态中、值为0x0f15
    值的转换:0x0715 --> 0x0d15 --> 0x0f15

    根据数据表:
    1。FCSL 位被置位、这意味着发生了错误载波事件
    2、DL 位被复位、这意味着解扰器锁定。 一旦寄存器被读取、该位就会被置位。

    DL 位是否与错误状态相关? 我不清楚这一位的技术细节。

    谢谢、
    天列
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    我不是 PHY 设计的专家。 当 FCSL 位置位时、表示自上次读取以来错误的载波侦听计数器已经发生了变化。 通常、当控制器发现 MAC/PHY 接口信号的意外行为时、该计数器会递增。 我认为 PHY 在检测到信号检测问题时会递增计数器(载波经过调制后形成0和1)。 当节点之间的信号中断时、会发生载波错误。 如果 PHY 未接收到正常链路脉冲、则会产生载波错误。
    我倾向于认为 DL 位与错误无关。 我进行了一些读取、PHY 具有扰频器和解扰器。 100Base-TX 传输需要扰频以减少双绞线电缆上的辐射发射。 因此、当 DL 位被复位时、可能意味着 PHY 处于状态以对接收到的数据进行去同步。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Tianlei Zhang "]我将函数简化为仅包含此语句(SysCtlPeripheralReset (SYSCTL_Periph_EPHY0))[/引用]

    每当 PHY 复位时、似乎都要调用读取、必须 重新配置。

    回到  锁定 PHY 的 ESD 测试、 我们只能想象您的定制 PCB 是如何处理此类事件的。   通常情况下、在 ESD 事件进入 PHY 之前阻止 ESD 事件是不是一个普遍的想法、而是在 2kV 或20kV 下施加的 ESD 电平是多少?

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

    [引用 user="BP101"]无论何时 PHY 复位,都可以调用读数,但必须 重新配置该读数。

    这假定 IP 堆栈中的其他网络层没有损坏。 这个想法你可以重置 PHY、像 U 没有平坦轮胎一样继续前进、 最终燃烧橡胶的气味将会让驾驶员接管。

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

    大家好、

    感谢所有回答。

    由于我连续从 FCSL 读取1、这意味着错误状态期间始终会发生错误载波事件(否则、一旦我读取寄存器、该位就应该被清除)。  这可能意味着 PMD 中的载波检测逻辑出错(假设我重置交换机、固件可以看到链路已建立、但问题仍然存在)。  

    此时、我将使用 FCSL 来指示错误以复位 PHY。 此方法有效。 我知道这不是最终的解决办法,但它有助于解决我们目前的问题。

    天列

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

    让我们知道 FCSL 是否未正确指示错误。