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.

[参考译文] DP83630:1STEP UDP 校验和

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1409035/dp83630-1step-udp-checksum

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

工具与软件:

您好!

我将 DP83630芯片的 Linux 系统用于 PTP。 我注意到、偶尔、如果是单步同步数据包(DP83630插入正确的时间戳并交替2个填充字节以获得正确的校验和)、操作的填充字节会导致 UDP 校验和仍然错误。 错误的 UDP 校验和被1除、例如0x1538而不是0x1539。

您是否熟悉此类行为?

需要注意的是、我使用的 DP83630 EVK 中的芯片仍然有 National Semiconductor 标识。

谢谢!

Alexey。

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

    只需要注意的是、在所有错误校验和的情况下、插入的填充字节都将0xff 作为最后一个字节

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

    Alexey、您好!

    我不熟悉该行为、这可能是时钟规格违规、原理图或布局问题的症状。

    能否分享一下应用方框图以便我理解?

    PHY 的行为是否符合预期(寄存器访问、clk_out 处于活动状态...)?

    谢谢!

    Evan

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

    尊敬的 Evan:

    我们的测试设置包括使用我们设计的基于 PCB 的专用适配器连接到 Microchip SAMA5D3 EDS 的 DP83630 EVK。 Microchip CPU 运行 Linux、我们使用 LinuxPTP 软件包。 将 DP83630配置为在 RMII 主模式下运行。 除了上述"小"问题外、PHY 的行为符合预期。

    谢谢!

    Alexey。

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

    Alexey、您好!

    感谢您的澄清。

    什么是 IPG 用于数据包传输? 如果可能、请尝试更改 IPG 并注意是否以相同的速率发生相同的填充问题。

    假设 IPG 设置与 DP83630兼容、我们可以配置一些 RMII 设置来帮助排查问题:

    1) 0x17[13]='1': 禁用 RMII TX 延迟优化

    TX 优化主动同步发送和基准时钟相位、禁用可能有助于隔离问题是否由时钟违例导致

    2) 0x17[4]='1':切换到 RMII 版本1.0

    Microchip CPU 是使用修订版1.0还是1.2? 修订版本不匹配可能会导致互操作问题。

    3) 3)在 观察到填充问题后读取寄存器0x17[3:2]。

    上溢/下溢标记是时钟输入的 PPM 违例的症状。

    谢谢!

    Evan

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

    您好!

    我已经检查了上溢/下溢位、它们没有被设置。 目前正在检查您建议的其他两项内容。 关于 IPG、DP83630是否要求 IPG 大于标准值(100Mbit 为96位)?

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

    您好!

    Evan 今天太棒了,明天还会再来的。  

    此致、

    Gerome.

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

    Alexey、您好!

    我希望96位 IPG 能够在这里工作。 感谢您确认上溢/下溢位未设置、这似乎不是时钟问题。

    请尽可能告知测试(1)和(2)的结果。

    谢谢!

    Evan

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

    尊敬的 Evan:

    我已经尝试设置4和13两个位(每次一个)、但没有任何帮助。

    还有其他想法吗?

    谢谢!

    Alexey。

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

    Alexey、您好!

    感谢您确认测试。

    我当前的假设是 PHY 插入正确的填充字节、但 MPU 侧接收数据包的方式存在问题。

    为此、我要确认:

    1) DP83640 X1时钟输入为25M +/- 50ppm

    2) 2) MPU 需要来自 PHY 的 CLK_OUT 引脚的50m 时钟输入、而在 MPU 侧进行探测时、输入量为50m +/- 50ppm

    当您观察到不正确的 UDP 校验和时、是否在接收到的数据包的软件日志中有此信息? 我想知道、如果在 PHY 侧看到正确的填充、我们是否可以在信号电平上探测/观察、以便我们可以将问题隔离到 MPU 的接收器侧。

    谢谢!

    Evan

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

    尊敬的 Evan:

    我认为这里有一些误解。 DP83640 PHY 在将数据包传输到以太网(PTP 同步数据包)之前会插入填充字节以进行校验和校正。 我在接收端观察到错误的校验和(错误的填充字节操作)、接收端不是 DP83830、而是标准 PC (尝试过的很少)直接连接到 DP83630或通过开关连接。 从 MPU 传输的其他数据包(DP83630不会操作其校验和或其他字段)从不会出现错误的校验和。

    关于时钟- DP83630的 X1和 X2 (DP83630 EVK)上有25MHz 晶体、它通过 RX_CLK 引脚为 MPU 提供50MHz 时钟(根据数据表、在 RMII 主模式下、TX_CLK 和 RX_CLK 可用于为 MAC 提供参考50MHz 时钟)。

    谢谢!

    Alexey。

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

    Alexey、您好!

    我的错误,谢谢你的澄清。

    我参考本软件开发指南以了解可能的原因:

    PHYTER_PHY1.96 Software_Development_Guide_

    是否正在使用 IPv4或 IPv6、以及是否 在没有更改的情况下使用了库存参考库?

    谢谢!

    Evan

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

    尊敬的 Evan:

    正在使用 IPv4。 关于软件、我使用 LinuxPTP 软件包4.3版和大陆地区 Linux 中提供的 DP83640 Linux PHY 驱动程序(内核6.6版)。

    谢谢!

    Alexey。

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

    Alexey、您好!

    请参阅软件开发指南中的第3.1.3.4节、可以使用寄存器0x1D (PTP_RXCFG4、第5页空间)来配置如何为 IPv4处理 UDP 校验和。

    设置0x1D[15]="0"与"1"时、您是否看到校验和错误率存在差异?

    谢谢!

    Evan

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

    Evan、

    我想您刚才提到的部分讨论了接收时间戳插入。 我的问题与通过 PTP_TXCFG0中的位9启用的 TX 时间戳插入和校验和校正相关。 您是否认为按照建议更改 RX 时间戳插入会影响 TX 时间戳的行为?

    谢谢!

    Alexey。

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

    Alexey、您好!

    再次为困惑道歉。

    我再次检查了此行为的任何历史记录、 发现通过配置 PTP_TXCFG0可以解决类似的情况:

    启用   0x16中的 CRC_1STEP 和 CHK_1STEP 位

    这是否可以解决问题?

    谢谢!

    Evan

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

    您好、偶

    我已经尝试设置 CRC_1STEP 位(CHK_1STEP 已设置)。 它没有帮助。

    我还尝试了解失败的数据包中是否有特殊之处。 我可以看到、所有失败的数据包都将0xFF 作为最后一个字节(填充两个字节的第二个字节)、但并非所有将0xFF 作为最后一个字节的数据包都将失败。 请注意、0xFF 本身是最后一个字节的正确值。 最后一个字节在失败的数据包中不正确。  

    我还捕获了在将 MPU 发送到 PHY 之前发生故障的数据包、该数据包是正确的(校验和是正确的、另外两个填充字节为零)。

    谢谢

    Alexey。

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

    Alexey、您好!

    感谢您确认这一点、我同意在一些不兼容的 PHY 配置中插入了错误的填充字节。

    我需要与团队核实并查看我们可以测试哪些其他配置来解决此问题。 抱歉、此处的调试速度较慢、DP83630是我们较旧的 PHY 之一、支持有限。

    谢谢!

    Evan

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

    Alexey、您好!

    请参考此主题:

    https://e2e.ti.com/support/interface-group/interface/f/interface-forum/915170/dp83640-invalid-udp-checksum-generated-with-sync_1step

    注意在解决方案中、我们是否可以填充额外的两个字节0以查看校验和错误是否仍然存在?

    谢谢!

    Evan

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

    尊敬的 Evan:

    您是否建议添加另外两个填充字节(在我已经添加的两个填充字节之上)? 您建议的主题中的作者根本没有添加填充字节、该功能对他不起作用。 在本例中、校验和在大多数情况下都是正确的。

    为了进行调试、在将 PTP 流量发送到 DP83630 PHY 之前、我已经在 MPU (使用 TCPdump)以及接收器侧(使用 Wireshark 的 PC)捕获了 PTP 流量。 我在 PC 和 MPU 上找到了有缺陷的数据包(具有错误的校验和)。 在分析 MPU 端的源数据包之后、它会在末尾有两个填充零字节(并且正确的校验和假设使用零时间戳和零填充字节)。

    谢谢!

    Alexey。

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

    Alexey、您好!

    您是否建议再添加两个填充字节(在我已经添加的两个填充字节之上)?

    如果 UDP +时间戳数据的帧格式正确、并且最后两个填充字节用作校验和、则这应该足够了。

    当您在 MPU 和 PC 端观察到有缺陷的数据包时、两端是否都为校验和显示两个0字节? 据我所知、如果启用了0x16[10:9]、DP83640将修改最后两个字节并校验和。

    您是否能够在 启用 CRC_1STEP 和 CHK_1STEP 的情况下共享 PHY 寄存器转储?

    谢谢!

    Evan

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

    尊敬的 Evan:

    下面是 PC 接收到的"损坏数据包"的 Wireshark 屏幕截图。 UDP 校验和不正确、最后一个填充字节为0xff)。

    下面是发送器端同一数据包(DP83630)的屏幕截图、由 tcpdump 捕获(当然是在硬件添加时间戳和更改填充字节之前)、校验和与接收端相同、填充字节和时间戳是零):

    我稍后将共享寄存器转储。

    谢谢!

    Alexey。

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

    Alexey、您好!

    相对于数据包最后两个字节的校验和是否正确?

    我看到、Wireshark 正在引用不同的字节位置进行校验和、而 PHY 正在修改校验和的最后两个字节。 我不清楚校验和错误是否与 PHY 如何修改数据包有关、或者 在 Wireshark 的末尾附加校验和时与预期的 UDP 帧格式有关。

    在后一种情况下、是否可以改变 Wireshark 解释数据包的方式?

    谢谢!

    Evan

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

    Evan、

    您在屏幕截图中看到的发送器和接收器之间的不同索引是由于不同的捕获方法(直接通过接收器处的 Wireshark 以及发送器处的 tcpdump)、有关以太网帧本身的字段位于正确位置。

    发送器端 TCP 堆栈会在将数据包传递到 PHY (在我们的示例中为0xa64c)之前计算校验和、包括10个作为时间戳的零和2个填充零。 PHY 会修改10个字节的时间戳并修改2个填充字节、使校验和仍然正确。

    在接收器侧、接收到的校验和仍为0xa64c、根据 Wireshark (也通过其他工具验证)、校验和错误。 这意味着 PHY 添加的填充字节是错误的、正如我之前所述、填充字节几乎是正确的-与正确的字节相差一个点。

    Alexey。

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

    感谢您对此进行澄清、我同意 PHY 的校验和修改在这里有错误。

    请使用增大的 IPG 进行测试。 我想确认附加的 PTP 数据不会由于帧间隙减小而导致错误。

    谢谢!

    Evan

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

    尊敬的 Evan:

    我们当前的 Microchip MCU 不允许更改 IPG、但我们很快将切换到更先进的器件。 该新器件支持 IPG 配置、所以我会等到我们准备好新板后再继续进行调试。

    非常感谢、

    Alexey。

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

    Alexey、您好!

    听起来不错、如果可以、请分享更多详细信息。

    谢谢!

    Evan