大家好、
当使用两个以太网接口时,eth1有时会停止发送 UDP 封包,然后在几秒钟后返回正常..... Wireshark 上没有错误、套接字服务器也正常。 当发生"NDK_sendo"时 、返回错误代码64。
我使用的是所有 TI 封装的最后一个版本。 在我看来,驱动程序内部似乎有一些问题。
感谢你的任何帮助
半
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.
您好!
我想@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 ="ðStackInitHook";
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'所需的规则。
请尝试以下操作:
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'的配方失败
您好!
不用担心…
是的,问题仍然只发生在以太网(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 服务进行了任何更正???? 现在我使用的是所有德州封装的最后一个版本。。。
谢谢
另一个供您参考的用户指南: 网络开发者套件(NDK)支持包以太网驱动程序设计指南。