我们目前正在开发支持 PROFINET 的器件、并已购买 Molex PROFINET 协议栈和 Interniche SNMP 协议栈。
作为 HW、我们使用 AM437x IDK 并启动并运行堆栈。
我们的实现基于 PRU-ICSS-PROFINET_Slave_01.00.01.00示例、但已替换为完整的堆栈。
由于我们没有使用最新的 SDK、因此我尝试升级到最新版本、但这会导致 I PROFINET 停止工作。
它可与 PDK 1.0.6配合使用、但无法与 PDK 1.0.8配合使用。 通过调试、我发现 NDK 和 ICSS EMAC 驱动程序有问题。 我认为这不是我引起的问题。
在文件 NIMU_icssEthDriver.c 第591行中:
ioctlParams.command = ICSS_EMAC_STORE_PREV_CTRL_RESET; /*重置用于风暴预防的信用值*/ if (ICSS_EMAC_MODE_SWITCH==((ICSS_EmacObject*)(PI->nimuDrvHandle)->object)->emacInitcfg->portMask) { strmPreventionEnable1 =(stormPrevention _t*)(((ICSS_EmacObject*)(PI->nimuDrvHandle)->object )->stormPrevPtR); strmPreventionEnable2 =((stormPrevention _t*)((ICSS_EmacObject*)(PI->nimuDrvHandle)->object)->stormPrevPtr)+ 1; if ((strmPreventionEnable1->suppressionEnabled)|(strmPreventionEnable2->suppressionEnabled)) { ICSS_EmacIoctl (PI->nimuDrvHandle、ICSS_EMAC_IOCTL_STORE_PREV_CTRL、0、(void*)&ioctlParams);//<<--> PORTNO 为0?!? } } 其他
调用 ICSS_EmacIoctl()时,参数 portNo 设置为0。
2. ICSS_EmacIoctl()调用 ICSS_EmacValidateFeatureSet(),且 portNo 设置为0
但是,如果 portNo 为0,ICSS_EmacValidateFeatureSet()返回-1 (错误),因此风暴预处理控制(?) 无法复位?
我不确定错误在哪里(portNo 是否允许为0或??)。 但是,如果我跳过对 ICSS_EmacValidateFeatureSet()的调用,一切都可以正常工作。
案例 ICSS_EMAC_IOCTL_STORE_PREV_CTRL: // RetVal = ICSS_EmacValidateFeatureSet (icssEmacHandle、portNo、ICSS_EMAC_FW_STORE_PREVENTIION_FEATE_CTRL); RetVal = 0; 如果(RetVal = 0) { switch (ioctlCmd->command){ ICSS_EMAC_STORE_PREV_CTRL_ENABLE 案例: ICSS_EmacEnableStormPrevention (portNo、icssEmacHandle); setCreditCard 值(((*((uint16_t *) ioctlData))、(stormPrevention _t*)((((ICSS_EmacObject*) icssEmacHandle->object)->stormPrevPtr)); 中断; ICSS_EMAC_STORE_PREV_CTRL_DISABLE 情况: ICSS_EmacDisableStormPrevention (portNo、icssEmacHandle); 中断; 案例 ICSS_EMAC_STORE_PREV_CTRL_SET_贷 项: setCreditCard 值(((*((uint16_t *) ioctlData))、(stormPrevention _t*)((((ICSS_EmacObject*) icssEmacHandle->object)->stormPrevPtr)); 中断; ICSS_EMAC_STORE_PREV_CTRL_INIT 案例: ICSS_EmacInitStormPreventionTable (portNo、icssEmacHandle); 中断; ICSS_EMAC_STORE_PREV_CTRL_RESET 案例: ICSS_EmacResetStormPreventionCounter (icssEmacHandle); 中断; 默认值: RetVal =(INT8_t)-1; 中断; } }
有人可以在这里帮助我吗?