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.

[参考译文] AM263P4-Q1:以太网 CPSW 策略器配置

Guru**** 2826475 points

Other Parts Discussed in Thread: AM263P4, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration

器件型号: AM263P4-Q1
主题中讨论的其他器件: AM263P4SysConfig

我正在将 AM263P4 LaunchPad 与 MCU+ SDK 10.02.15 配合使用。
我目前正在调试 enet_layer2_cpsw_example、并尝试配置 CPSW 策略器、以根据特定源 MAC 地址过滤帧。

为此、我使用了 L2_cpsw_cfg.c  文件中的函数 EnetApp_setCpswPolicer ()。
我已将其配置为仅接受来自特定源 MAC 地址的帧。

但是、在测试期间、我仍然会从不同的 MAC 地址接收帧、而不仅仅是从配置的源接收帧。

请帮助我了解以下内容:

  1. 是否需要任何其他配置来使策略器作为基于源的过滤器工作?

  2. 是否需要任何已知限制或特定的寄存器设置来确保仅接受来自给定 MAC 地址的帧?

此外、我发现很难理解示例中使用的 CPSW 配置结构和参数。 因此、我编写自己的简化应用程序很难使用 CPSW 来执行基本帧发送和接收。

是否有任何简单的示例或文档说明如何执行基本的 CPSW 帧发送和接收(无复杂的配置结构)?

此致

Sravanthi R.

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

    尊敬的团队:

    我们能否就此为客户提供帮助?

    此致、

    madhurya  

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

    此外、您还可以建议如何接收原始以太网帧并说明以下寄存器、何时会触发中断。

    是否在接收到某些数据包(CPSW_REGS_INT_SS_C0_TH_THRESH_EN_REG 寄存器中提到的)后触发中断   作为阈值级别或我们在一个 DMA Tx 通道的系统配置中提到的数据包数。  

    此致

    Sravanthi R.

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

    只是上述查询的剩余部分。

    此致

    Sravanthi R.

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

    您好 Sravanthi、

     我相信您正在尝试使用与单播数据包相对应的特定 MAC 地址接收数据包。
    如果是、请在您的应用程序中实现以下函数、并在“EnetApp_open"之后“之后调用该函数。

    void EnetApp_addUnicastMacAddr(EnetApp_PerCtxt *perCtxt, uint8_t* pUnicastMacAddr)
    {
        CpswAle_SetUcastEntryInArgs setUcastInArgs;
        uint32_t entryIdx;
        /* ALE entry with "secure" bit cleared is required for loopback */
        setUcastInArgs.addr.vlanId  = 0U;
        setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM;
        setUcastInArgs.info.blocked = false;
        setUcastInArgs.info.secure  = true;
        setUcastInArgs.info.super   = false;
        setUcastInArgs.info.ageable = false;
        setUcastInArgs.info.trunk   = false;
        EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U], pUnicastMacAddr);
        ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx);
    
        ENET_IOCTL(perCtxt->hEnet,  gEnetApp.coreId, CPSW_ALE_IOCTL_ADD_UCAST, &prms, status);
        if (status != ENET_SOK)
        {
            EnetAppUtils_print("Failed to add ucast entry: %d\r\n", status);
        }
    }

    同样、以上内容仅适用于单播 MAC 地址。 但是、如果尝试添加多播 MAC 地址、则 IOCTL 会不同 (CPSW_ALE_IOCTL_ADD_MCAST)。

    谢谢。此致、

    Pradeep

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我发现很难理解示例中使用的 CPSW 配置结构和参数。 因此、编写我自己的简化应用程序(使用 CPSW 执行基本帧传输和接收)具有挑战性。

    您好 Sravanthi、
     我们可以在这里提供帮助。 您的用例是什么? 您希望使用 CPSW 实现哪些功能? 在此基础上、我们可以提供您需要的确切示例和详细信息。

    此致、

    Pradeep

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

    您好 Sravanthi、
     关于上述查询、您不需要使用上述低级寄存器来发送和接收原始以太网帧。 有易于使用的驱动程序包装器。 请分享有关用例/应用的详细信息。 我们可以提供指南。

    此致、

    Pradeep

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

    HII Pradeep

    我正在尝试使用 NORTOS 中 AM263P4 上的 CPSW 外设发送和接收原始以太网帧。首先、我使用了 MCU+SDK 10.02.15 中的“CPSW 环回示例(PHY 端)“、并对以下配置和代码级别进行了更改。

    SysConfig 修改

    1. 禁用环回模式

      • 我在 SysConfig 中禁用了内部 CPSW 环回模式、以允许通过 PHY 发送和接收外部帧。

    2. DMA 通道配置

      • 在 DMA 通道设置下配置了 4 个 TX 数据包和 32 个 RX 数据包。

    3. MAC 地址分配

      • 已选择手动 MAC 地址分配、而不是自动分配。

    4. RTOS 型号

      • 将 RTOS 型号设置为 NoRTOS(裸机模式)。

    5. 文件生成控制

      • 禁止自动生成 ti_enet_OPEN_close.c、并手动将其添加到工程中。

      • 之所以需要这样、是因为我修改了逻辑以删除 PHY 处理程序任务并以不同的方式处理周期性 PHY 时钟周期。  

    代码级更改

    1. 已删除任务创建

      • 原始示例创建了用于处理 PHY 状态机和链路监控的 RTOS 任务。

      • 我删除了所有任务创建和任务循环函数、因为这是一个 NoRTOS 环境。

    2. 定期节拍处理

      • 我不使用单独的 PHY 任务,而是   直接从一个定时器回调函数调用 enet_periodicTick () 来定期为 CPSW/PHY 提供服务,其中定时器的初始化位于 EnetApp_initPhyStateHandlerTask () 函数中。

    3. 基于轮询的 RX/TX 逻辑

      • 在接收 ISR 回调中、rcvd_isr = 1每当收到数据时、我都会设置一个标志 ()。

      • 在主循环中、我持续轮询此标志以处理接收到的帧。

      • 同样、我为 TX 和统计信息显示设置标志、这将根据用户选择进行处理。

    4. printf 替换

      • 删除 RTOS 依赖项后、示例的 EnetAppUtils_printf() 函数开始触发断言失败 。

      • 为了解决这个问题,我用标准printf()语句替换了所有 EnetAppUtils_printf() 调用。

    进行上述更改并调试 NoRTOS 版本后、我发现:

    • 代码在驱动程序初始化期间卡在以下函数调用链中:

    EnetApp_driverOpen ()
      ↓μ s
      EnetAppUtils_initResourceConfig()
        ↓μ s
        EnetAppUtils_updateMacResPart()
          ↓μ s
          EnetAppUtils_recureeCoreMacAllocation() ←执行卡在此处

    附加了我更改过的 main.c、loopback_test.c、loopback_main.c、ti_enet_open_close.c 文件。

    e2e.ti.com/.../3021.main.ce2e.ti.com/.../loopback_5F00_main.ce2e.ti.com/.../loopback_5F00_test.ce2e.ti.com/.../1362.ti_5F00_enet_5F00_open_5F00_close.c

    我还观察到在帧接收期间如何触发 RX 中断回调的不规则模式。
    具体来说、RX ISR 回调在每次接收单帧后都不会调用、而是在接收到随机数量的帧后触发。

    那么、我想了解在接收到多少个帧后、实际上触发了 RX 中断? 以及为何每个传入帧的延迟不一致。

    此致

    Sravanthi R.

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

    HII Pradeep

    上述查询是否有任何更新。

    此致

    Sravanthi R.

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

    您好 Sravanthi、
    感谢您发送编修。

    目前、SDK 中有一个示例演示用于以太网应用的裸机 (NORTOS)。
    请参阅 https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/11_00_00_19/exports/docs/api_guide_am263x/EXAMPLES_ENET_LWIP_CPSW_HTTPSERVER.html 示例以开发裸机应用

    以下是实现裸机 (NORTOS) 应用的建议。

    1. 更改了 SysConfig GUI 工具、以选择 RTOS 型号为 NORTOS(我看到您已正确操作)。
    2. 以下更改正确:
      EnetAppUtils_recieCoreMacAllocation () ←执行滞留在此处

      执行受阻的确切行是什么? 您能否提供更多有关“执行“滞留的详细信息 — 您认为这是“正在成功“吗? 或执行调用或它卡在任何循环中?

      此致、

      Pradeep

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

    HII Pradeep

    在应用程序 (loopbacktest.c) 中、  每隔 100 毫秒定期调用 EnetApp_phyStateHandler ()。  [/报价]

    EnetApp_phyStateHandler() 不包含任何代码。 为什么要添加此函数? 我是否需要在函数中添加任何内容并将其包含在内。

    函数  enet_periodicTick () 的作用是什么。 此函数是在 enet.h 文件中定义的。

    执行卡住的确切行是什么? 您能否提供更多有关“执行“滞留的详细信息 — 您认为这是“正在成功“吗? 或执行调用或它卡在任何循环中?

    在  执行 EnetAppUtils_printf() 语句后的 EnetAppUtils_reduceCoreMacAllocation() 函数中、它在无限 while 循环中声明。

    此致

    Sravanthi R.

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

    HII Pradeep

    上述查询是否有任何更新。

    此致

    Sravanthi R.

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

    您好 Sravanthi、

    EnetApp_phyStateHandler() 不包含任何代码。 为什么要添加此函数?

    此函数位于 SysConfig 生成的代码中。 它位于 ti_enet_OPEN_close.c 中、我来解释此函数的作用。

    它等待计时器信标。 此信标由名为 EnetApp_timerCb () 的函数发布。 此函数是回调函数、它在函数 EnetApp_createPhyStateHandlerTask() 中注册为回调。 这会在 Enet 应用驱动程序打开的一部分时发生。  

    因此,当定时器回调被触发时, 调用 enet_periodicTick ()。 该函数调用另一个名为  Cpsw_cournitick () 的函数。 此函数检查 phy 链路状态。

    基本上、流程是、

    时钟计时器 →回调  →发布信标→pends 信标由  EnetApp_phyStateHandler  →调用 enet_periodicTick→调用 Cpsw_periodicTick  ()。

    请参阅函数 Cpsw_periodicTick () 了解更多信息。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 EnetAppUtils_reduceCoreMacAllocation () 函数中执行 EnetAppUtils_printf() 语句后、它在无限 while 循环中生效。

    抱歉、我无法指出此处描述的断言条件。 这种情况  

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

    您好 Sravanthi、


    [引述 userid=“647595" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration/6109304

    EnetApp_phyStateHandler() 不包含任何代码。 为什么要添加此函数? 我是否需要在函数中添加任何内容并将其包含在内。

    函数  enet_periodicTick () 的作用是什么。 此函数是在 enet.h 文件中定义的。

    [/报价]


    Enet 驱动程序希望应用程序定期调用 enet_periodPick()(至少每 100 毫秒调用一次 — 如果您更频繁地调用它,则不会出现任何问题)。

    在 NO_RTOS 情况下, 下面是 EnetApp_phyStateHandler () 实现的预期生成。

    in generated/ti_enet_open_close.c :
    
    ...
    void EnetApp_phyStateHandler()
    {
        Enet_periodicTick(gEnetAppSysCfgObj.hEnet);
    }
    ...

    请检查并更正。

    关于、

    在 EnetAppUtils_reduceCoreMacAllocation () 函数中执行 EnetAppUtils_printf() 语句后、它在无限 while 循环中生效。


    我想,EnetAppUtils_printf() 会导致堆栈损坏。 请在 linker.cmd 应用程序中增加栈大小并检查崩溃是否消失。


    此致、

    Pradeep

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

    您好、

    我之前发布的.c 文件也包含在内 TI_enet_OPEN_CLOSE.c 。 我禁用了自动生成此文件、手动应用了修改、并将其添加到工程中。 我在中所做的更改 TI_enet_OPEN_CLOSE.c 为:

    • 指定 EnetApp_createPhyStateHandlerTask() 、我删除了 PHY 任务创建。

    • 可是,我却不知道 (五)公司名称 计时器回调函数中 EnetApp_timerCb ()

    我猜、EnetAppUtils_printf() 会导致堆栈损坏。 请在 linker.cmd 应用程序中增加栈大小并检查崩溃是否消失。
    [/报价]

    但是、我使用的是 在 NORTOS 实现中的 EnetAppUtils_printf() 我注意到它仍然被路由到 FreeRTOS 执行 print 语句期间的源文件。 即使 System Config 设置为 NORTOS、所有包含和编译器设置也看起来都处于 FreeRTOS 模式。 这使我怀疑这种不匹配可能导致崩溃。

     “我知道,就一会儿。 main.c loopback_main.c 、和 loopback_test.c 上面发布的文件并将其复制到中 Enet_cpsw_rahttpserver Project(即 NORTOS),替换项目的现有源文件。

    但在调试期间、我注意到 PHY 永远不会建立链路。
    函数 EnetApp_waitForLinkUp() 始终将 PHY 链路报告为 false、这意味着 PHY 根本没有建立链接。

    此致

    Sravanthi R.

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

    您好  Sravanthi、

    下面使用的是 nortos 版本的 enet libs 吗? 如果看到示例的 makefile、则可以看到 libs 基于 nortos。 这对你也是一样的吗?  

    这是从的 makefile 得到的  Enet_cpsw_rahttpserver  示例。

    此致、

    Aswin

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

    尊敬的 Aswin:

    考虑到这一点、 我采取了 main.c loopback_main.c 、和 loopback_test.c 上面发布的文件并将其复制到中 Enet_cpsw_rahttpserver project(即 NORTOS)、替换项目的现有源文件。

    遵循此方法后、即替换的.c 文件 Enet_cpsw_rahttpserver  示例。 main.c loopback_main.c 、和 loopback_test.c  上面发布的文件。 生成的 makefile 文件包含您在上面发布的相同内容。

    问题我在这里注意到 PHY 没有链接。

    此致

    Sravanthi R.

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

    您好 Sravanthi、


    关于-

    问题我在这里发现 PHY 没有链接。

    在非 RTOS 端,你必须调用 enet_periodicTick ();

    ```μ s

    void EnetApp_phyStateHandler()

       Enet_periodicTick (gEnetAppSysCfgObj.henet);
    }

    ```μ s
    链路状态仅通过上述函数调用进行更新。

    因此、请确保在等待链路建立时进行此调用。

    此致、

    Pradeep

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

    HII Pradeep

    感谢您的答复。

    实际上  enet_periodicTick (gEnetAppSysCfgObj.henet) 和 EnetApp_waitForLinkUp () 两个函数都 检查 PHY 链路状态是否正确? 那么我有困惑为什么在调用函数  enet_periodicTick (gEnetAppSysCfgObj.henet) 时 只有 lnik 状态会更新。

    哪个函数实际上建立了 phy 链路?

    此致

    Sravanthi R.

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

    Sravanthi,

    我正在查看一些冗长的 e2e 主题、以便对内部 AI 模型进行实验、从而查看您最后的问题。  我没有对结果进行任何质量控制、因为我不熟悉此主题。  请查看是否有帮助、如果不有用、请也告知我们。

    功能之间的主要区别

    Enet_periodicTick()EnetApp_waitForLinkUp()提供不同的用途:

    1. (五)公司名称 -更新 PHY 状态

    此功能是主动的 轮询 PHY 硬件 并更新内部驱动器状态。 调用链为:

    (五)公司名称
    →cpsw_periodicTick ()
    →EnetPhy_tick()
    →读取 PHY 寄存器(例如 MII_BMSR)
    →更新驱动程序中的链接状态

    必须定期(每 100ms)调用该函数:

    • 读取实际的 PHY 硬件寄存器
    • 检测链路状态更改(向上/向下)
    • 更新驱动程序的内部链接状态
    • 处理 PHY 状态机转换

    2. EnetApp_waitForLinkUp() -读取缓存状态

    仅此功能 读取已缓存的链接状态 时钟输出。 它不会轮询 PHY 硬件本身。 它只是检查Enet_periodicTick()最后发现的内容。

    哪个函数建立 PHY 链路?

    两个函数都不会“建立“链接。 。 物理链路建立 在以下情况下会在硬件中自动发生:

    1. PHY 已初始化 (期间) EnetApp_driverOpen()

      • PHY 寄存器被配置
      • 已开始自动协商(如果已启用)
    2. 已连接 PD 器件之间的差别

    3. 双方协商 速度/双工设置

    4. Enet_periodicTick()检测 通过读取 PHY 状态寄存器建立链路

    您的问题 — 为什么链接不出现

    在 NORTOS 实现中、您需要 Enet_periodicTick()等待时呼叫 对于建立链路:

    ⌄μ s
    ⌄μ s
    静态 void EnetApp_waitForLinkUp (void)
    Bool LinkUp = false
    while(!链路建立)
    //严重:轮询 PHY 以更新链路状态
    Enet_periodicTick (gEnetAppSysCfgObj.henet);
    //轮询之间的小延迟
    ClockP_usleep (100000);// 100ms
    //现在检查链路是否已接通
    LinkUp = EnetApp_isPortLinkUp (gEnetAppSysCfgObj.henet);
    }
    }

    而无需调用Enet_periodicTick()循环中的函数 、驱动程序从不读取 PHY 寄存器,因此它永远不会知道链路出现了 — 即使它是物理连接的!

    摘要

    • Enet_periodicTick()=主动轮询 PHY 硬件(更新状态)
    • EnetApp_waitForLinkUp()=被动读取缓存状态
    • 链路建立 =在 PHY 硬件中自动发生
    • 链路检测 =需要定期调用 Enet_periodicTick()
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好  Sravanthi、  

    在 Jason 的回复中,基本上 EnetApp_waitForLinkUp() 将检查是否获得了链接。 此 API 不直接检查 phy 状态。

    phy 的状态通过 phy 状态机进行检查。 请参阅以下链接中的 PHY 驱动程序部分、

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM263PX/latest/exports/docs/api_guide_am263px/enetphy_guide_top.html

    应届毕业生、

    Aswin

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

    感谢您的答复。 我已经回顾了上述建议并理解了这些建议。

    目前、PHY 链接成功、我能够接收数据。 然而、我面临着传输问题。

    当我向 DMA 提交 TX 数据包时、就是  EnetApp_txIsrFxn() 中断函数按预期触发、但我在 Wireshark 中看不到任何发送的帧。 我还将系统配置为环回模式、即使在这种情况下、尽管触发了 TX ISR、但也不会收到返回的数据。

    此外、我实现了一个函数来阻止特定的单播 MAC 地址、但我仍在接收来自该 MAC 地址的帧。 这种行为出乎意料。

    我还观察到 针对 接收到的随机帧数触发 RX 中断 。 我想澄清这种行为是否符合预期、因为我正在使用在 Rx ISR 中调用的 EnetDma_securiveRxPKT()、此 API 一次只从缓冲区描述符队列中检索一个数据包、那么在应用程序中检索某些 RX 帧之前、它们可能被覆盖或丢失?

    另一个问题是是否可以直接在 CCS 内存浏览器中查看缓冲区描述符指向的实际以太网帧数据、以验证数据是否正确写入存储器。

    执行测试设置和修改

    执行此测试 NoRTOS (而不是 FreeRTOS)、我进行了以下更改:

    • 我使用了 enetCpswRawHttpServer示例作为基础。

    • 我删除了以下文件:

      • app_main.c

      • app_httpserver.c

      • app_cpswconfighandler.h

      • app_cpswconfighandler.c

    • 我将它们替换为中的文件 CPSW 环回示例

      • main.c

      • loopback_main.c

      • loopback_test.c

      • loopback_cfg.c

      • loopback_cfg.h

      • loopback_common.h

    • 我还从 SysConfig 中删除了 MAC 端口设置中的环回配置。

    • 完成这些更改后、我在 CCS 中构建和调试代码。

    尽管执行了这些步骤、但我仍然面临着 TX 可见性问题和 RX 行为不一致、如上所述。

    我已附上上述文件。 请查看它们并建议是否需要进行任何更改。

    Regardse2e.ti.com/.../project-.c-files.zip

    Sravanthi R.

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

    您好 Sravanthi、

    因为我是 OOO、所以对我的延迟很满意。 让我检查一下这些问题、然后返回给您。

    [引述 userid=“647595" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration/6174462

    当我向 DMA 提交 TX 数据包时、就是  EnetApp_txIsrFxn() 中断函数按预期触发、但我在 Wireshark 中看不到任何发送的帧。 我还将系统配置为环回模式、即使在这种情况下、尽管触发了 TX ISR、但也不会收到返回的数据。

    [/报价]

    首先、您能否查看 CPSW 统计信息。 “怎么样? 您是否能够看到从 Mac 端口和主机端口输出的数据包?

    此致、

    Aswin

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

    您好 Sravanthi、

    [引述 userid=“647595" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration/6174462

    此外、我实现了一个函数来阻止特定的单播 MAC 地址、但我仍在接收来自该 MAC 地址的帧。 这种行为出乎意料。

    [/报价]

    请问您是否正尝试根据目的地或源单播地址来阻止 pacetts?

    此致、

    Aswin

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

    尊敬的 Aswin:

    是否要根据目标地址或源单播地址来阻止 pacetts?

    我正在尝试根据源地址(即在接收数据包时)阻止数据包。

    首先、您能否查看 CPSW 统计信息。 “怎么样? 您是否能够看到从 Mac 端口和主机端口输出的数据包?

    否我看不到任何数据包从 Mac 端口/主机端口流出。

    此致

    Sravanthi R.

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

    您好 Sravanthi、

    是否可以共享整个项目、以便我可以在此处试用。 我能在 luanchpad 或控制卡上运行它吗?

    此致、

    Aswin

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

    尊敬的 Aswin:

    实际上、我们在没有 Extranet 访问权限的系统中执行代码。 因此、我更改了在 CCS Cloud 中的.c 文件中执行的操作、并将这些文件与系统配置共享。 您只需获取 enetcpsw_rawhttpserver、删除工程中存在的.c 文件并添加我附加的文件。  e2e.ti.com/.../6747.project-.c-files.zip

    此致

    Sravanthi R.、

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

    您好 Sravanthi、  
    谢谢你。 让我来试一下。

    此致、

    Aswin

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

    您好 Sravanthi、

    我会在我这边检查一下

    另外、您能否交叉验证 zip 文件夹中的文件。 我收到一些编译错误。

    此致、

    Aswin

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

    尊敬的 Aswin:

    由于这些不是我调试的确切文件 (我在 CCS Cloud 中进行了所需的修改)、因此您会遇到编译错误。

    我也会再次从我这边检查这一点。

    此致

    Sravanthi R.

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

    HII Aswin、

    我正在将 AM263P4 LaunchPad 与 MCU+ SDK 10.02.15 搭配使用、系统配置:1.23.0

    此致

    Sravanthi R.

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

    您好  Sravanthi、

    我看到 SysConfig 计时器未启用。 此外、RTOS 变体被选为 nortos。

    您是否有在 nortos 上启用 phy loopback 的要求?  

    此致、

    Aswin

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

    您好  Sravanthi、

    在您的 case 中运行示例时、您能为我提供以下详细信息吗?

    您是否可以运行 GEL 脚本 cpsw_3g_statsprint_nonzero。 位于“Scripts">"CPSW Statistics“ Statistics print">"cpsw_3g_statsprint_nonzero"“ print">"cpsw_3g_statsprint_nonzero"中“中 。“。</s>“

    此致、

    Aswin

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

    尊敬的 Aswin:

    我已经看到 cpswtx 和 cpswrx 的状态、它们显示为传输的数据包数为零。

    我已附上我执行的项目文件。

    使用的 CCS 版本为 12.8
    MCU+SDK 10.02.15
    系统配置 1.23.0

    此致

    Sravanthi R.e2e.ti.com/.../enet_5F00_cpsw_5F00_testing_2800_NO_5F00_RTOS_29005F00_am263px_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

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

    HII Aswin、

    我的要求是在非 RTOS 环境中运行以太网、并禁用环回。 系统应该能够同时发送和接收帧、而不会出现任何干扰或干扰。

    此外、我希望仅从特定源 MAC 地址接收以太网帧、并且应拒绝来自任何其他源的帧。

    此致

    Sravanthi  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“647595" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration/6179806

    我已经看到 cpswtx 和 cpswrx 的状态、它们显示为传输的数据包数为零。

    [/报价]

    所以 我的理解是、STAT_0_RXGOODFRAMES 是 SEEN 0 吗?

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

    TXGOODFRAMES 为零。 无论源地址过滤器如何、我最初都会收到一些帧。 但每当我试图传送帧时,帧的接收也停止了。

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

    您好 Sravanthi、

    我能够将 enet_layer2_cpsw 示例转换为 nortos。 该示例将接收一个数据包并将同一个数据包向外发送。 请允许我与您分享这个示例。 我认为这将足以满足要求。

    此致、

    Aswin

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

    HII Aswin、

    是的、请分享示例。
    另外、请告诉我我我在我分享的项目中可能犯了什么错误。

    此致

    Sravanthi

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

    您好  Sravanthi、

    请运行 zip 文件中附加的示例。 示例是、将接收从 PC 发送的数据包并将其传回。

    请使用调试配置。 我仅配置了调试模式。

    预期日志应如下所示、

    示例运行后、当从 PC 向器件发送一些数据包时、它会将其发回。 请参阅 Wireshark 日志。

    在 wiresahrk 日志中、带有源 Realtek 的数据包来自 PC、带有源 Texas Ins 的数据包是从设备返回的数据包。

    我还附带了用于测试的.out 文件。

    e2e.ti.com/.../enet_5F00_l2_5F00_cpsw_5F00_am263px_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.out

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“647595" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579588/am263p4-q1-ethernet-cpsw-policer-configuration/6181943

    另外、请告诉我我我在我分享的项目中可能犯了什么错误。

    [/报价]

    让我彻底回顾一下该项目、然后返回。

    此致、

    Aswin

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

    e2e.ti.com/.../enet_5F00_l2_5F00_cpsw_5F00_am263px_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    附加工程的 zip 文件。 您能运行一下并告诉我吗?

    此致、

    Aswin

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

    您好  Sravanthi、

    要阻止具有特定 MAC 地址的数据包、可以调用此 API 并进行检查

    void blockUniCast(void)
    {
        CpswAle_SetUcastEntryInArgs setUcastInArgs;
        uint32_t entryIdx;
        Enet_IoctlPrms prms;
        int32_t status = ENET_SOK;
        uint8_t uniCastMacAddr[6] = {0x00, 0xe0, 0x4c, 0x32, 0x79, 0x68};
    
        setUcastInArgs.addr.vlanId = 0;
        setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM;
        setUcastInArgs.info.blocked = true;
        setUcastInArgs.info.secure = false;
        setUcastInArgs.info.super = false;
        setUcastInArgs.info.ageable = false;
        setUcastInArgs.info.trunk = false;
    
        EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U], &uniCastMacAddr[0]);
    
        ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx);
    
        ENET_IOCTL(gEnetApp.perCtxt[0].hEnet, gEnetApp.coreId, CPSW_ALE_IOCTL_ADD_UCAST, &prms, status);
        if (status != ENET_SOK)
        {
            printf("Failed to add ucast entry: %d\r\n", status);
        }
    }

     

    您可以在 EnetApp_open() 中的 EnetApp_addMCastEntry() 函数下调用该函数。

    添加此内容后、请参阅我的 ALE 表条目

    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:----- CPSW3G ALE 表------------------------
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:条目 0 — 单播
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:PORT_NUMBER = 0
    Cortex_R5_0:GEL 输出:块= 0
    Cortex_R5_0:GEL 输出:安全= 1
    Cortex_R5_0:GEL 输出:单播_TYPE = 0
    Cortex_R5_0:GEL 输出:entry_type = 1
    Cortex_R5_0:GEL 输出:单播 ADDR = 0x000070FF 0x761F68EA
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:条目 1 — 多播
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:PORT_MASK = 0x00000007
    Cortex_R5_0:GEL 输出:SUPER= 0
    Cortex_R5_0:GEL 输出:MCAST_FWD_STATE = 0
    Cortex_R5_0:GEL 输出:entry_type = 1
    Cortex_R5_0:GEL 输出:MULTICAST_ADDR = 0x0000FFFF 0xFFFFFFFF
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:条目 2 — 单播
    Cortex_R5_0:GEL 输出:----------------------------------------------------
    Cortex_R5_0:GEL 输出:PORT_NUMBER = 0
    Cortex_R5_0:GEL 输出:块= 1
    Cortex_R5_0:GEL 输出:安全= 0
    Cortex_R5_0:GEL 输出:单播_TYPE = 0
    Cortex_R5_0:GEL 输出:entry_type = 1
    Cortex_R5_0:GEL 输出:单播 ADDR = 0x000000E0 0x4C32768

    添加此信息后、请参阅 CPSW 统计信息

    Cortex_R5_0:GEL 输出:统计数据
    Cortex_R5_0:GEL 输出:------------------------------------
    Cortex_R5_0:GEL 输出:Port0 统计信息
    Cortex_R5_0:GEL 输出:------------------------------------
    Cortex_R5_0:GEL 输出:------------------------------------
    Cortex_R5_0:GEL 输出:端口 1 统计信息
    Cortex_R5_0:GEL 输出:------------------------------------
    Cortex_R5_0:GEL 输出:STAT_1_RXGOODFRAMES = 0x00000040
    Cortex_R5_0:GEL 输出:STAT_1_RXBROADCASTFRAMES = 0x0000000C
    Cortex_R5_0:GEL 输出:STAT_1_RXMULTICASTFRAMES = 0x0000001A
    Cortex_R5_0:GEL 输出:STAT_1_ALE_DROP = 0x00000040
    Cortex_R5_0:GEL 输出:STAT_1_RXOCTETS = 0x00001A2F
    Cortex_R5_0:GEL 输出:STAT_1_OCTETFRAMES64 = 0x00000026
    Cortex_R5_0:GEL 输出:STAT_1_OCTETFRAMES65T127 = 0x0000000B
    Cortex_R5_0:GEL 输出:STAT_1_OCTETFRAMES128T255 = 0x0000000C
    Cortex_R5_0:GEL 输出:STAT_1_OCTETFRAMES256T511 = 0x00000003
    Cortex_R5_0:GEL 输出:STAT_1_NETOCTETS = 0x00001A2F
    Cortex_R5_0:GEL 输出:STAT_1_PORTMASK_DROP = 0x00000040
    Cortex_R5_0:GEL 输出:STAT_1_ALE_BLOCK_DROP = 0x00000040
    Cortex_R5_0:GEL 输出:------------------------------------
    Cortex_R5_0:GEL 输出:port2 统计信息
    Cortex_R5_0:GEL 输出:------------------------------------

    此 API 仅用于单播地址、而不用于多播或广播地址。

    此致、

    Aswin

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

    您好 Sravanthi、

        uint8_t mCastAddr[6] = {0x01,0x00,0x5E,0x00,0x00,0x01};
        EnetApp_addMCastEntry(gEnetApp.perCtxt[0].enetType, gEnetApp.perCtxt[0].instId, gEnetApp.coreId, mCastAddr, 0);

    可以根据端口掩码丢弃多播数据包。 请尝试此操作以阻止多播数据包。 这也适用于广播数据包。

    请检查 cpsw 统计信息以查看数据包丢弃。

    这里的概念是根据端口掩码丢弃数据包。 端口掩码对所有端口进行分类。 如果指定为 0、则表示数据包不会转发到任何端口。

    此致、

    Aswin

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

    您好 Sravanthi、

    抱歉、对于 Rx 描述符方面的延迟、一旦从它们中读取数据、预计 desc 不会设置为零。  

    此致、

    Aswin