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.

[参考译文] MCU-PLUS-SDK-AM243X:在 MII 模式下使用具有 ICSS-EMAC 的 PROFINET 时、不能发送

Guru**** 2394295 points
Other Parts Discussed in Thread: DP83826I, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1126701/mcu-plus-sdk-am243x-no-tx-possible-when-using-profinet-with-icss-emac-in-mii-mode

器件型号:MCU-PLUS-SDK-AM243X
主题中讨论的其他器件:DP83826ISysConfig

您好、TI 专家、

当我们在软件中集成 DP83826i 以将其用于我们自己的硬件问题方面取得了良好进展时、我们在 MII 模式下使用具有 ICSS-EMAC 的 PROFINET 堆栈(SDK 版本08.03.00.18)时遇到了问题:

我们使用 enet_icssg_layer2示例测试了硬件、一切似乎都正常。 我们还使用自己的固件 Enet(ICSS)和 lwip 检查了 PHY<->MII 通信的正确行为。

下一步是使用 PROFINET 堆栈对其进行测试:

我们使用的 PHY 地址和 MII 引脚配置与 Enet (ICSS)+ LWIP 固件中的相同、但没有有效以太网通信的迹象(我们尝试了 DCP 服务+其中没有由器件发送的 LLDP 帧)。

我更深入地进行了调试、并调试了 ICSS_EMAC.c:

  • rxInterruptHandler()被调用-> RX 正在工作
  • ICSS_EMAC_txPacket()被调用-> RX 和数据包处理似乎正常,但在 Wireshark 上看不到来自器件的传输

我再次尝试检查 EVM 上的行为、因为我确信 EVM 上的一切正常-它按预期工作。

当我检查基于 EVM 的固件的 SysConfig 时、我发现在该硬件目标上还配置了"MII"、即使该硬件上应该有 RGMII 接口。

这让我感到困惑、因此我检查了 ICSS-EMAC 代码中 define ICSS_EMAC_MII_MODE 的用法以及 ICSS_EMAC_LOCAL_c 文件第818ff 行和881ff 行中的以下代码段的用法、我对此表示注意:

/* Need this change for tx pin swap in mii mode for AM64x, AM243x and AM263x only*/
if( (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs)->phyToMacInterfaceMode == ICSS_EMAC_MII_MODE) && (((((ICSS_EMAC_Object *)icssEmacHandle->object)->icssRevision) == 0x103) || ((((ICSS_EMAC_Object *)icssEmacHandle->object)->icssRevision) == 0x203)) )
{
    if(ICSS_EMAC_MODE_SWITCH == (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs))->portMask)
    { /*Switch mode*/
        HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0,
                CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x0);
    }
    else
    {
        HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0,
                CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x1);
    }
}
else
{
    if(ICSS_EMAC_MODE_SWITCH == (((ICSS_EMAC_Attrs *)icssEmacHandle->attrs))->portMask)
    { /*Switch mode*/
        HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0,
            CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x1);
    }
    else
    {
        HW_WR_FIELD32((pruicssHwAttrs->miiRtCfgRegBase) + CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0,
            CSL_ICSS_PR1_MII_RT_PR1_MII_RT_CFG_TXCFG0_TX_MUX_SEL0, 0x0);
    }
}

执行了一些针对 MII 模式的特殊 TX 引脚交换、这可能是问题的原因。 为了检查这一点、我调换了 if 子句的第一部分以检查 phyToMacInterfaceMode 是否为 ICSS_EMAC_RGMII_MODE、并重新编译了 ICSS_EMAC 库。

在进行更改后、以太网帧按预期发送。

我们这边是否会有任何配置错误、或者 SDK 中的 if 子句是否错误?

此致

Alex

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

    尊敬的 Alex:

    两位专家都在本周休假、他们都可以为这一主题提供帮助。 请预计会有一些延迟。

    同时、我们将在内部检查其他人是否可以支持。

    此致、

    Prasad

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

    Prasad、您好!

    我们对该问题进行了一些进一步分析、因为我的"权变措施"似乎不起作用、我们可以看到器件发出的一些 LLDP 帧只是巧合。

    如果在启动期间两个以太网端口上都有链接、则使用未修改的 SDK 版本时、我们只能使通信运行。 我想问题不是我一开始就假设的 MII 通信方面的问题、让我向您展示我们的最新观察结果:

    我们的电流设置如下所示

    PC <-- >[Port1]<->基于 Sitara 的客户电路板<->[Port2]<--- >另一个"常规"PROFINET 设备

    1. 如果我们只是在端口1上连接 PC、让电路板启动、则不会看到任何 LLDP 帧、也不会响应 PC 的 DCP 请求。 即使我们在端口2上连接了另一个器件、通信状态也没有变化。
    2. 如果我们在端口1和端口2上的另一个器件保持连接、并重新启动器件、我们可以看到两个端口上的 LLDP 帧和 DCP 帧将按预期处理(至少在我们尝试它的大多数时间)。 如果我们现在断开端口2上的器件、则端口1上的通信也会中断、并且无法通过以太网与器件通信
    3. 即使我们再次在端口2上连接另一个器件、通信也不会再次运行

    要获取有关我再次调试到 ICSS_EMAC 层的行为的更多信息,并为 ICSS_EMAC_txPacketEnqueue()函数设置断点(在该会话中,我只将 PC 连接到端口1)。

    查看统计数据可以发现,应该通过连接的端口发送一些数据包,但 Wireshark :()上没有任何导出文件

    软件中是否有任何地方可以让我更仔细地了解这些数据包丢失的原因?

    此致

    Alex

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

    尊敬的 Alex:

    请确认以下内容:

    1.您电路板上的 Phy 连接是否与 TI EVM 上的 Phy 连接相同?

    2.既然您使用的是 DP83826 phy,您能告诉我们您使用哪个 phy 寄存器来配置 phy 吗?

    3.您能否提供前32个寄存器的 phy 转储(按照以下说明操作)


    分步指南
    启动 CCS

    在  ICSS_phy_read.gel文件中编辑 HW_ICSS_MII_MDIO_USERACCESS0和 HW_ICSS_MII_MDIO_USERACCESS1  、以匹配您的 HW 中的寄存器偏移
    使用 Tools > GEL Files > Load GEL 选项添加 GEL 文件
    初始化 PHY 和 ICSS MDIO (例如:-运行 EtherCAT、Profinet 或 EtherNet/IP 应用程序)后、从 Scripts > ICSS_Configuration > PRU_ICSSG_PHY_Reg_Dump 运行脚本(忽略名称中的 ICSSG、也适用于 ICSSM)


    此致

    Nilabh A.

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

    您好 Nilabh、

    不可以、我们板上的 PHY 连接从 MII 连接开始、而不是 TI EVM 上使用的 RGMII。 我们通过我们的项目共享向 Aakash 提供了原理图。 如果我们在硬件平台上使用基于 ICSSG 的软件和 lwip、一切看起来都正常(开关、上行/下行链路等)

    在本例中、我们主要使用 PHY 的引脚自举。 除了使用我们的定制 PHY 驱动器实现的 LED 配置、SW-Reset 和 Powermode 之外、似乎没有通过软件进行进一步配置。

    我使用了一些测试软件来打印 PHY 寄存器:

    在"良好"情况下:

    PHY 3 Register Dump (good case with link on both ports and running communication)
    Register 0000 is: 3100
    Register 0001 is: 786D
    Register 0002 is: 2000
    Register 0003 is: A131
    Register 0004 is: 01E1
    Register 0005 is: CDE1
    Register 0006 is: 000F
    Register 0007 is: 2001
    Register 0008 is: 0000
    Register 0009 is: 0000
    Register 000A is: 0100
    Register 000B is: 040B
    Register 000C is: 0000
    Register 000D is: 401F
    Register 000E is: 0004
    Register 000F is: 0000
    Register 0010 is: 4615
    Register 0011 is: 0108
    Register 0012 is: 6400
    Register 0013 is: 2800
    Register 0014 is: 0000
    Register 0015 is: 0000
    Register 0016 is: 0100
    Register 0017 is: 0049
    Register 0018 is: 0480
    Register 0019 is: CC03
    Register 001A is: 0000
    Register 001B is: 007D
    Register 001C is: 05EE
    Register 001D is: 0000
    Register 001E is: 0102
    Register 0467 is: 00CE
    Register 0468 is: 2587

    在坏情况下:

    PHY 3 Register Dump (bad case, only link on phy 3)
    Register 0000 is: 3100
    Register 0001 is: 7849
    Register 0002 is: 2000
    Register 0003 is: A131
    Register 0004 is: 01E1
    Register 0005 is: 0000
    Register 0006 is: 0004
    Register 0007 is: 2001
    Register 0008 is: 0000
    Register 0009 is: 0000
    Register 000A is: 0100
    Register 000B is: 040B
    Register 000C is: 0000
    Register 000D is: 401F
    Register 000E is: 2587
    Register 000F is: 0080
    Register 0010 is: 4812
    Register 0011 is: 0108
    Register 0012 is: 6000
    Register 0013 is: 0000
    Register 0014 is: 0000
    Register 0015 is: 0000
    Register 0016 is: 0100
    Register 0017 is: 0041
    Register 0018 is: 0480
    Register 0019 is: C003
    Register 001A is: 0000
    Register 001B is: 007D
    Register 001C is: 05EE
    Register 001D is: 0000
    Register 001E is: 0102
    Register 0467 is: 00CE
    Register 0468 is: 2587
    

    我希望所提供的信息对您有所帮助、如果您需要更多数据、我的同事将在下周提供。

    此致

    Alex

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

    感谢 Alex 的耐心。 我们有以下意见:

    您为不起作用的情况共享的 PHY 转储将 10h PHYSTS_Register PHY 状态寄存器链接状态位设置为0 (这意味着链接未启动)

    但您引用 了 PHY 3寄存器转储(坏情况、仅 phy 3上的链接)  

    如果 phy3是否连接、您是否可以澄清上述内容?

    您能否检查以下内容:

    1.连接两个端口并尝试通信是否正常?

    2.您能否检查 FIFO 是否已被物理层耗尽(请检查以下寄存器内容和共享、同时提及地址)

    寄存器                   PRU ICSSG0  PRU ICSSG1  
    MII_RT_TX_FIFO_LEVEL0  3003 2068h   300B 2068h

    MII_RT_TX_FIFO_LEVEL1  3003 206Ch   300B 206Ch

    请在连接两个端口时共享 Phy 转储。

    BR

    Nilabh A.

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

    您好 Nilabh、

    你完全正确、很抱歉、我们从错误的端口转出了转储。

    "正常"情况-两个端口均已连接- ping 响应:

    PHY 7 Register Dump
    Register 0000 is: 3100
    Register 0001 is: 786D
    Register 0002 is: 2000
    Register 0003 is: A131
    Register 0004 is: 01E1
    Register 0005 is: CDE1
    Register 0006 is: 000F
    Register 0007 is: 2001
    Register 0008 is: 0000
    Register 0009 is: 0000
    Register 000A is: 0100
    Register 000B is: 040B
    Register 000C is: 0000
    Register 000D is: 401F
    Register 000E is: 0004
    Register 000F is: 0000
    Register 0010 is: 4615
    Register 0011 is: 0108
    Register 0012 is: 6400
    Register 0013 is: 2800
    Register 0014 is: 0000
    Register 0015 is: 0000
    Register 0016 is: 0100
    Register 0017 is: 0049
    Register 0018 is: 0480
    Register 0019 is: CC07
    Register 001A is: 0000
    Register 001B is: 007D
    Register 001C is: 05EE
    Register 001D is: 0000
    Register 001E is: 0102
    Register 0467 is: 00DE
    Register 0468 is: 2187
    PHY 3 Register Dump
    Register 0000 is: 3100
    Register 0001 is: 786D
    Register 0002 is: 2000
    Register 0003 is: A131
    Register 0004 is: 01E1
    Register 0005 is: CDE1
    Register 0006 is: 000F
    Register 0007 is: 2001
    Register 0008 is: 0000
    Register 0009 is: 0000
    Register 000A is: 0100
    Register 000B is: 040B
    Register 000C is: 0000
    Register 000D is: 401F
    Register 000E is: 0004
    Register 000F is: 0000
    Register 0010 is: 0615
    Register 0011 is: 0108
    Register 0012 is: 6400
    Register 0013 is: 2800
    Register 0014 is: 0000
    Register 0015 is: 0000
    Register 0016 is: 0100
    Register 0017 is: 0049
    Register 0018 is: 0480
    Register 0019 is: CC03
    Register 001A is: 0000
    Register 001B is: 007D
    Register 001C is: 05EE
    Register 001D is: 0000
    Register 001E is: 0102
    Register 0467 is: 00CE
    Register 0468 is: 2587

    坏情况-仅连接了一个端口(PHY7)- Ping 无响应

    PHY 7 Register Dump
    Register 0000 is: 3100
    Register 0001 is: 786D
    Register 0002 is: 2000
    Register 0003 is: A131
    Register 0004 is: 01E1
    Register 0005 is: CDE1
    Register 0006 is: 000F
    Register 0007 is: 2001
    Register 0008 is: 0000
    Register 0009 is: 0000
    Register 000A is: 0100
    Register 000B is: 040B
    Register 000C is: 0000
    Register 000D is: 401F
    Register 000E is: 0004
    Register 000F is: 0000
    Register 0010 is: 4615
    Register 0011 is: 0108
    Register 0012 is: 6400
    Register 0013 is: 0000
    Register 0014 is: 0000
    Register 0015 is: 0000
    Register 0016 is: 0100
    Register 0017 is: 0041
    Register 0018 is: 0480
    Register 0019 is: CC07
    Register 001A is: 0000
    Register 001B is: 007D
    Register 001C is: 05EE
    Register 001D is: 0000
    Register 001E is: 0102
    Register 0467 is: 00DE
    Register 0468 is: 2187

    在这两种情况下、所有值都为0:

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

    Sven、您好!

    如果您仅在 phy 3上连接、会出现什么行为。

    此致

    Nilabh A.  

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

    无法对设备执行 ping 操作,设备不响应 ping 操作。

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

    谢谢 Sven、

    您提到的好例子是 Profinet 示例还是 Enet 示例、如果在 Profinet 示例上、那么您在哪个端口上看到 phy 3/phy7或两者都有数据包?

    如果是 Enet 示例、那么您是否也可以尝试在配置示例中连接两个端口、并查看是否有任何能够执行 TX 的端口。

    BR

    Nilabh A.

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

    我们将 SDK 版本08.03.00.18与 PROFINET 协议栈版本02.02.01 (Alpha)搭配使用。

    在"正常"情况下、数据包通过 PHY7端口进行传输。

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

    Nilab、它是我们硬件上的客户软件、物理层与 EVM 上的软件不同-因此根本没有示例项目

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

    Sven、您好!

    您能否更新连接两个 phy 后 Profinet 案例的行为?

    BR

    Nilabh A.

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

    您好 Nilabh、

    请从一开始就阅读完整的 E2E 条目。  这里介绍了所有内容。

    Alex 在第一次答复中也详细说明了问题。

    Sven

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

    谢谢 Sven、  

    我们试图找出问题的根本原因、它似乎指向 syscfg 中给定的 phy 地址与实际硬件配置的 phy 地址之间的不匹配

    在 syscfg 屏幕截图中、您共享了它、它配置为:

    PHY 0 ->地址7

    PHY 1->地址3

    如果是实际的硬件连接、则可以解释此行为

    phy0->地址3

    phy1->address 7

    1.您能检查一下吗?

    此外、对于  工作和非工作情况、请共享 ICSSG1空间内存转储(从0000 0000h 开始到0004 0000h)。

    BR

    Nilabh A.

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

    您好 Nilabh、

    非常感谢您的帮助!

    我们把 PHY 的问题混在一起。

    将 syscfg 更改为正确的值(phy0 -> address 3和 phy1 -> address 7)后、一切都按预期工作!

    此致、

    Sven