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.

[参考译文] AMIC110:EtherNet/IP 故障

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1017202/amic110-ethernet-ip-trouble

器件型号:AMIC110

您好!

我的客户使用 AMIC110创建了 EtherNet/IP 适配器产品。
主设备(扫描仪)以菊花链的形式连接到7个从设备(适配器)。


运行几天后、从器件将随机进入无限循环、无法进行通信。
频率未知。 有时它不会在一周内发生、有时它会在几十小时内发生。

他们已经在各种环境中进行了验证、从设备更换、电缆更换...
因此、我们怀疑 AMIC110软件是问题所在。
此程序与 PRU-ICSS 以太网 IP 示例几乎相同。

μ・PROCESSOR-SDK-RTOS (版本:05.02.00.10)
・PRU-ICSS-EtherNetIP-ADAPTER (版本:01.00.03.04)
μ・Code Composer Studio (版本:9.3.0.00012)

当通信中断时、器件处于无限循环中。

pdk_am335x_1_0_13\packages/ti\transport \NDK\Nimu_ICSS\src\Nimu_icssSwitchEmac.c
在"Nimu_ICSS_rxServiceCheck"函数中。

我们猜测 rxCallBack 调用的 ICSS_EmacRxPktGet 中可能存在问题。
pdk_am335x_1_0_13\packages/ti_drv\ICSS_EMAC\src\ICSS_emacDrv.c

正常操作为"update_rd_ptr <queue_wr_ptr", and WP (wr_ptr) is copied to RP (rd_ptr).
出现此问题时、update_rd_ptr (RP)> queue_wr_ptr (WP)。
因此、"if (update_rd_ptr! = Queue_wr_ptr)"始终为真、并执行"rxArg->More = 1"。
通常不会发生这种情况。 (由于环形缓冲器、它可能偶尔发生)

客户有以下问题:
问题1:"RP>WP"何时出现?
问题2:您能告诉我如何解决这种情况吗?

此致、

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

    你(们)好
    我们有以下问题可帮助我们更好地理解问题:
    在哪个从设备中看到问题?

    2.单个从器件的问题是否可重现?

    此致
    Dhaval Khandla

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

    您好!

    感谢你的答复。

    这发生在所有从器件上。

    2. 我正在与客户核实。

    此致、

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

    您好!

    2. 单个从机没有问题。  

    发生此问题时、从器件无法通信、但可以与菊花链后面的从器件通信。
    在有问题的器件上、RTOS 工作正常、中断和高优先级任务工作正常。 这就是我们怀疑 ICSS_EmacRxPktGet func (任务)的原因。

    此致、

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

    您好!

    我的客户对此问题进行了进一步调查。
    ・减少从器件、降低问题频率。
    ・当 ARP 从从属设备发送到主设备时,可能会发生这种情况。
    ・即使更换了 PRU 端口、也会发生这种情况。
    ・在 queue_rd_ptr (RP)> queue_wr_ptr (WP)时发生。

    他们记录了这些信息并确认了问题。

    ICSS_EmacRxPktGet 函数
    ・Queue_wr
    ・Queue_rd_ptr
    ・RD_PACKE_LENGTH

    发送/接收以下数据包。
    μ・以太网/IP 数据包110字节(描述符大小16)
    ・ARP 数据包60字节(描述符大小8)

    他们准备了一个用于调试的环形缓冲器。

      if(emacMode == 0U) { /*Switch Mode*/
            temp_addr = ((((ICSS_EmacHwAttrs const *)icssEmacHandle->hwAttrs)->emacBaseAddrCfg)->dataRam1BaseAddr+ pStaticMMap->p0QueueDescOffset + (((uint32_t)(queueNumber))*8U));   
            qDesc = (ICSS_EmacQueue *)(temp_addr);
      } else {   
           temp_addr = ((((ICSS_EmacHwAttrs const *)icssEmacHandle->hwAttrs)->emacBaseAddrCfg)->sharedDataRamBaseAddr + hostQDescOffset + (((uint32_t)(queueNumber))*8U)); 
           qDesc =   (ICSS_EmacQueue *)(temp_addr); 
       } 
       queue_wr_ptr = qDesc->wr_ptr; 
       queue_rd_ptr = qDesc->rd_ptr;
    /*DEBUG*/    
       wp_tbl[p_idx] = queue_wr_ptr; 
       rp_tbl[p_idx] = queue_rd_ptr;
    /*DEBUG*/

      /* Take out the port number - it may have changed */    
       rxArg->port = (0x00030000U & rd_buf_desc)>>16; 
    
       temp_addr = (rd_buffer_l3_addr + 6U);
       srcMacId = (uint8_t*)(temp_addr);
    
        destMacId = (uint8_t*)rd_buffer_l3_addr;
    
        rd_packet_length = ((uint16_t)((0x1ffc0000U & rd_buf_desc) >> 18));
    
    /*DEBUG*/  
       pk_len[p_idx] = rd_packet_length;   
       p_idx = (p_idx+1)&0x0f;
    /*DEBUG*/
    

    他们检查了环形缓冲器中的日志。

    e2e.ti.com/.../8306.e2e.pdf

    通常、当 rd_packet_length 为8时、queue_wr_ptr 设置为+8。
    但是、如果出现问题、它将变为+16。 因此、WP <RP occurs and WP! = URP 继续。 我们认为这个问题是我无法脱离环路的。

    您能给我提供任何解决方案或建议吗?

    我想请您提供帮助。  这是在发布之前发生的、因此我们急于解决它。  

    此致、

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

    您好 Dhaval、

    您对此问题是否有任何更新?

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

    您好!

    我给你发了一条消息。 您收到了吗?

    此致、

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

    根据通过电子邮件进行的讨论关闭此主题。