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.

[参考译文] ICSSG-AM243X:MCU-PLUS-SDK 开关–将一个端口切换到正向状态时意外循环

Guru**** 2535450 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566365/mcu-plus-sdk-am243x-icssg-switch-unexpected-loop-when-switching-one-port-to-forward-state

器件型号:AM243X - MCU-PLUS-SDK


工具/软件:

您好:

我正在根据 enet-layer2-icssg 示例 在 AM243x EVM (MCU+ SDK) 上对定制工程运行测试。

设置:

  • 对于测试 2、将端口设置为阻塞或测试 1、一个阻止另一个转发

  • 两个 ICSSG 端口都连接到同一个外部交换机(网络环路场景)。

测试 1–两个端口均被阻止:
我将两个端口都设置为ICSSG_PORT_STATE_BLOCKING
正如预期的那样、未观察到网络环路。

测试 2–一个端口转发、一个端口阻塞:
然后将两个端口中的一个更改为ICSSG_PORT_STATE_FORWARD
此时、我得到了一个网络环路。
这不是预期行为、因为只有一个端口应转发流量、而另一个端口应保持阻塞。


分析:
我比较了在 Linux 下发送到 PRU 的 R30 消息与 MCU+ SDK:

Linux(内核驱动程序):

static const struct icssg_r30_cmd emac_r32_bitmask[] = {
    {{0xffff0004, 0xffff0100, 0xffff0004, EMAC_NONE}}, /* EMAC_PORT_DISABLE */
    {{0xfffb0040, 0xfeff0200, 0xfeff0200, EMAC_NONE}}, /* EMAC_PORT_BLOCK */
    {{0xffbb0000, 0xfcff0000, 0xdcfb0000, EMAC_NONE}}, /* EMAC_PORT_FORWARD */
};

MCU + SDK:

[ICSSG_UTILS_R30_CMD_DISABLE] = {
    { 0xffff0004, 0xffff0100, 0xffff0104, ICSSG_UTILS_CMD_NONE }
},
[ICSSG_UTILS_R30_CMD_BLOCK] = {
    { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xffff0200 }
},
[ICSSG_UTILS_R30_CMD_FORWARD] = {
    { 0xffbb0000, 0xfcff0000, 0xdcf30000, ICSSG_UTILS_CMD_NONE }
},

我注意到 Linux 和 MCU+ SDK 的位掩码不同。 如果我将位掩码从 Linux 应用于 MCU SDK、则结果不会更好Disappointed

然后、我尝试 手动调整 MCU+ SDK 值、得到以下值的理想结果:

[ICSSG_UTILS_R30_CMD_BLOCK] = {
    { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xfeff0200 }
},
[ICSSG_UTILS_R30_CMD_FORWARD] = {
    { 0xffbb0000, 0xfcff0000, 0xdff30000, 0xFCFF0000 }
},

这改善了情况,但结果仍然不完全正确:有时,如果我将两个端口都设置为转发,则数据包不会正确转发。


问题:

  1. RXPRU/TXPRU/RTU 固件 Linux 和 MCU+ SDK 之间也是如此?

  2. 我的测试对测试阻塞和转发数据包是否有意义? 注意:我可以在阻塞模式下发送特殊数据包!

  3. R30 位掩码是否正确?

提前感谢您的帮助!

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

    您好:

    我认为更新后的位掩码的剩余问题出在 ICSSG_UTILS_R30_CMD_DISABLE 上。 实际上、它没有使用 RTU_REM。

    请在 icssg_utils.c 上找到我的最新“修复程序“:

    [ICSSG_UTILS_R30_CMD_DISABLE] =
    {
        { 0xffff0004, 0xffff0100, 0xffff0004, 0xffff0100 }
    },
    [ICSSG_UTILS_R30_CMD_BLOCK] = {
        { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xfeff0200 }
    },
    [ICSSG_UTILS_R30_CMD_FORWARD] = {
        { 0xffbb0000, 0xfcff0000, 0xdff30000, 0xFCFF0000 }
    },

    这种修复是有意义的吗? 或者初始位掩码应该起作用吗?

    谢谢

    R é mi

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

    尊敬的 Remi:

    [引述 userid=“643222" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1566365/mcu-plus-sdk-am243x-icssg-switch-unexpected-loop-when-switching-one-port-to-forward-state
    • 我的测试对测试阻塞和转发数据包是否有意义? 注意:我可以在阻塞模式下发送特殊数据包!

    [/报价]

    在阻塞端口状态下、只允许发送和接收特殊数据包。 例如:特殊数据包包括对等延迟消息(用于时间同步)和桥接协议数据单元 (BPDU) 数据包(用于生成树协议)。 在交换循环方案中、节点继续交换这些特殊数据包、即使端口处于阻塞状态、因为它们对于网络拓扑管理和定时同步至关重要。  

    您的用例是什么?

    您正在比较哪个 Linux SDK 和 RTOS SDK 版本位掩码? 我需要 仔细检查位掩码

    BR
    Jc.

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

    尊敬的 Jayachandran:

    在阻塞端口状态下、只允许发送和接收特殊数据包。 例如:特殊数据包包括对等延迟消息(用于时间同步)和桥接协议数据单元 (BPDU) 数据包(用于生成树协议)。 在交换循环方案中、节点继续交换这些特殊数据包、即使端口处于阻塞状态、因为它们对于网络拓扑管理和定时同步至关重要。  [/报价]

    我的理解也是、这就是为什么我期望一个端口 阻塞 、另一个端口转发、当我在网络上发送广播时、两个端口连接在标准交换机上时没有“环路“。

    我能够在阻塞端口上发送特殊的数据包(在 FDB 中标识为特殊的数据包):这是可以的。

    我的问题是、如果我转发一个端口、第二个端口就不再阻塞并导致循环。 我的理解是、如果另一个端口向前移动、阻塞端口应保持阻塞。 这是我用我写的修复程序得到的。

    *两个端口阻塞:只能发送和接收 FDB 特殊数据包

    *一个端口转发和另一个阻塞:阻塞端口可以接收 EMIT /特殊包,但不能接收其他包

    *两个端口转发,作为一个交换器

    ]哪个 Linux SDK

    TI-PROCESSOR-SDK-LINUX-am64xx-EVM-09.02.01.10

    RTOS SDK

    AM243X-AM243X 11_00_00_15 MCU-PLUS-SDK

    此致、

    R é mi

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

    再次大家好、  

    我检查了最新处理器 SDK (11.01.05.03) 的位掩码、这与 ti-processor-sdk-linux-am64xx-evm-09.02.01.10 相同

    我在最新的 MCU-PLUS-SDK PLUS SDK (11.01.00.17) 上检查了 am24 的位掩码、这与 AM243X-AM243X 11_00_00_15 相同

    R é mi

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

    尊敬的 Remi:

    09.02 之后、我们在 MCU+ SDK 中修复了这个问题。  

    您是否尝试过下面的更改? 位掩码仅在“块“ 命令上更改。

        [ICSSG_UTILS_R30_CMD_DISABLE] =
        {
            { 0xffff0004, 0xffff0100, 0xffff0104, ICSSG_UTILS_CMD_NONE }
        },
    
        [ICSSG_UTILS_R30_CMD_BLOCK] =
        {
            { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xffff0200 }
        },
    
        [ICSSG_UTILS_R30_CMD_FORWARD] =
        {
            { 0xffbb0000, 0xfcff0000, 0xdcf30000, ICSSG_UTILS_CMD_NONE }
        },

    BR、
    Jc.

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

    尊敬的 Jayachandran:

    我不知道这是否是一个误解、但您的块位掩码

    { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xffff0200 }

    完全等于我在初始 POST 中发送的 MCU + SDK 的块位掩码

    { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xffff0200 }

    此致、

    R é mi

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

    尊敬的 Remi:

    纠正、保持禁用不变并仅更改“forward"命令“命令。

    [ICSSG_UTILS_R30_CMD_DISABLE] =
    {
    { 0xffff0004, 0xffff0100, 0xffff0104, ICSSG_UTILS_CMD_NONE }
    },
    
    [ICSSG_UTILS_R30_CMD_BLOCK] =
    {
    { 0xfffb0040, 0xfeff0200, 0xfffb0008, 0xffff0200 }
    },
    
    [ICSSG_UTILS_R30_CMD_FORWARD] =
    {
    { 0xffbb0000, 0xfcff0000, 0xdcf30000, 0xFCFF0000}
    }

    BR
    Jc.

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

    您好、

    它看起来很奇怪我的初始修复建议(相同的案例和转发 REM_RTU 的价值)、但正如我所说、此修复没有完成(请参阅我关于更新 RTU 和 REM_RTU 禁用的完整建议)

    请在 icssg_utils.c 找到我最新的“fix":“:

    在没有最新修复的情况下、根据两个端口的禁用/转发/阻塞顺序)、有时在正向模式下没有转发。

    此致、

    R é mi