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.

[参考译文] TMDS64EVM:PRU Tx 以太网间歇性故障

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1653627/tmds64evm-pru-tx-ethernet-is-intermittent

器件型号: TMDS64EVM

我运行了以下代码、以便将 Etherner 数据从配置的 MII_RT 端口传输到主机 PC。 有时我只看到数据显示在主机 PC(通过 Wireshark)上。 是否有任何关于间隔连续传输或信号标志的规则、我应该在帧之间设置、以便我不会看到这种奇怪的间歇行为? 一致的代码行为不一致是很奇怪的。

 

ethTestTx:
  XOUT Scratch_BANK0_XID、&r0、27*4    ;将 r0-R26 保存到 Sratch Pad Bank 0

  LDI32  R2、0xBAE4BAE5
  ldi32  R3、0xADDEFFFF
  ldi32  R4、0xAA55EFBE
  ldi32  R5、0x0100608
  ldi32  R6、0x04060008
  LDI32  R7、0x04030201
  LDI32  R8、0x08070605
  ldi32  R9、0x0c0b0a09
  LDI32  R10、0x87654321
  LDI32  R11、0x44332211
  ldi32  R12、0x88776655
  ldi32  R13、0xdeadbeef
  ldi32  R14、0x12345678
  ldi32  R15、0xaabbccdd
  ldi32  R16、0xeff1234
  ldi32  R17、0xaa554321

  XOUT  TXL2_XID、&R2、64         ;传输帧
  LDI R31.w2、(0x0800 | 0x0400 | 0x2000)

  XIN  TXL2_XID、&r19、4        ;读取状态

  Xin Scratch_BANK0_XID、&r0、27*4    ;从 Sratch Pad Bank 0 恢复 r0-R26

  JMP    R3.w2               ;返回

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid=“685763“ url=“~/support/processors-group/processors/f/processors-forum/1653627/tmds64evm-pru-tx-ethernet-is-intermittent 通过运行以下代码、将 Etherner 数据从配置的 MII_RT 端口传输到主机 PC。 有时我只看到数据显示在主机 PC 上(通过 Wireshark)。

    我建议使用外部网络分路来排除主机端跌落、因为 PC 上的 NIC 可能会静默地丢弃数据包 、尤其是较短的数据包。 如果没有线缆级别的可见性、很难将行为称为“间歇性“。 也很难评论。

    无论如何、有几个方面值得检查:

    1. IPG(数据包间隙):验证 PRU_ICSSG1_PR1_MII_RT_PR1_MII_RT_CFG 设置为 0x0B 线路时钟周期 (1Gbps 时为 96ns)。 如果在 IPG 到期之前推入了一个数据包,栅极会将其保留,直到间隙清除,因此仅此原因不会导致丢弃 — 但值得确认。  

    2.背对背传输:如果您正在发送连续的帧、请等待 TX L2 FIFO 完全耗尽后再写入下一帧。 在发送前一帧之前覆盖 FIFO 内容会损坏前一帧。 您的固件应该负责处理此问题、但值得验证。

    对于点:2、FIFO 填充级别:您可以读取 FIFO 填充级别以确认前一帧已完全耗尽、然后再按下下一帧。

    xin     TXL2_XID, &R19, 4
    and     R19.b2, R19.b2, 0x7F   
    qbge    exit?, R19.b2, 0            ; don't push new packet
    
    BR
    Jc.

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

    BTW、EOF 和您在 R31 中配置的 CRC 标志看起来正确。

    BR
    Jc.

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

    根据我之前提到的 TI 演示工程、IPG 当前设置为 0x18。 我被配置为 100Mbs。 我还添加了“延迟“以在发出新的传输之前检查 FIFO 中的字节。 由于数据包大小一致、 在传输数据包和不传输数据包方面仍然存在不一致。 我无法访问 外部网络分路器(至少不能立即访问)。

    我注意到、当我手动执行代码时、我的所有数据包都会被传输。 当我刚刚运行时、会出现问题。 这表明与时序相关。 其他 IPG(我应该提高?) 并等待 R19 状态寄存器 TXL2Ocd 为 0、需要调查哪些其他与时序相关的问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到、当我手动浏览代码时、我的所有数据包都会被传输。 当我刚刚运行时、会出现问题。 这表明与时序相关。 其他 IPG(我应该提高?) 并等待 R19 状态寄存器 TXL2Ocd 为 0、需要调查哪些其他与时序相关的问题?

    您能分享一下 ICSSG 转储吗? 我对这些错误计数器更感兴趣?

    BR
    Jc.

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

    FYI、所需的 IPG 为 960ns/40ns = 24 个时钟周期。 要获得 24 个周期、请进行编程:24 - 1 = 23 = 0x17、因为计数器计数为 23->0(需要 24 个周期)、然后传输在到期后的下一个周期开始

    BR
    Jc.

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

    您能解释一下这些细节的来源吗? 我明白了 IPG、这不起作用、但不确定您计算中的数字来自哪里。 当您说“必需“时、这是基于什么?

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

    这是参考。

    BR
    Jc.

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

    抱歉、让我澄清一下我的问题... 您在哪里遇到了“所需的 IPG 为 960ns/40ns = 24 个时钟周期“?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉让我澄清我的问题... 您在哪里遇到了“所需的 IPG 为 960ns/40ns = 24 个时钟周期“?

    1G 模式下、TX 接口时钟以 125MHz 运行。 这是传输千兆位数据所需的标准时钟速率、即 125MHz = 8ns

    100M 模式、TX 接口时钟在 25MHz 上运行。 在 100Mbps 速率下、接口时钟速率为 1G 的五分之一、即 25MHz = 40ns

    来自 PHY 接口的 125MHz 或 25MHz 时钟

    根据 802.3 标准、96ns 是 1G 的最小 IPG、 100Mbit 为 960ns

    现在、对于 ICSSG 配置 — 根据 TRM:

    对于 1G -> 96ns÷8ns - 1 = 11 = 0x0B

    对于 100m -> 960ns÷40ns - 1 = 23 = 0x17

    0x17 或 0xB 值以 TX 接口 CLK 为单位  

    BR
    Jc.