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.

[参考译文] RTOS/AM4376:PRU-ICSS 和 PRU-EMAC 有时会丢弃数据包

Guru**** 2548360 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/795399/rtos-am4376-pru-icss-and-pru-emac-sometimes-drops-packets

器件型号:AM4376

工具/软件:TI-RTOS

您好!

当 PRU 在短时间内停止传输数据包时、我们通过 PRU-ICSS 和 PRU_EMAC 解决了 PRP 模式的罕见问题。 我通过获取 PRP 统计数据来确定它是由 PRU 引起的。 目前、它发生在 PRU-ICSS-HSR-PRP-DAN_01.00.03.02封装中、但我不希望它在 PRU-ICSS-HSR-PRP-DAN_01.00.04.02中固定、尽管我将尝试迁移代码。

时间大约为32.5ms。

我们发送速率恒定的数据包(采样值数据)、这个问题有时每10秒发生一次、有时每半小时发生一次。 但 RX 中的暂停(32.5ms)或多或少是恒定的。

对我来说、它看起来像是 PRU 的内部看门狗重启或某种 DDoS 保护、但我不确定、也不知道如何证明这一理论。

我现在正在尝试迁移到 01.00.04.02以检查是否已修复、但我想知道是否存在已知问题、以及这一次对 TI 开发人员而言是否意味着什么。

谢谢、Alexander。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更新到01.00.04.02未解决问题。 也会注意到相同或稍长(最多33ms)的暂停。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex、

    该问题是否也可在 AM437x IDK 上重现? 如果是、我们可以尝试重现问题并进行调试。 您能否详细说明您的测试设置以及如何测量32.5ms 的间隙?

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

    Garrett、

    我正在尝试为 AM437x IDK 重新构建它、但我们有一些额外的硬件、我需要用桩模块替换。 我将尽快完成代码移植。 此外、我们还计划在我们拥有的 AM572x 和 AM65x 板上运行生成的测试。

    我们拥有 IEC61850模拟合并单元仿真器、可生成精确周期(每通道平均分布4kHz)的流量。 在给定的秒内、每个数据包的编号从0到3999不等。 如果错过了130个样本(或较新版本的132个样本)、我们会有恒定的间隙、从而为我们提供0.25uS * 130 = 32.5mS。

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

    Garrett、

    最后、我能够在 AM437x IDK 上重现相同的压降、但与我们的板不同、它在统计信息中显示错误:

    =

    *

    CURR_777、EXP=643

    S T A T I S T I C S

    查找错误 A:03337694

    查找错误 B:00000000

       TX WrongLan    Rx  错误  节点  代理  唯一 双工。   多  所有者 Rx

    ----  ----  ----  ----  ----  ----  ----  ----  ----  ----

    00000474 00000000 00000000 00000399 00000001 00000000 00000000 00000000 00000000 00000000

    00000000 00000000 00000000 00000000 00000000            00000000 00000000 00000000 00000000 00000000

    03337694 00000000 00000000 00000000            00000000 00000000 00000000

    =

    我的应用程序基于 PRP 示例、我将 SAN 设备连接到端口 A。我附加了对 PDK、NDK 和 PRU 软件包的更改 (顺便说一下、TI 的负责人最好最后将 PRU 包与当前 SDK 同步、因为它至少在半年内不会从包装箱中编译)。

    e2e.ti.com/.../ndk.diffe2e.ti.com/.../pdk.diffe2e.ti.com/.../pru.diff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的测试基于 PRP 源、因为我们对它更感兴趣、但我们看到 EMAC 驱动器以及电路板上的效果相同。
    "错误"计数器是什么意思?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex、

    >>我们也看到了 EMAC 驱动器的相同效果
    如果增加 ICSS EMAC 环回示例中的数据包数量、是否意味着有数据包丢失? 结果基于 Processor SDK 5.3中的最新 PDK 1.0.14 (如差动文件中所示)。

    "错误"表示从端口接收到无效帧。

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

    我们在 PDK 1.0.12的应用中看到的数据包数量完全相同。 我尚未尝试使用较新的 PDK、但我相信它不会改变任何东西。

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

    pdk.diff 文件中显示的1.0.14已是最新的 PDK 版本。

    >>DIFF -RU PDK_AM437X_1_0_14.orig/packages/ti/drv/ICSS_EMAC/icss_emacDrv.h PDK_AM437X_1_0_14/packages/ti/drv/ICSS_EMAC/icss_emacDrv.h

    我将尝试运行 ICSS EMAC 环回示例、以查看我的 IDK 中是否有任何数据包丢失。

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

    您好、Garrett、

    您是否能够重现问题? 这对我们(以及针对 Sitara 的 IEC61850器件的所有人)来说非常紧迫。

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

    更多信息:

    我在 PRP 模式下通过 MOxA Redbox 将 SAN 设备连接到 IDK。 现在、我在应用端看不到丢失的帧、但两个接口上的错误计数器都在增加。 这意味着错误在不同的时间发生在 PRU 上。

    =

    S T A T I S T I C S

    查找错误 A:15760153
    查找错误 B:15759354

    TX WrongLan Rx 错误节点代理唯一双工。 多所有者 Rx
    ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
    00000664 00000000 15760153 00000800 00000003 00000000 00000000 00000000 00000000 00000000 00000000
    00000664 00000000 15759354 00001597 00000000 00000000 00000000 00000000
    15761558 00000000 00000000 00000000 00002488 15757328 00000004

    =

    是否有办法调试确切的错误原因? 如果您想在我这边进行任何测试、我愿意为您提供帮助。

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

    我增加了 ICSS_EMAC_TEST_PKT_TX_COUNT 并运行 ICSS_EMAC_BasicExample_idkAM437x_wSoCLib_armtestproject 回送测试1小时、但看不到任何数据包丢失。

    PRU 中的错误统计数据可以是 CRC 计数、超大尺寸、超大尺寸帧、Rx 错误和 SFD 错误。 您能否上传器件以太网连接拓扑图以便我更好地了解您的用例? 您是否尝试使用 netANALYZER 捕获数据包以查看线路上是否有格式错误的 PRP 数据包?

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

    Garrett、

    我们在不同的环境中进行了测试。 最初、我们发现实际合并单元和仅使用 PRP LAN A 的 MOxa PT-75xx 系列交换机。 然后,我们使用合并单元模拟器、Cisco SG100D 和两个不同的 TrendNet 交换机,最后使用 合并单元模拟器和 Moxa PT/G503-PTP Redbox,在工作台上也尝试了相同的操作。 结果是相同的:有时从399到401的数据包会被串行到垃圾箱。

    我们没有 netANALYZER、但 Wireshark 不会在丢失的帧及其周围显示任何可疑内容。

    今天、我尝试在  具有 PDK 1.0.12和1.0.14的基于 Nimu_ICSS_BasicExample 的 IDK 上重现问题、但无法在表上重现问题。 当我们注意到电路板上的错误时、不确定是什么错误、 但是、我们使用定制的 NDK 和 HSR/PRP 封装、这允许我们在运行时切换运行模式、并且可能出现错误(我们很可能错误地加载了 PRP 固件、而不是 EMAC)、或者我们的电路板可能存在另一个看起来类似的问题。

    因此、我建议专注于 IDK 上的 PRP 固件、因为问题是可重现的。

    我注意到 、在 RED_STATS_DBG/LRE_DEBUG_STATS 下的 PRU-ICSS-HSR-PRP-DAN_01.00.04.02中存在其他调试统计信息、但它不会编译。 我应该尝试修复它、还是需要特殊的 PRU 固件才能运行?

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

    RED_STATS_DBG 不需要特殊的 PRU 固件即可运行。 我将与我们的系统测试团队合作、尝试复制设置和问题...

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

    Garrett、

    谢谢。 我在 LRE 统计信息中添加了调试字段、但所有这些字段都包含零。

    此外、我将 NIMU_ICSS 代码与 PRP 代码混合在一起、并能够在 EMAC 上重现数据包丢弃。 位于 main()中的 operateMode 变量负责模式(EMAC 为0、PRP 为1)。 该应用基于 prp_app_AM437x_arm、但我删除了大多数不必要的代码以使代码更小。

    我将项目文件存档并将源/链接脚本文件更改为 srC/目录(在项目中、它们引用到其他目录、我只需将它们放在存档中)。 我希望我没有忘记构建所需的任何内容。

    我们将在5月13日之前休假、但如果出现任何问题、我将监控论坛进行回复。

    LRE_START 0
    LRE_CNT_TX_A 949
    LRE_CNT_TX_B 0
    LRE_CNT_TX_C 366b867
    LRE_CNT_ERRWRONGLAN_A 0
    LRE_CNT_ERRWRONGLAN_B 0
    LRE_CNT_ERRWRONGLAN_C 0
    LRE_CNT_RX_A 0
    LRE_CNT_RX_B 0
    LRE_CNT_RX_C 0
    LRE_CNT_ERROR_A 144a
    LRE_CNT_ERROR_B 0
    LRE_CNT_ERROR_C 0
    LRE_CNT_COLUGESS_1
    LRE_CNT_PROXY 节点0
    LRE_CNT_UNIQUE RX_A 0
    LRE_CNT_UNIQUE RX_B 0
    LRE_CNT_UNIQUE RX_C 0
    LRE_CNT_DUAL_RX_A 0
    LRE_CNT_DUAL_RX_B 0
    LRE_CNT_DUAL_RX_C 0
    LRE_CNT_MULTIPLE_RX_A 0
    LRE_CNT_MULTIPLE_RX_B 0
    LRE_CNT_MULTIPLE_RX_C 0
    LRE_CNT_LOW_RX_A 0
    LRE_CNT_LOW_RX_B 0
    LRE_DUCY_RE丢弃2.
    LRE_Transparent_reception 1.
    LRE_NODE_TABLE 查找错误_A 366bae3
    LRE_NODE_TABLE 查找错误_B 0
    LRE_NODE_TABLE 完整0
    LRE_MULTICAST_SHIP 已丢弃0
    LRE_VLAN_摔 落0
    LRE_INTR_TMR_EXP 0
    LRE_TOTAL_RX_A 0
    LRE_TOTAL_RX_B 0
    LRE_O溢_PRU0 0
    LRE_overflow_PRU1 0
    LRE_DD_PRU0 0
    LRE_DD_PRU1 0
    LRE_CNT_SUP_PRU0 0
    LRE_CNT_SUP_PRU1 0

    e2e.ti.com/.../prp_5F00_small_5F00_AM437x.7z

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

    Alex、

    我在构建项目时看到了几个错误、我将深入研究它、看看我是否可以在没有您的假期更新文件的情况下修复它。

    ------

    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:907:25:错误:未声明'uint8'(在此函数中首次使用);您是指'uint8'?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:907:32:错误:")"令牌之前的预期表达式
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:934:18:错误:"IPN"未声明(在此函数中首次使用);您是指"IP6N"?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:934:22:错误:'dwIPAddress'之前应为';'
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:941:36:错误:未声明'uint8'(在这个函数中首次使用);您是指'uint8'?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:941:43:错误:")"标记之前的预期表达式
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/hsr_prp/hsr_prp_menu.c:940:5:错误:函数'CfgAddEntry"的参数太少
    gmake:***[HSR_prp_menu.o]错误1.
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/board/include/osdrv_ndkdeviceconfig.h:79:49:错误:未知类型名称'handle';您是指'_and'?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/board/include/osdrv_ndkdeviceconfig.h:81:1:错误:未知类型名称'handle';您是指'_and'?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/board/common/osdrv_ndkdeviceconfig.c:61:8:错误:未知类型名称"句柄"
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/board/common/osdrv_ndkdeviceconfig.c:74:49:错误:未知类型名称'handle';您是指'_and'?
    C:/ti/PRU-ICSS-HSR-PRP-DAN_01.00.04.02/examples/board/common/osdrv_ndkdeviceconfig.c:101:1:错误:未知类型名称'handle';您是指'_and'?
    gmake:***[board_common/osdrv_ndkdeviceconfig.o]错误1.
    gmake:目标"全部"不会由于错误而重新生成。

    --------

    此致、

    Garrett

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

    这也是 TI 原始示例的问题。 我忘记了添加这些定义以允许构建应用程序。

    handle 是指向 void 的指针、IPN 是 uint32_t、uint8是 uint8_t

    在原始应用程序中构建 SMTP 支持也很棘手、但我删除了所有这些代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Alex。 我能够构建您的项目(必须在 small_main.c 中添加 Timesync_ParamsHandle_t timeSyncHandle)、但程序在运行后立即崩溃。 您在 NDK 和 PDK 中添加了哪些补丁?

    我还与我们的团队讨论了以下问题:
    1.故障的条件是什么? 数据包大小、IPG
    2.故障类型–数据包丢失、损坏。 报告中提到了数据包丢失,但也有损坏吗?
    3.根据图,它是否验证数据包仅在 DUT 而不是在 Redbox 丢失?
    4.是否对 DUT 进行了更多测试以验证数据包丢失的位置? 在固件或主机中?

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

    我对上面显示的 PDK 应用了补丁、并对与 rawsocket 支持相关的 NDK 补丁进行了部分应用。

    数据包大小约为124字节 IIRC。 在我的设置中有三个采样值源、每个数据流的帧速率为每秒4000个数据包。 每个通道的数据包都可以精确地按时间分布。

    2.在应用程序级别未检测到损坏的帧。 仅显示在错误统计中的丢失帧。

    3.我没有使用 Redbox 验证过这一点,但是在交换机上,我看到 Wireshark 上丢失了帧,我没有什么特别的东西可以告诉你这些帧。

    4.只要我在 Wireshark 中看到这些丢失的帧,并且在 DUT 的错误统计中,我就会说在 DUT 侧发生错误。 我使用了不同制造商的不同开关、因此我怀疑这是与开关相关的问题。

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

    我在 Release 配置中构建了应用程序、其中删除了 PTP_TESTING 符号并添加了 LRE_DEBUG_STATS。  存档中包含了定制的 HSR_prp_menu.c、但我认为这不是崩溃的原因。

    以下是我使用的 PDK、NDK 和 HSR/PRP 封装的补丁。

    e2e.ti.com/.../4048.pdk.diffe2e.ti.com/.../ndk_2D00_vlan_2D00_raweth.diff

    e2e.ti.com/.../0728.pru.diff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为应用程序崩溃的原因是、我将源文件放在工程的 src 目录中、而我不希望 CCS "自动"将它们添加到工程中。 需要从工程中的编译中排除 lnk_A8_A9_a15_REV1_2.cmd、并通过 Build->GNU Linker->Libraries->Linker 命令文件添加。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex、

    我确实错过了这些补丁、因为您提到您删除了大多数不必要的代码。 将继续尝试重现此问题。
    此外、我已将您对团队提出的问题的答复转发给您...

    此致、
    Garrett

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

    应用补丁后、我只需构建并运行您的应用程序、而不会再崩溃。 我可以为器件分配 IP 地址、但不知怎么、它不能执行 ping 操作。 我是否仍然缺少任何东西? 我没有仔细研究过您的应用。 是否仍需要按照重现错误统计信息的说明使用测试设置 C 运行应用程序?

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

    Garrett、

    对于采样值、我们不使用 IP、因此我删除了 IP 堆栈初始化。

    这里是我用于测试的 PCAP 顶部的 C#代码。 它可以在带有英特尔卡的笔记本电脑 Win7Pro x64上工作、但会导致带有 Realtek 的台式机 Win10Pro x64上出现 BSOD。 这似乎与 PCAP/Realtek 驱动程序对不兼容、但我不确定。 该应用程序正在寻找地址10.0.1.1的接口来发送数据包、您可以在代码中更改它。

    PC 应用程序默认以每组3发送采样值数据包、每组数据包在大约一秒内编号为0到3999。 任务 任务任务 LedBlink2中的 small_main.c 检查接收到的数据包的顺序、并打印接收(当前)和预期(预期)的数据包计数器。

    今天、我以几种配置运行它:

    1) PC<-1G->Switch 1G<-100M->IDK,问题再次出现

    2) PC<-100M->Switch 1G <-100M->IDK,问题未重现,但 Windows 由于未知原因降低了帧速率;帧中也有两大缺口,但 PRU 统计数据是干净的,因此我不知道是什么原因导致了这种情况

    3) PC<-1G->Switch 1G<-100M->Switch 100M<-100M->IDK,问题再次出现

    我添加了间隔时间的打印、以微秒为单位、对于该时间、未将数据包接收到 small_main.c

    =

    *
    CURR=3802、EXP=3668、dT=3353535
    *
    CURR=2715、EXP=2581、dT=3350
    *
    CURR=3566、EXP=3431、dT=33780
    *
    CURR=3221、EXP=3086、dT=33774
    *
    CURR=3629、EXP=3494、dT=33763
    *
    CURR=3737、EXP=3603、dT=33476

    =

    e2e.ti.com/.../small_5F00_main.c

    e2e.ti.com/.../RawSocket.7z

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用4号选择控制阀模拟运行相同的测试。 停机时间增加到75ms (每次故障时约1200个错误块)。
    =
    *
    CURR=846、EXP=545、dT=75217
    *
    CURR=2421、EXP=2119、dT=75474
    *
    CURR=2119、EXP=1818、dT=75192
    *
    CURR=680、EXP=380、dT=74942
    *
    CURR=1654、EXP=1352、dT=75477
    *
    CURR=1653、EXP=1351、dT=75478
    =
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还有一个测试结果:通过100Mbit/s 开关的4SV。 仍会发生错误(对于2种情况为13种)、但非常罕见、并且时间更短:
    =
    *
    CURR=2161、EXP=2158、dT=1207
    *
    CURR=1582、EXP=1580、dT=810
    =
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex、

    您可以向我发送 C#项目的二进制文件吗? 多年来,我没有使用 Microsoft Visual Studio:-)

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

    Garrett、

    在这里。 我注意到、随着流数量的增加、错误看起来会增加。 RawSocket.exe 应用程序有两个参数:第一个是重复计时器(默认为250us)、第二个是流数。 通过致电“RawSocket.exe 250 8”,您可以模拟8个 SV 流,问题很快就会出现。 如果我计算正确、则负载约为33Mbit/s、我可能会期望100 Mbit/s 接口的随机数据包丢弃、但我不明白为什么 PRU 在一段时间内停止接收。

    尽管对于8 SV 流、我看不到流数与"暂停时间"之间的直接相关性、但对于3 SV、时间始终在33ms 左右、对于4 SV - 75ms。

    e2e.ti.com/.../Release.7z

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

    Garrett、

    我使用 PDK 1.0.14将此测试移植到 idk572x、并且能够重现相同的问题。

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

    很抱歉、我被侧边跟踪、下周一将尝试处理这个问题。

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够恢复我的设置、但 RawSocket.exe 崩溃。

    我将尝试查找 Win7 PC。 在我的 win10工作站中、我得到了以下"未处理的例外"、这可能与 PC 中安装的 Beckhoff 驱动程序有关、我将继续研究...或者、您能否告诉我您的 SV 数据包格式(标头和有效负载)? 我可以尝试使用 PC 数据包生成器...

    HSR_A历 克斯\Releasy>RawSocket.exe 2508.
    (笑声)
    未处理的异常:System.InvalidOperationException:无法打开适配器。 适配器名称:rpcap://\Device\NPF_{}。 错误:无法将硬件过滤器设置为混杂模式
    在 PcapDotNet.Core.LivePacketCommunicator.PcapOpen (SByte*源代码、Int32 SnapshotLength、PacketDeviceOpenAttributes 属性、Int32……

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

    Garrett、

    我想您  没有安装 https://www.winpcap.org/驱动程序。 RawSocket 使用它发送数据包。

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

    Alex、

    我在 PC 中打开了 TwinCAT 交换机驱动程序、并能够运行您的 RawSocket。 附件是日志 file.e2e.ti.com/.../prp_5F00_sv_5F00_log.txt

    我可以看到 DT 差异、但我不确定它是由 PRP 应用程序/固件还是 PC 本身的 NIC 驱动程序引起的。

    您是否尝试使用 Ixia 等硬件数据包生成器测试应用?

    此致、
    Garrett

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

    这对我来说很奇怪、你经常遇到问题。 在8个 SV 流的情况下、我还看到了 DT 变化、但对于3个或4个模拟流、它通常是恒定的(取决于流的数量)。

    不、我们没有用于网络测试的特殊设备、但我认为、任何类型的流量发生器的结果都是相似的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Garrett、

    有新消息吗? 我们现在非常紧迫。 负责的团队是否能够分析问题?

    我们有大约1000个 Sitara 4和1000个 Sitara 5库存、如果问题将在合理的时间内得到解决、或者我们应该考虑其他器件将产品推向市场、我们的 CEO 坚持要求您快速做出响应。

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

    Alex、

    我正在与我们的团队合作、如果有任何进展、将尽快为您提供最新信息。

    谢谢、
    Garrett

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

    我们将查看测试结果报告、特别是针对明天发布的数据包应力测试。 遗憾的是、我们将无法在下周结束之前完成任何重新测试。

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

    Alex、

    作为 Linux HSR/PRP 工作的一部分、固件中进行了大量改进和错误修复。 2018年6月、TI.com 上发布了 HSR/PRP 版本1.0.4、因此我在夜间构建中将固件替换为最新的 HSR/PRP 版本1.0.5、然后重新运行测试、现在即使是33Mbps、问题也会消失。

    供参考、我们在此提供了 Linux HSR/PRP 数据包基准测试-

    以前使用15Mpbs (RawSocket.exe 250 4)或13Mbps (RawSocket.exe 250 3)时、数据包丢失问题在我的设置中以及 HSR/PRP 1.0.4版本中也会出现、但正如您所观察到的那样、丢失数据包的频率更低。

    让我来看看我们如何使用最新的 HSR/PRP 1.0.5为您提供支持...

    此致、
    Garrett

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

    Garrett、

    听起来很棒! 我唯一的问题 是、我们还看到使用 ICSS_EMAC 固件、因此我希望 EMAC 固件也会更新。

    但是、无论哪种方式、我们都准备好在收到新鲜食材后立即帮助进行测试。

    此致、
    亚历山大

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

    Garrett、

    Linux SDK 05.03.00.07是否包含与1.0.5相同的二进制文件? 我可以使用 objcopy 将 ELF 文件从 Linux SDK 转换为 TI-RTOS 格式吗? 或者、您是否在 git.ti.com 上有 NDK (但我找不到它)?

    此致、
    亚历山大

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

    是的、Linux SDK 05.03.00.07在二进制文件中包含与1.0.5相同的错误修复/功能增强。 我不确定 objcopy 是否可以将二进制文件转换为适用于 RTOS 的.h 文件、但如果您在 Linux 加载二进制文件后使用 CCS 转储程序存储器、将其保存为原始数据、然后将其作为适用于 RTOS 的 PRU 头文件进行操作、则该函数应该起作用。

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

    Garrett、

    我使用以下命令行将 Linux PRU 二进制文件转换为数组:

    hexpru.exe --array --array:name_prefix=PRU0_firmware -exclude=.resource_table AM437x-pru0-pruprp-fw.elf  

    然后我更正了数组名称并在项目中替换了它们。

    不幸的是、这不会改变我的问题。 我仍然看到相同的错误计数器和相同的延迟。

    S T A T I S T I C S
    
    Lookup error A:00000028
    Lookup error B:00000000
    
    TX WrongLan RX 错误 节点 代理唯一双面打印器。 多个 小猫头鹰
    --- ---- ---- ---- ---- ---- ---- ---- ---- ----
    00000003 00000000 00000028 00000000 00000003 00000000 00000000 00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000028
    00000000 00000000 00000000 00000000 00000024 00000000 00000000
    
    
    
    ICSS_EMAC_DRV_VERSION_ID :0x100000f
    
    Device config:PRP
    
    HSR/PRP Application Menu Options。 按键(上/下
    
    S:显示统计
    信息 L:显示 LRE 统计信息
    C:显示 HSR/PRP 配置
    N:显示振铃成员/节点表
    M:多播过滤器处理
    V:VLAN 过滤器处理
    F:主机 Rx 中断配置| 0:禁用| 1. 启用| 2. 使用自适应逻辑 I 启用
    :分配 IP 地址
    P:显示 PTP/1588状态
    R:运行 Rx/Tx 测试
    H:帮助菜单。 显示了所有选项的详细信息
    
    
    Exp=2841、Exp=2706、dT=33785
    *
    Curr=1620、Exp=1486、dT=33536
    *
    Curr=2192、Exp=2058、dT=33668
    *
    Curr=2927、
    
    
    
    
    
    
    
    
    Lookup =2793、dT=33526 * Curr=3984、Exp=3849、dT=3375* I =3375* T:3270 A T 错误:3270 C、I T = 3375 * I T = 3375
    
    TX WrongLan RX 错误 节点 代理唯一双面打印器。 多个 小猫头鹰
    --- ---- ---- ---- ---- ---- ---- ---- ---- ----
    00000972 00000000 23124029 00002409 00000004 00000000 00000000 00000000 00000000 00000000 00000000
    00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    23124029 00000000 00000000 00000000 00000000 23122544 00000000 00000000
    

    此致、
    亚历山大

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

    问题的根源似乎是风暴预防功能。 我运行 EMAC 测试、然后打印 EMAC 统计数据、如果错过帧、风暴预防计数器会增加。 不幸的是,我无法使用 ICSS_EmacDisableStormPrevention ()函数。 我在 ICSS_EMAC_DEFAULT_FW_STORE_ANCE_OFFSET 下打印了该值、但在流量发生器处于活动状态时每次打印该值时、该值都会增加。
    此外、我没有找到针对 HSR/PRP 代码的相同调用。
    您能告诉我们如何正确禁用风暴预防、这是可行的吗? 请注意,SV 数据包是多播的。

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

    Alex、

    您可以在此处上传 PLSDK 中的固件二进制文件吗?

    关于风暴控制,您可以尝试启用多播过滤器,该过滤器将绕过多播数据包(SV)的风暴控制逻辑,但 ICSS_EmacDisableStormPrevention ()应该起作用。

    hsrPrp_multicast_filter_config (emachandle、multicast_filter_enabled);

    此致、
    Garrett

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

    Garrett、

    我不确定我是否正确理解:什么是 PLSDK 二进制文件? 您是指我用于在 IDK 上进行测试的 SD 卡二进制文件吗?

    我尝试禁用风暴预防、如下所示:

    ICSS_EmacInit (emachandle、&pruss_intc_initdata、operateMode? ICSS_EMAC_MODE_SWITCH:(ICSS_EMAC_MODE_MAC1|ICSS_EMAC_MODE_DUALMAC);
    
    IF (运行模式)
    {
    hsrPrphandle =(hsrPrpHandle *) malloc (sizeof (hsrPrpHandle));
    hsrPrpHandle_init (hsrPrphandle);//初始化 HSR 句柄*/
    hsrPrp_multicast_filter_config (emachandle、multicast_filter_enabled);
    }
    其他
    {
    hsrPrphandle =空;
    ICSS_EmacDisableStormPrevention (ICSS_EMAC_PORT_1、emachandle);
    ICSS_EmacDisableStormPrevention (ICSS_EMAC_PORT_2、emachandle);
    }
    

    现在尝试启用 PRP 和多播过滤器。

    此致、
    亚历山大

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

    我是说您从 PLSDK 转换的 PRP 固件二进制文件、希望在我的设置中进行测试...
    我从夜间构建中获取了固件、如果该固件不相同、则该固件应非常接近 PLSDK v5.3中的固件。

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

    在这里。

    e2e.ti.com/.../icss_5F00_prp_5F00_pruX_5F00_bin.7z

    在 未配置掩码和 MAC 的情况下启用多播过滤没有帮助。 我添加了以下代码:

    ICSS_EmacInit (emachandle、&pruss_intc_initdata、operateMode? ICSS_EMAC_MODE_SWITCH:(ICSS_EMAC_MODE_MAC1|ICSS_EMAC_MODE_DUALMAC);
    
    IF (运行模式)
    {
    hsrPrphandle =(hsrPrpHandle *) malloc (sizeof (hsrPrpHandle));
    hsrPrpHandle_init (hsrPrphandle);//初始化 HSR 句柄*/
    hsrPrp_multicast_filter_config (emachandle、multicast_filter_enabled);
    hsrPrp_multicing_filter_override_hashmask (emachandle、"255 255 255 0 0");
    hsrPrp_multicing_filter_update_MacID (emachandle、"1 12 205 0 0"、Add_multicing_MAC_ID);
    }
    其他
    {
    hsrPrphandle =空;
    ICSS_EmacDisableStormPrevention (ICSS_EMAC_PORT_1、emachandle);
    ICSS_EmacDisableStormPrevention (ICSS_EMAC_PORT_2、emachandle);
    }
    
    

    现在继续测试。 但原始调用 hsrPrp_multicing_filter_override_hashmask 和 hsrPrp_multicing_filter_update_mcid 有时会导致崩溃。 原因是此代码:

    uint8_t multicastAddrTemp[ether _ADDR_LEN];
    
    /*从传入的多态 Addr*/中提取十六进制值
    sscanf (multisastAddr、"%u %u %u %u %u %u"、&multisastAddrTemp[0]、
    &multisastAddrTemp[1]、&multisastAddrTemp[2]、&multisastAddrTemp[3]、
    &multisastAddrTemp[4]、&multisastAddrTemp[5]);
    

    sscanf 需要 unsigned int *而不是 uint8_t *(太短且未对齐)。 此代码需要在以后的版本中进行更正、但我更愿意传递数组而不是小数串。 我以前从未见过任何一个十进制格式的 MAC 地址。

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

    设置掩码和 MAC 似乎解决了 PRP 模式的问题。
    对于 EMAC 模式、ICSS_EmacDisableStormPrevention 调用仍存在问题。 不确定我的错误是什么对我不起作用。 如果我无法使其正常工作、我仍然可以从 EMAC 固件中删除所有这些代码、但我不希望这样做。

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

    Garrett、

    我发现 ICSS_EmacDisableStormPrevention 不起作用的原因、在 NDK 初始化和 NDK 复位之前调用它。 现在、一切似乎都正常。

    非常感谢您的帮助。

    此致、
    亚历山大

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

    太棒了! 感谢您的更新。 您无需在下一版本中使用增强的固件禁用风暴预防。

    此致、
    Garrett