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:针对 NDK 的简单 UDP 示例

Guru**** 2569255 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626716/rtos-am4376-simple-udp-example-for-ndk

器件型号:AM4376
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!
我正在寻找一个简单的 UDP 通信示例、该示例具有配置 RTOS/NDK、创建套接字、发送和接收 UDP 数据包所需的最低要求。
谢谢、

已安装的组件:
CCS 7.2
GCC ARM 编译器4.9.3
PROCESSOR_SDK_RTOS_AM437X 4.00.04
AM437x PDK v1.0.7
BIOS 6.46.05.55
xdctools 3.32.02.25_core

谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将对此进行研究。 反馈将发布在此处。

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

    非常感谢 Yordan。

    同时、我将查看 Nimu 模块的示例。 我不理解 NIMUDeviceTable 的初始化。 它从1开始。 XDC 脚本是否初始化表的第一个位置?

    NIMUDeviceTable[NIMU_DEVICE_index++].init = &CpswEmacInit;
    NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

    AM437x 的两个适配器是否都已初始化?

    您是否可以使用这两个适配器?

    此致、

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

    您好、Marcio、

    请参阅文章- e2e.ti.com/.../2057521

    CPSW 的 NIMU 示例仅支持一个网络接口。

    此致、
    Garrett

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

    H Garrett、


    我有点困惑。 我的要求与参考帖子相同:使用 CPSW 的双 Mac 模式。

    您是否说由于驱动程序不支持双 Mac 模式、CPSW 中无法使用双 Mac 模式? 或者、您是否说没有使用 CPSW 的双 Mac 模式示例?

    此致、

    Marcio。

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

    CPSW 驱动程序(pdk\packages/ti\drv\emac)支持双 MAC 代码、即您可以在主机端口和端口1或主机端口和端口2之间传输数据包、但不能在驱动程序的端口1和端口2之间传输数据包。 我曾说上层 Nimu (及其示例)"目前不是 CPSW 的双 Mac 以太网实现方案"、如该帖子的上次更新中所述。 NIMU 层充当 NDK 堆栈和以太网驱动器之间的接口。

    您可以在 pdk\packages/NDK\Nimu\src\v4\cpsw_Nimu_eth.c 中查看 Nimu 的函数 CpswEmacInit()
    /*填充网络接口对象。 *
    strcpy (ptR_device[0]。name、"eth1");

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

    您好、Garrett、

    "CPSW 驱动程序(pdk\packages/ti\drv\emac)确实支持双 MAC 代码、即您可以在主机端口和端口1或主机端口和端口2之间传输数据包、但不能在驱动程序的端口1和端口2之间传输数据包。 我曾说上层 Nimu (及其示例)"目前不是 CPSW 的双 Mac 以太网实现方案"、如该帖子的上次更新中所述。 NIMU 层充当 NDK 堆栈和以太网驱动程序之间的接口。"

    好的。 您刚才介绍的内容与我的要求相匹配:应用程序需要能够在两个适配器上发送和接收 UDP 数据包。 第二个适配器是可用性所必需的。 每个以太网适配器都必须有自己的 MAC 和 IP 地址。


    您可以在 pdk\packages/NDK\Nimu\src\v4\cpsw_Nimu_eth.c 中查看 Nimu 的函数 CpswEmacInit()
    /*填充网络接口对象。 *
    strcpy (ptR_device[0]。name、"eth1");

    好的。 我知道。 我在第511行看到:

          /*填充网络接口对象。 *

          if (numEmacInterfaces == 0U)

         {

              strcpy (ptR_DEVICE[numEmacInterfaces].name、"eth0");

          }

          其他

          {

              strcpy (ptR_DEVICE[numEmacInterfaces].name、"eth1");

          }

     numEmacInterfaces 是静态的、在第539行中递增。

     在 NIMU 示例中、NIMUDeviceTable 初始化为:

     NIMUDeviceTable[NIMU_DEVICE_index++].init =&CpswEmacInit;

    NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

     

    我认为设置第二个适配器需要执行以下操作:

    NIMUDeviceTable[NIMU_DEVICE_index+].init =&CpswEmacInit;

    NIMUDeviceTable[NIMU_DEVICE_index+].init =&CpswEmacInit;

    NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

     

    不管怎样、您是否仍在处理 UDP 通信示例(通过2个适配器发送/接收数据包)?

     

    非常感谢、
    Marcio。

     

     

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

    您对第二个适配器设置的见解是正确的。 实际上、有一个适用于 AM572x IDK 的双 Mac 示例项目可供参考-在 ti\pdk_am57xx_1_0_7\packages/ti\transport \ndk\Nimu\examples\am572x\armv7\BIOS 下、特别是在 transport \ti_am57xx\nimb\ti\transport \nimb\in\ndk\inu\example \am572x\armv7\bios\bios\bios\i。

    AM437x 和 AM57xx 的 Nimu 层共享相同的代码库 src\v4\cpsw_Nimu_eth.c 我偶然发现了 pdk_am57xx_1_0_6。 pdk_am572xx_1_0_7实际上在 NIMU 中支持双 Mac 模式、仅 AM437x 的示例不存在。

    由于最近执行的其他任务、我没有处理 UDP 通信示例。

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

    您好、Garrett、
    我的 PC 上安装的 AM437X SDK 已具有 NIMU_DualMacExample_idkAM572x_armExampleproject.txt、地址为 c:\ti\pdk_am437X_1_0_7\packages/ti\transport \ndk\Nimu\examples\am572x\armv7\BIOS\、但我无法创建工程。

    我´ve 并安装了 ti-processor-sdk-rtos-am57xx-evm-04.00.04-Windows-x86-64安装.exe、但无法创建任何 am57xx 工程。

    以下是控制台输出:


    检测到的测试项目:NIMU_DualMacExample_idkAM572x_armExampleproject

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

    正在创建项目'NIMU_DualMacExample_idkAM572x_armExampleProject'...

     !错误:未知产品类型 ID 'com.ti.pdk.am57xx'!
       注:请参阅以下可用产品类型 ID 列表(显示屏)
    方括号中的名称仅供参考):

           com/ti.sdo EDMA3 [EDMA3低电平驱动器]
           com/ti.rtsc.NDK [NDK]
           com.ti.rtsc.sysbios [SYS/BIOS]
           com.ti.pdk.am437X [AM437X PDK]

    正在复制 macro.ini
    系统无法找到指定的路径。
           已复制0个文件。


    这可能是另一个主题的主题

    无论如何、如果您将 NIMU_DualMacExample_idkAM572x_armExample5的相关源文件发送给我、我将不胜感激。

    此致、
    Marcio。

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

    Marcio、

    >>>!错误:未知产品类型 ID 'com.ti.pdk.am57xx'!

    您是否已打开 CCS 以让其安装 PDK 软件包? 如果不是在 ti\目录中安装 PDK、则可能需要从 CCS->windows->Preference->Code Composer Studio->Products->RTSC 添加软件包。

    NIMU_DualMacExample_idkAM572x_armExampleProject 的源文件位于 PDK 中。

    此致、Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的。 我尚未重新启动 CCS。 我´ve 创建了这些项目。 谢谢你。

    ´ve 该示例、我注意到以下情况:

    1) 1)在主文件上、NIMUDeviceTable 有3个条目、它们将调用 CpswEmacInit 两次。 这将确认上一个帖子。

    2)在 cfg 文件中,“ip.ifIdx=2;”。 为什么?

    3) cfg 文件添加钩子"Global. stackInitHook ="&stackInitHook",stackInitHook()通过调用 CfgAddEntry 添加 IP 配置,并将“item”(即 Nimu 设备对象)设置为1。 它是否与2)相关?

    4) 4)您能否告知以下代码是否也适用于 AM437x 双 MAC 端口。 一些 AM437x 示例调用 CpswPortMacModeSelect()两次。

    #elif defined (_arm_arch_7A__)
    CSL_xbarMpuIrqConfigure (CSL_XBAR_INST_MPU_IRQ_92、CSL_XBAR_GMAC_SW_IRQ_RX_PULSE);
    CSL_xbarMpuIrqConfigure (CSL_XBAR_INST_MPU_IRQ_93、CSL_XBAR_GMAC_SW_IRQ_TX_PULSE);
    #endif
    /*为 RGMII*/选择 RGMII 2端口 GMIIx_SEL = 2
    CSL_fins ((((CSL_CONTINL_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_RECORE_REGISTERS_REGS)->CONTRAL_IO_1、
    CONTRAL_CORE_CONTRAL_IO_1_GMII1_SEL、2U);
    CSL_fins ((((CSL_CONTINL_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_RECORE_REGISTERS_REGS)->CONTRAL_IO_1、
    CONTRAL_CORE_CONTRAL_IO_1_GMII2_SEL、2U);

    /*GMAC 复位隔离启用*/
    CSL_fins ((((CSL_CONTINL_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_RECOREG_REGS)->CONTINL_IO_2、
    CONTRAL_CORE_CONTRAL_IO_2_GMAC_RESET_isolation_ENABLE、0U);
    CSL_fins ((((CSL_CONTINL_coreRegs *) CSL_MPU_CTRL_MODULE_CORE_RECOREG_REGS)->CONTINL_IO_2、
    CONTRAL_CORE_CONTRAL_IO_2_GMAC_RESET_isolation_ENABLE、1U);

    ifdef evmAM572x
    EMAC_HwAttrs_V4 cfg;
    EMAC_socGetInitCfg (0、&cfg);
    cfg.port[0].phy_addr = GMAC_Port1_ETHERNET_PHY_ADRESS;
    cfg.port[1].phy_addr = GMAC_port2_ETHERNET_PHY_ADRESS;
    EMAC_socSetInitCfg (0、&cfg);
    #endif


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

    Marcio、

    1)是的。
    2) 2)这是为了指定索引= 2 (IP 地址= 192.168.1.4)的第二个网络接口
    3) 3)这是为了添加第一个网络接口(192.168.2.4)
    4) 4)这些代码适用于 AM572x、不适用于 AM437x 双 Mac 端口。

    此致、
    Garrett

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