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.

[参考译文] LP-AM243:RGMII 接口无法从 FPGA 接收数据

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga

器件型号:LP-AM243
主题中讨论的其他器件: SysConfig

工具与软件:

您好、TI

我们将使用 LP-AM243测试 CPSW 端口、我们删除了一个之前连接到 RGMII1的以太网 Phy、并将其替换为我们的 FPGA、RGMII1 TX 通道不会连接到 FPGA、因为我们不会将数据发送到 FPGA。 我们希望从 FPGA 接收广播以太网帧、但什么都没有得到。  

我该如何调试这个问题、您能给我们一些建议吗、

RGMII1的寄存器状态为3、这意味着100Mbps、μ s

我们将在 SDK 中使用演示 enet_lwip_cpsw、并修改函数  

EnetExtPhy_isPhyLinked 并让它返回 true。
静态 bool EnetExtPhy_isPhyLinked (EnetExtt Phy_Handle hPhy)
  EnetExtt Phy_Mdio nivle hmdio = hPhy->hmdio
  uint32_t phyGroup = hPhy->group
  uint32_t phyAddr = hPhy->addr
  bool isLinked = false
  uint16_t val = 0u
  int32_t status
  返回 true;
  /*获取 PHY 链路状态*/
  if (hmdio->isLinked!=)
  
我们的项目时间非常紧迫、我们需要您的帮助。 非常感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    我还更改了函数 enet_lwip_example 函数代码

        对于(I = 1I < ENETAPP_EXT_PHY_NUM_ENABLE_PORTSI++)
        
          EnetApp_waitForPhyAlive (enetType
                      instId
                      EnetSoc_getCoreId()
                      macPortList[i]);
          EnetApp_initExtPhy (enetType
                    instId
                    macPortList[i]);
          phyAddMask |=(1 << EnetApp_getExtPhyHandle (i)->phyCfg.phyAddr);
        }

        执行
          对于(I = 1I < ENETAPP_EXT_PHY_NUM_ENABLE_PORTSI++)
          
            Islinked|= EnetExtt Phy_Wait Link3011+(EnetApp_getExtPhyHandle(i), ENETEXTPHY_TIMEOUT_MS);
          }
        } while (!islinked);
    我从1开始、因此不会检查 RGMII1。  
    我们不确定 RGMII1发生了什么、您能帮助检查我们的系统、告诉我们检查 哪种配置或状态寄存器以指示哪种错误吗  
    期待你的答复,谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../cpsw_5F00_regs.zipI还从 CCS 上传 CPSW 寄存器十六进制文件、请检查。

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

    尊敬的 

    感谢您的提问。

    我会检查一下、然后回复给您。

    我假设您参考的是以下文档。

    定制板支持

    AM243x MCU+ SDK:以太网 PHY 集成指南

    此致

    Ashwani

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

    你好、Ashwani

    感谢您的答复。

    是的、我们正在使用此 SDK、但我们不集成外部 Phy、我们将 RGMII1连接到 FPGA、仅 RX 引脚被连接、因为我们只接收来自 FPGA 的数据、不会向 FPGA 发送任何内容。 FPGA 向 RGMII1 RX 接口发送广播消息、我们无法接收数据。 请检查、非常感谢。

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

    谢谢 

    MAC2MAC 连接。

    1. 您可以提交原理图申请由 TI 硬件专家审核吗?
    2. 在 SW 中、可以在 SysConfig 中尝试 PHY MAC 地址= 0xFF。
    3. 然后、CpswMacPort_enablePort()中的断点应该被命中。

    此致

    Ashwani

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

    你好、Ashwani

    是的、它是 Mac 到 Mac 的连接。

    我们不测试产品 PCB、我们使用从 TI 飞线连接到另一个单独 FPGA 板的 LP-am243板。 我们需要测试通过此测试,然后我们可以设计我们的原理图。

    在 该 SDK 演示的函数 enet_lwip_example 中、已添加了广播 Mac 地址。

    int enet_lwip_example(void *args)
    {
        Enet_Type enetType;
        uint32_t instId;
        int32_t status;
    
        Drivers_open();
        Board_driversOpen();
    
        DebugP_log("==========================\r\n");
        DebugP_log("      ENET LWIP App       \r\n");
        DebugP_log("==========================\r\n");
    
        EnetApp_getEnetInstInfo(CONFIG_ENET_CPSW0,
                                &enetType,
                                &instId);
    
    
        EnetAppUtils_enableClocks(enetType, instId);
        EnetApp_driverInit();
        status = EnetApp_driverOpen(enetType, instId);
    
        if (status != ENET_SOK)
        {
            EnetAppUtils_print("Failed to open ENET: %d\r\n", status);
        }
    
        EnetAppUtils_assert(status == ENET_SOK);
        {
            const uint8_t testBCastAddr[ENET_MAC_ADDR_LEN] =
            {
                0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
            };
            EnetApp_addMCastEntry(enetType,
                                  instId,
                                  EnetSoc_getCoreId(),
                                  testBCastAddr,
                                  CPSW_ALE_ALL_PORTS_MASK);
        }
    #if (ENET_SYSCFG_ENABLE_EXTPHY == 1U)
        {
            uint8_t numMacPorts;
            uint32_t i;
            Enet_MacPort macPortList[ENET_SYSCFG_MAX_MAC_PORTS];
    
            EnetApp_getEnetInstMacInfo(enetType,
                                       instId,
                                       macPortList,
                                       &numMacPorts);
    
    #if (ENET_SYSCFG_ENABLE_MDIO_MANUALMODE == 1U)
            EnetApp_createPhyRegisterPollingTask(1000, true, enetType, instId);
    #else
            EnetApp_mdioLinkIntHandlerTask(enetType, instId);
            EnetApp_enableMdioStateMachine(enetType,
                                            instId,
                                            EnetSoc_getCoreId());
    #endif
    
            portENTER_CRITICAL();
            uint32_t phyAddMask = 0;
            bool islinked = false;
    #if 1
            /* port0 use RGMII1 interface, is connected to FPGA, do not poll */
            for (i = 1; i < ENETAPP_EXT_PHY_NUM_ENABLED_PORTS; i++)
            {
                EnetApp_waitForPhyAlive(enetType,
                                        instId,
                                        EnetSoc_getCoreId(),
                                        macPortList[i]);
                EnetApp_initExtPhy(enetType,
                                   instId,
                                   macPortList[i]);
                phyAddMask |= (1 << EnetApp_getExtPhyHandle(i)->phyCfg.phyAddr);
            }
    
            do {
                for (i = 1; i < ENETAPP_EXT_PHY_NUM_ENABLED_PORTS; i++)
                {
                   islinked |= EnetExtPhy_WaitForLinkUp(EnetApp_getExtPhyHandle(i), ENETEXTPHY_TIMEOUT_MS);
                }
            } while (!islinked);
    #endif
    #if (ENET_SYSCFG_ENABLE_MDIO_MANUALMODE == 1U)
            EnetApp_enablePhyLinkPollingMask(phyAddMask);
    #else
           (void)phyAddMask;
    #endif
            portEXIT_CRITICAL();
        }
        #endif // #if (ENET_SYSCFG_ENABLE_EXTPHY == 1U)
        /* no stdio-buffering, please! */
        //setvbuf(stdout, NULL,_IONBF, 0);
        main_loop(NULL);
    
        return 0;
    }

    您能否帮助检查  包含所有 cpsw 寄存器的 cpsw_regs.zip 中的 cpsw 配置。 我们的配置不正确。 谢谢。

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

    你好、Ashwani

    感谢你的帮助。 我手动将寄存器 CPSW_PN_MAC_CONTROL_REG_k 0x08022330的值更改为0x000200A1、然后我可以看到 Mac TX 寄存器计数器不是0、但第一个 MAC 端口的 Rx 值仍然为0。

    我们的测试套件已更改、现在我们只需将 RGMII1的 TX 线连接到 RGMII1的 Rx 线、我们要测试当 Mac 端口向自身发送时我们是否可以接收帧。 当前我们在 Rx 中仍然什么也没有得到。 我们稍后将检查我们的硬件信号。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="613289" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5328373 #5328373"]我们使用从 TI 飞线连接到另一个单独 FPGA 板的 LP-am243板。[/QUOT]

    感谢您提供信息。

    [报价 userid="613289" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5328448 #5328448"]我手动更改了值为0x000200A1的寄存器 CPSW_PN_MAC_CONTROL_REG_k 0x08022330、然后我可以看到 Mac TX 寄存器计数器不是0

    很高兴听到这个消息。。。

    您可以在 cpsw_regs.zip 中帮助检查我们的 cpsw 配置 (该配置包含所有 cpsw 寄存器)吗? 我们的配置不正确。 [报价]

    我会检查并获得 bacj 给你。

    此致

    Ashwani

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

    e2e.ti.com/.../nok2.zipHinok2.zip 是我们手动将  CPSW_PN_MAC_CONTROL_REG_k 0x08022330更改为值0x000200A1后的最新寄存器转储。 请检查此包。  

    我找到了  

    该寄存器值不是0。  与另一个端口相比、plase alse 有助于检查是否存在其他可疑差异。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="320995" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5328789 #5328789"]CPSW_PN_MAC_CONTROL_REG_k [/报价]

    如需相关说明、请参阅 AM64x-TRM。 您能否捕获并验证帧是否没有任何错误?


    12.2.1.4.6.1.1错误处理
    在正常操作中、以太网端口模块配置了包含错误的丢弃接收包(runt、frag、超大尺寸、Jabber、crc、 对齐、代码等)。 但是、当 C 语言时 PSW_PN_MAC_CONTROL_REG_k  设置配置位 RX_CEF_EN、RX_CSF_EN 或 RX_CMF_EN、接收到的有错误的以太网包 传输到主机。 当 ALE 接收到包含错误的数据包(由于置1标头错误位)或 MAC 控制帧而没有接收到中止时、该数据包将仅转发到主机端口(端口0)。 由于速率限制、转发到主机的错误数据包没有 VLAN 解压或丢弃。 在有错误的数据包或 Mac 控制帧上不会进行 ALE 学习。 学习基于源地址、查找基于目标地址。 不学习、更新或触摸来自主机的定向数据包。

    此致

    Ashwani

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

    e2e.ti.com/.../nok3.zip

    你好、Ashwani

    寄存器的值与 RGMII2相同、因此我认为这不是 RGMII 无法接收帧的原因。 我们只在另一个 PHY-PHY 板上进行测试、当我们发送帧(目标 MAC 地址为 FF:FF:FF:FF:FF、且源地址为 RGMII1 Mac 地址 F4:84:4c:fb:bf:35)时、我们发现 RGMII1无法接收该帧、但当我们将源地址更改为另一个值时、RGMII1可以接收该帧。 在 mac2mac 情况下,我们要将 RGMII1的 TX 通道连接到 RGMII1的 Rx 通道,所以从 RGMII1发出的帧绝不会被 RGMII1接收?  因此、 当源 MAC 地址与 RGMII MAC 地址相同时、RGMII 无法接收帧、这是正确的吗?

    或者如何从同一个 Mac 端口发送具有不同 Mac 地址的帧? 有可能吗?

    顺便说一下、我们优化了导线连接电气条件、CPSW_STAT1_IET_RX_SMD_ERROR_REG_k 寄存器现在不报告错误。

    我还附上了我们的延迟集寄存器转储、请查看 nok3.zip。

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

    此功能被称为源地址违规。 这是预期行为。

    或者如何从同一个 Mac 端口发送具有不同 MAC 地址的帧? 是否可能?

    我没有向您发送数据包流。 正在将帧从 FPGA-MAC 发送到 CPSW-RGMII-MAC。 正确吗?

    此致

    Ashwani

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

    Ashwani 您好

    我们的数据包流是 cpsw-rgmi-mac-tx 至 cpsw-rgmi-mac-rx、位于同一个 rgmii1接口中。 由于存在源地址违规问题、我们现在没有长器进行测试。  

    我们 刚才进行了一个从 FPGA-MAC 到 CPSW-RGMII-MAC 的新测试发送帧。

    但我们收到了所有错误帧。  CPSW_STATn_RXCRCERRORS_k 和 CPSW_STATn_RXALIGNCODEERRORS_k 不是0.e2e.ti.com/.../nok4.zip

    请检查 nok4.zip、转储了 CPSW 的所有寄存器。

    我们使用的 FPGA 可以发送正确的帧。 因此、该问题可能是由电信号干扰引起的、是否正确?

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

      这是我们的测试用例、请查看。

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

     先生

    [报价 userid="613289" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1392213/lp-am243-rgmii-interface-can-not-receive-data-from-fpga/5331368 #5331368"]我们的数据包流为 cpsw-rgmi-mac-tx 至 cpsw-rgmi-mac-rx、位于同一 rgmii1接口中

    对于此用例、可以参考"C:\ti\mcu_plus_sdk_am243x_09_02_01_05\examples\networking\enet_loopback\enet_cpsw_loopback\am243x-lp"

    在这里、你可以设置/复位"安全"位来控制源地址冲突的使用。

    如果您在运行 CPSW MAC 环回时仍遇到问题、请告诉我。

    此致

    Ashwani

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

    你好、Ashwani

    当我们使用 phy 在板上进行测试时、我们可以获得正确的结果。  但是、当我们使用没有 Phy 的板进行测试、仅手动将 RGMII1 TX 通道连接到 RGMII1 Rx 通道时、我们仍然无法接收到消息。  

            Enet_Type enetType = ENET_CPSW_3G;
            Enet_Handle hEnet = Enet_getHandle(enetType, instId);
            uint32_t coreId = EnetSoc_getCoreId();
    
            uint8_t hostMacAddr[6] = {0xf4, 0x84, 0x4c, 0xfb, 0xc0, 0x86};
    
            Enet_IoctlPrms prms;
            CpswAle_SetUcastEntryInArgs setUcastInArgs;
            uint32_t entryIdx;
            /* ALE entry with "secure" bit cleared is required for loopback */
            setUcastInArgs.addr.vlanId  = 0U;
            setUcastInArgs.info.portNum = CPSW_ALE_HOST_PORT_NUM;
            setUcastInArgs.info.blocked = false;
            setUcastInArgs.info.secure  = false;
            setUcastInArgs.info.super   = false;
            setUcastInArgs.info.ageable = false;
            setUcastInArgs.info.trunk   = false;
            EnetUtils_copyMacAddr(&setUcastInArgs.addr.addr[0U], hostMacAddr);
            ENET_IOCTL_SET_INOUT_ARGS(&prms, &setUcastInArgs, &entryIdx);
    
            ENET_IOCTL(hEnet, coreId, CPSW_ALE_IOCTL_ADD_UCAST, &prms, status);
            if (status != ENET_SOK)
            {
                EnetAppUtils_print("Failed to add ucast entry: %d\r\n", status);
            }
    

    我们为 RGMII1添加代码。 但仍然无法接收自身发送的消息。  

    我将寄存器转储附在后面、您能帮助检查吗?e2e.ti.com/.../nok5.zip

    这是我们的电路板、移除了 Phy、时钟长30cm、可产生2ns 的延迟。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我们的电路板、移除了 phy、clk 长30cm、可产生2ns 延迟。  [报价]

    我将与硬件专家讨论这一点并与您联系。

    此致

    Ashwani

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

     先生

    这是我们的电路板、移除了 phy、clk 长30cm、可产生2ns 延迟。

    抱歉、是 TI-HW (EVM、LP、SK...) 不适合您正在尝试的用例。

    此致

    Ashwani

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

    你好、Ashwani

    感谢您的帮助。

    RGMII TX 时钟通道存在延迟、因此我们不需要这么长的导线来产生额外的延迟。 现在我们缩短 RGMII1 TX 时钟和 RGMII1 Rx 时钟之间的时钟线、我们现在可以接收消息。

    TX 寄存器和 Rx 寄存器现在相同。  

    感谢您的大力帮助。

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

    感谢  更新。

    我们现在可以收到消息

    很高兴听到这个消息。

    此致

    Ashwani