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.

[参考译文] 使用 eth0和 eth1时的 AM437x。 Cicliliceth1的传输冻结了近40秒、并且返回正常

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1044542/am437x-when-using-eth0-and-eth1-ciclically-eth1-is-freezing-transmission-for-almost-40seconds-and-the-returns-normal

Thread 中讨论的其他器件:SYSBIOS

大家好、

  当使用两个以太网接口时,eth1有时会停止发送 UDP 封包,然后在几秒钟后返回正常..... Wireshark 上没有错误、套接字服务器也正常。  当发生"NDK_sendo"时  、返回错误代码64。   

我使用的是所有 TI 封装的最后一个版本。 在我看来,驱动程序内部似乎有一些问题。

感谢你的任何帮助

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

    您好、半自动、

    NDK_sendto ()的64返回值不表示错误。 NDK_sento ()是否返回-1并且通过调用  fdError()得到64?

    此致、

    _________

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

    您好!

      你确定...    当 NDK_sendto () 返回-1...时,返回 fdError()的代码  你知道这种方式吗?   

     顺便说一下 您是否有使用两个以太网接口的示例?  在 PDK 示例中、始终是环回或仅一个接口...

     感谢大家

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

    除了环回示例、我们没有任何使用两个以太网接口的示例。

    您使用的是 EMAC 还是 PRU-ICSS?

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

    您好!

       我想@Marcio Borges 使用 EMAC 驱动器... 我不知道什么是 PRU-ICSS?   我将为  您附加一些使用过的源代码参数:

    1)

     ethApl.cpp:

    ///----------------------------------------------------------
    //头文件
    ///----------------------------------------------------------
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    /*!
    *\brief
    以太网收发器的物理地址。
    *
    * CED2具有2个以太网收发器(KSZ9031RNX)、每个 EMAC/CPSW 端口一个。
    *以太网收发器的地址由行的值定义
    *加电时的 PHYAD[2:0]。
    * EMAC/CPSW 驱动程序使用该地址来选择 MDIO 上的芯片
    *接口、也称为 MII 管理接口。
    *
    静态常量 uint32_t EMAC_CPSW_PORT0_PHY_ADDR = 5;//<端口0收发器的物理地址(MII1 - u11)。
    静态常量 uint32_t EMAC_CPSW_Port1_PHY_ADDR = 6;//<端口1的收发器的物理地址(MII2 - U12)。

    空以太网:Init()

    EMAC_HwAttrs_V4 hwAttrs;

    //芯片配置 MII/RMII 选择
    CpswPortMacModeSelect (0、Ethernet_MAC_TYPE_RGMII);
    CpswPortMacModeSelect (1、Ethernet_MAC_TYPE_RGMII);

    EMAC_socGetInitCfg (0、hwAttrs);

    //注意:由 Nimu 调用的 emac_open (cpsw_Nimu_eth.c 中的 Nimu_start)是
    //实际上是 EMAC_open_v4 (emac_drv_v4.c)。 EMAC_open_v4调用 EMAC_setupCpswInitConfig 和
    //强制收发器进行自动协商。
    //设置配置模式标志(macModeFlags)而不是千兆位
    hwAttrs.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;

    hwAttrs.numPorts = 2;
    hwAttrs.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR;
    hwAttrs.port[1].phy_addr = EMAC_CPSW_Port1_PHY_ADDR;
    EMAC_socSetInitCfg (0、hwAttrs);

    //填充 NIMU 器件表以初始化2个器件(以太网接口)。
    NIMUDeviceTable[0].init =&CpswEmacInit;
    NIMUDeviceTable[1].init =&CpswEmacInit;
    NIMUDeviceTable[2].init = NULL;
    }//初始化

    2)

    // main.cpp:

    int main()

    //初始化内存管理单元。
    mainMMuInit (applMMuEntry);

    //初始化 Board 模块。
    boardInit();

    //初始化看门狗计时器模块。
    WtdDrv::Init();

    //初始化调试控制台模块。
    dcInit();

    //进行自我广播。
    AppSwVer::about ();

    #ifndef _use_WDT_
    dcPrint ("看门狗已禁用。\n");
    #endif

    //初始化运行状况 LED。
    mHealthLed.Config (Health_LED);

    //初始化日期和时间模块。
    日期时间::Init();

    //初始化 CPU 加载模块。
    CpuLoad::Init();

    //初始化网络模块。
    以太网:Init();

    //初始化缓冲区描述符池模块。
    BdPool:Init();

    //初始化缓冲区描述符邮箱模块。
    BdMail::Init();

    3)。

    我认为.cfg 文件存在关系... 我对这个主题不是很了解 我尝试更改它,但 如果我需要它,我找不到太多信息..  此文件的部分显示如下:

    startup.cfg (此文件最初创建日期为2018年)。  

    ///----------------------------------------------------------
    // NDK 配置
    ///----------------------------------------------------------

    VAR Global = xdc.useModule('ti.ndk.config.Global');
    VAR ICMP = xdc.useModule('ti.ndk.config.Icmp');
    VAR IP = xdc.useModule('ti.ndk.config.Ip');
    //var TCP = xdc.useModule('ti.ndk.config.Tcp');
    VAR UDP = xdc.useModule('ti.ndk.config.Udp');

    //将 autosOpenCloseFD 参数设置为 true 时,您不必调用
    //代码中的 fdOpenSession (用于动态创建的任务)。 缺点是
    //应用程序中的每个任务都将调用 fdOpenSession 作为的一部分
    //创建挂钩。 即使是不使用堆栈的堆栈也是如此。
    //Global.autoOpenCloseFD = true;

    Global.netSchedulerPri = Global. nc_priority_high;
    global.ndkTickPeriod = 100;
    global.kernTaskPriLevel = 11;
    Global.serviceReportHook =空;
    global.ipv6 = false;
    Global.debugPrintLevel = Global. DBG_NONE;
    Global.debugAbortLevel = Global. DBG_NONE;

    // IP 配置
    //ip.socketBufMinTxSize = 1;
    ip.domainname ="ced2.net";

    //静态 IP 配置的设置
    ip.ResolveIP = false;
    ip.CallByIP = false;
    Ip.autoIp = false;

    //如果不使用 IP 进行初始化。
    ip.address ="0.0.0.0";
    ip.mask ="255.255.255.0;
    //如果使用2个 IP 进行初始化(双 MAC 模式操作)
    //在此处配置第二个以太网接口,并以编程方式配置第一个接口。
    //对于双 MAC 模式操作,请在此处配置第二个以太网接口,然后
    //使用 Global. stackInitHook 添加执行 IP 配置的挂钩
    //以编程方式设置第一个接口。
    //ip.address ="192.168.2.34";
    //ip.gatewayIpAddr ="192.168.2.2";
    //ip.ifIdx = 2;


    //对于双 MAC 模式操作,添加挂钩 Global. stackInitHook 以执行
    //第一个接口的 IP 配置(可编程)。
    //Global. stackInitHook ="&ethStackInitHook";

    4)

    "我尝试启用此 ifldx 2,但  ethStackInitHook 未定义,我也不知道它 的含义。  它可以在启动 BIOS 时进行某种初始设置,不是吗?

    感谢大家、

         半

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

    您好、半自动、

    AM437x 具有两个以太网处理 IP:EMAC 和 PRU-ICSS。 NDK 可以通过 Nimu 使用其中任何一个、如 此处所述

    您能否检查 BIOS 配置脚本.cfg 文件并查看是否存在以下类似情况:

    var Nimu = xdc.loadPackage('ti.transport.ndk.nimu');

    如果有、您是否可以尝试将其替换为  

    var Nimu_Icss 	= xdc.loadPackage('ti.transport.ndk.nimu_icss');
    

    这会将 NIMU 配置为使用 PRU-ICSS 而不是 EMAC。 查看是否有相同的问题。 我想看看您的问题是由 EMAC 驱动程序还是 NDK 引起的。  

    谢谢、此致、

    _________

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

    您好!  

     结果如下:

    对 startup.CFG 的更改:

    //加载 Nimu 封装

    // SLF 10.15.2021
    //来自德州论坛-->处理器论坛:使用 eth0和 eth1时的 AM437X。 Cicliliceth1的传输冻结了近40秒、并且返回正常
    //var Nimu = xdc.loadPackage ("ti.transport.ndk.Nimu");
    VAR Nimu_ICSS = XDC.loadPackage ('ti.transport.NDK.Nimu_ICSS');

    Nimu.Settings.socType = socType;

    生成结果:

    "C:\\ti\\ccs1031\\ccs\\utils\\bin\\gmake"-k -j 3 all -O

    编译文件:"../startup.cfg
    调用:XDCtools
    "C:/ti/xdctools_3_55_02_22_core/xs "-xdcpath="C:/ti/bios_6_76_03_01/packages;C:/ti/edma3_lld_2_12_05_30E/packages;C:/ti/ccs1031/ccs/ccs_base;C:/ti/pdk_am437x_1_0_17/packages;C:/ti/ndk_3_61_01_01/packages;" xdc.tools.configuro -o configPkg -t GNU.targets.arm.A9F -p ti.platforms.evmAM437X -r release -c "C:/ti/ccs1031/ccs/tools/compiler/gcc-arm-none-eabi-7-2017-q4-major-win32 "../startup.cfg
    正在制作 package.mak (由于 package.bld)...
    正在为软件包 configPkg 生成接口(因为 package/package.xdc.inc 比 package.XDC 旧)...
    从 package/cfg/startup_pa9fg.cfg 配置 startup.xa9fg……
    subdir_rules.mk:26:目标'Build-2068372575-InProc '的配方失败
    JS:"c:/workspace/ced2_v1000/startup.cfg、第204行:ReferenceError:"NIMU"未定义。 (C:/workspace/ced2_v1000/startup.cfg #204)
    "./package/cfg/startup_pa9fg.cfg,第196行
    gmake.exe:***[package.mak:218:package/cfg/startup_pa9fg.xdl]错误1
    JS:"c:/ti/xdctools_3_55_02_22_core/packages/xdc/tools/Cmdr.xs、第52行:错误:xdc.tools.configuro:由于先前的错误(状态= 2)、配置失败;已删除'linker.cmd'。
    gmaking[1]:***[Build-2068372575-InProC]错误1.
    gmake:***没有使目标'build-2068372575'成为'configPkg/compiler.op'所需的规则。
    gmake:***没有使目标'build-2068372575'成为'configPkg/linker.cmd'所需的规则。
    gmake:***没有使目标'build-2068372575'成为'configPkg/compiler.op'所需的规则。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496256" URL"~/support/processors-group/processors/f/processors-forum/1044542/am437x-when-using-eth0-and-eth1-ciclically-eth1-is-freezing-transmission-for-almost-40seconds-and-the-returns-normal/3865949 #3865949"]js:"c:/workspace/ced2_v1000/startup.cfg "、第204行:ReferenceError:"NIMU"未定义。 (C:/workspace/ced2_v1000/startup.cfg #204)
    [/报价]

    请尝试以下操作:

    var Nimu = xdc.loadPackage('ti.transport.ndk.nimu_icss');

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

    我做到了......   不能将 SOCType 识别为 NIMU_ICSS 的一部分,然后我将其注释:

    // SLF 10.15.2021
    //来自德州论坛-->处理器论坛:使用 eth0和 eth1时的 AM437X。 Cicliliceth1的传输冻结了近40秒、并且返回正常
    //var Nimu = xdc.loadPackage ("ti.transport.ndk.Nimu");
    VAR Nimu = XDC.loadPackage ('ti.transport。NDK.Nimu_ICSS');
    // Nimu.Settings.socType = socType;

    我有此错误:

    正在制作./src/sysbios/sysbios.aa9fg ...
    gmake[2]:对于"全部"没有要做的事情。
    构建目标:"ced2.out"
    调用:GNU 连接器
    "C:/ti/ccs1031/ccs/tools/compiler/gcc-arm-none-eabi-7-2017-q4-major-win32/bin/arm-none-eabi-gcc-7.2.1.exe -mtune = cortex-A9 -marm -dsco_am437x -Dam4376 -D_use_WDT_-D_use_rtc_-D_use_FS_-D_log_msgs_-Dam4378 -O2 -Wall -faladoring-new -mfloat-abi=hard -/ti/bios_6_76_03_01/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/hard -start-use-cwl、-dog_msgs_-dam-dam-dam-dam-dam-zh-diform-m-cwl、-cwl、-static-cwl、-def-cwl、-cwl -def-cwl、-def-cwl -cyf -def-q-zh-cwl、-cwl、-cwl、-d specs=nan.specs -o"ced2.out""./filesbapvapl.o"".bdasciilogapl.o""./bdbinlogapl.out""./bdmailapl./bdcpocl.apl."/content/apl.apl."/content/apl./apprispr./apor./apor./apor./apor./papl"
    Makefile:178:目标'ced2.out'的配方失败
    /ethapl.o:在函数`以太网::Init()'中:
    C:\workspace\ced2_v1000\Release/../ethapl.cpp:106:`CpswEmacInit'的引用未定义
    C:\workspace\ced2_v1000\Release/../ethapl.cpp:106:`CpswEmacInit'的引用未定义
    collect2.exe:错误:LD 返回1退出状态
    gmake[1]:***[ced2.out]错误1.
    gmake:***[全部]错误2.
    Makefile:174:目标'all'的配方失败

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

    半、

    很抱歉我弄错了。 将 NIMU 更改为使用 PRU-ICSS 所涉及的内容远不止 BIOS 配置。 应用程序代码也需要重写。

    问题是否始终发生在 eth1上?

    谢谢、

    _________

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

    您好!

      不用担心…  

     是的,问题仍然只发生在以太网(Eth1)上。 Eth0的工作非常好...

    我在源代码中进行此更改...

    //填充 NIMU 器件表以初始化2个器件(以太网接口)。
    // SLF 15.10.2021…… 从 NIMU_ICCS 更改
    //NIMUDeviceTable[0].init =&CpswEmacInit;
    //NIMUDeviceTable[1].init =&CpswEmacInit;
    //NIMUDeviceTable[2].init = NULL;

    软件现在已构建、但我在运行时控制台上有错误代码:

    *** CED2/AM437x 的应用软件***
    v2.0.00_beta30 200000.000 NIMUInit:无法初始化任何 NIMU 设备。
    00000.000关闭堆栈、因为 NIMUInit 无法初始化任何器件
    00000.000

    NC_NetStart:警告:引导线程尚未完成!

    我 觉得有必要初始化其他东西......   你知道什么吗??

    谢谢

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

    半、

    需要做更多工作才能将代码更改为使用 PRU-ICSS。 如果您安装了适用于 AM437x 的处理器 SDK、则可以查看 PDK 内的 Nimu 示例:pdk_AM437X_1_0_17\packages/ti\transport \NDK\Nimu_ICSS\examples\src\main_A9.c 您还可以按照 此常见问题解答中的说明 创建 PDK 示例工程、并查看 NIMU_ICSS_BasicExample_idkAM437x_wSoCLib_armExampleproject。

    此致、

    _________

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

    您好!

      我已经检查了这些示例,但在第一次完成源代码时它被用作模型.... 那么没有什么可改变的…   在进行一些测试时,我发现"EMAC_POLL"没有检查 eth1链路状态 。 只有 eth0…  当我断开 eth0电缆时,eth1链路状态也会下降.... 当我断开 eth1连接时,eth0会显示链接..... 您是否对 EMAC_POLL 服务进行了任何更正???? 现在我使用的是所有德州封装的最后一个版本。。。  

    谢谢

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

    请查看 EMAC LLD 文档: pdk_AM437X_1_0_17\packages/ti\drv\emac\docs\EMAC_LLD_SD.pdf

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

    另一个供您参考的用户指南: 网络开发者套件(NDK)支持包以太网驱动程序设计指南。