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.

[参考译文] TDA4VM:TDA4VM RTOS 0806:Ethfw Loopbacken 测试

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test

器件型号:TDA4VM

工具与软件:

您好!
 TDA4VM RTOS 0806
  当我将 loopbacken 设置为 true [将端口2设置为 SGMII]时、按所示

void CpswMacPort_initCfg (Cpsw3874 Port_Cfg * macPortCfg)
macPortCfg->loopbackEn = true
macPortCfg->crcType = ENET_CRC_Ethernet
macPortCfg->rxMTu = CPSW_MACPORT_RX_MTU_DEFAULT
macPortCfg->passPriorityTaggedUnchanged = false
macPortCfg->vlanCfg.portPri = 0u
macPortCfg->vlanCfg.portCfi = 0u
macPortCfg->vlanCfg.portVID = 0u
macPortCfg->txPriorityType = ENET_EXEMPTY_PRI_TYPE_FIXED
macPortCfg->sgmiiMode = ENET_MAC_SGMIIMODE_INVALID
}
我的 EVM 硬件:
  serdes0 lane1无连接。  

MCU2_0运行成功。 注册表为:
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000010
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffbb0f8214)处读取:0x00000031
我的硬件:
  serdes0 lane1 无连接。
MCU2_0运行被阻止。
日志:
[MCU2_0] 16.979613 s:01:80:C2:00:00:0e
[MCU2_0] 16.979663 s:01:1b:19:00:00:00
[MCU2_0] 16.979931s:EnetMcm:主 NAVSS 上的 CPSW_9G
[MCU2_0] 16.990179s:MDIO_open:MDIO 手动模式已启用
在这里停留......

注册表为:
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000000
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffbb0f8214):0x00000000处读取
硬件重新引导时、  
已映射地址0xffa2271000处的存储器。
在地址0x0C000210 (0xffffff2271210)处读取:0x00000010
/dev/mem 打开。
存储器映射在地址0xffbb0f8000处。
在地址0x0C000214 (0xffffff0f8214):0x00000038、、、、某些时间3C 处读取
使用了相同的 SD 卡和映像。
是否有任何因素可能导致此问题?
谢谢
dongzhang
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    团队的一部分正在度假.. 请预计下周早些时候作出回应。

    此致、

    基尔西  

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

    我发现死区环路。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static int32_t Cpsw_isPortLinkUp(Cpsw_Handle hCpsw,
    Enet_MacPort macPort,
    bool *linked)
    {
    int32_t status = ENET_SOK;
    #if ENET_CFG_IS_ON(CPSW_SGMII)
    EnetPer_Handle hPer = (EnetPer_Handle)hCpsw;
    CSL_Xge_cpsw_ss_sRegs *ssRegs = (CSL_Xge_cpsw_ss_sRegs *)hPer->virtAddr2;
    uint32_t portNum = ENET_MACPORT_NORM(macPort);
    uint32_t portId = ENET_MACPORT_ID(macPort);
    EnetMod_Handle hMacPort = hCpsw->hMacPort[portNum];
    Enet_IoctlPrms prms;
    EnetMacPort_GenericInArgs macPortInArgs;
    EnetMacPort_Interface mii;
    EnetMac_LayerType enetLayer;
    EnetMac_SublayerType enetSublayer;
    bool sgmiiLink;
    uint32_t qsgmiiId;
    ENETTRACE_VAR(portId);
    status = EnetSoc_getMacPortMii(hPer->enetType, hPer->instId, macPort, &mii);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    输出日志:
    [MCU2_0]     61.143056 s: zd goto ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL done sgmiiLink   0
    [MCU2_0]     61.143127 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    [MCU2_0]     61.472563 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    [MCU2_0]     61.472635 s: zd 转到 ... func Cpsw_isPortLinkUp macPort 1 ... Cpsw_isPortLinkUp IOCTL 完成 sgmiiLink   0
    ..........


    dongzhang

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

    我的板其他寄存器:

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

    抱歉、

    1.我发现我们的板是100Mhz 时钟。 IC : CDCI6214RGET , 可以删除吗?  影响将是什么?  

    2.现在、 我们需要19.2Mhz 时钟、但我们将其更改为20Mhz、  会有什么影响?  其他一些模块...

    3.我发现 CSL_serdes3.c func: CSL_serdesRefclkSel 没有设置为20Mhz , 是否有修补程序为20Mhz ?

    非常感谢。

    dongzhang

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

    您好!  

    您需要更改20MHz 的引导模式引脚。

    有关引导模式引脚设置、请参阅 TRM。  

    此致、  

    Sudheer

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

    您好、
    硬件辅助我已将20Mhz 更改为19.2MHz、这与 EVM 相同
    然后我改变了:

    /* SGMII 配置*/
    serdesLane0EnableParams.serdesInstance =(CSL_SerdesInstance) 0;//AUTOX_LUOHUI_SGMII_SEDERS_INSTANCE
    serdesLane0EnableParams.baseAddr = CSL_SERDES_16G0_BASE;
    serdesLane0EnableParams.refclock = CSL_SERDES_REF_CLOCK_19p2M;/CSL_SERDES_REF_CLOCK_100M
    serdesLane0EnableParams.refClkSrc = CSL_SERDES_REF_CLOCK_INT;
    serdesLane0EnableParams.linkRate = CSL_SERDES_LINK_RATE_1p25G;
    serdesLane0EnableParams.numLanes = 0x1
    serdesLane0EnableParams.laneMask = 0x2// lane1
    serdesLane0EnableParams.ssc_mode = CSL_SERDES_NO_SSC
    serdesLane0EnableParams.phyType = CSL_SERDES_PHY_TYPE_SGMII;
    serdesLane0EnableParams.operatingMode = CSL_SERDES_FUNCTIONAL_MODE
    serdesLane0EnableParams.phyInstanceNum = SERDES_LANE_SELECT_CPSW
    serdesLane0EnableParams.pcieGenType = CSL_SERDES_PCIe_Gen3;

    serdesLane0EnableParams.laneCtrlRate[1]= CSL_SERDES_LANE_FULL_RATE;
    serdesLane0EnableParams.loopbackMode[1]= CSL_SERDES_LOOPBACK_DISABLED
    我是否需要修改这些位置?

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

    您好!  

    [报价 userid="564217" url="~/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test/5492810 #5492810"] serdesLane0EnableParams.refclock = CSL_SERDES_REF_CLOCK_19p2M;//CSL_SERDES_REF_CLOCK_100M[/QUOT]

    参考时钟为100M 不是19.2

    此外、确保 Serdes0未从 u-boot 和 Linux 配置。  

    此外、请确保串行器/解串器时钟配置为  CSL_SERDES_REF_CLOCK_INT、100M。

    请参阅 ethfw/utils/board/j721e/中的 board_j721e_evm.c 文件。

    此致、  

    Sudheer

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

    谢谢!
    我把它改回来了
    serdesLane0EnableParams.refclock
      =  CSL_SERDES_REF_CLOCK_100M;
    好的、 我现在使用了 TDA4VM EVM、并使用19.2作为 SERDES 基本时钟。
    (使用 WKUP_OSC0_XI WKUP_OSC0_XO 19.2Mhz)

    uboot 和 Linux 使用了默认的0806映像。  

    在 board_j721e_evm.c 中 、我找到了此配置:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    static void EthFwBoard_configSierra0Clks(void)
    {
    uint32_t moduleId = TISCI_DEV_SERDES_16G0;
    uint32_t clkRateHz = 100000000U;
    uint32_t clkId[] = {
    TISCI_DEV_SERDES_16G0_CORE_REF1_CLK,
    TISCI_DEV_SERDES_16G0_CORE_REF_CLK};
    uint32_t clkParId[] = {
    TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARENT_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK,
    TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARENT_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK};
    uint32_t i;
    int32_t status;
    for (i = 0U; i < ENET_ARRAYSIZE(clkId); i++)
    {
    status = Sciclient_pmSetModuleClkParent(moduleId, clkId[i], clkParId[i], SCICLIENT_SERVICE_WAIT_FOREVER);
    if (status != CSL_PASS)
    {
    appLogPrintf("Failed to reparent clk %u: %d\n", clkId[i], status);
    EnetAppUtils_assert(false);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    那么我是否应该更改 val "uint32_t clkParId[]={}"? 它应该设置什么值?

    I 测试 val:

    uint32_t clkParId[]={
    //TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARTNER_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK、
    //TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARTNER_HSDIV4_16FFT_MAIN_2_HSDIVOUT4_CLK};
    TISCI_DEV_SERDES_16G0_CORE_REF1_CLK_PARTNER_GLUELOGIC_HFOSC0_CLKOUT
    TISCI_DEV_SERDES_16G0_CORE_REF_CLK_PARTNER_GLUELOGIC_HFOSC0_CLKOUT};

     日志。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [MCU2_0] 17.961974 s: APP: Syncing with 5 CPUs ... Done !!!
    [MCU2_0] 17.962169 s: REMOTE_SERVICE: Init ... !!!
    [MCU2_0] 17.963853 s: REMOTE_SERVICE: register service name [com.ti.remote_service_test]
    [MCU2_0] 17.963928 s: REMOTE_SERVICE: Init ... Done !!!
    [MCU2_0] 17.963969 s: REMOTE_SERVICE: register service name [rtos_test]
    [MCU2_0] 17.964007 s: REMOTE_SERVICE: register service name [com.ti.perf_stats]
    [MCU2_0] 17.964045 s: ETHFW: Init ... !!!
    [MCU2_0] 17.964090 s: ZD goto ... func EthFwBoard_init
    [MCU2_0] 18.001078 s: PMLIBClkRateSet failed for clock Id = 42
    [MCU2_0] 18.001171 s: Assertion @ Line: 190 in enet_apputils_k3.c: false : failed !!!
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    谢谢

    dongzhang

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

    您好!  

    如果您要使用具有19.2M 的外部时钟的串行器/解串器、则需要将串行器/解串器时钟配置为19.2M、并且时钟源不应为  CSL_SERDES_REF_CLOCK_INT。

    那么可以使用上述时钟配置。  

    如果您要使用具有内部时钟的串行器 /解串器、则需要使用与 ethfw/utils/board/j721e/board_j721e_evm.c 中默认值相同的100m 和时钟

    注意:

    我们尚未使用 TI SDK 的外部时钟源测试串行器/解串器。

    此外、默认情况下 U-boot、Linux 会将串行器/解串器0配置为 PCIe+ QSGMII。  

    当您希望从 RTOS 进行配置和使用时、请确保不应从 U-boot 和 Linux (从器件树禁用节点)配置 SerDes0。  

    此致、  

    Sudheer

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

    您好!  

    我们要使用 WKUP_OSC0作为串行器/解串器时钟 PLL 的时钟源。 该 WKUP_OSC0连接到19.2M 晶体振荡器。
    19.2M、通过图中所示的路径、生成100MHz、达到 CMN_REFCLK1_INT、并提供给串行器/解串器。
    这种行为合适吗?

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

    您好!  

    [报价 userid="605881" URL"~/support/processors-group/processors/f/processors-forum/1431855/tda4vm-tda4vm-rtos-0806-ethfw-loopbacken-test/5493106 #5493106"]我们要使用 WKUP_OSC0作为串行器/解串器时钟 PLL 的时钟源。 该 WKUP_OSC0连接到19.2M 晶体振荡器。
    19.2M、通过图中所示的路径、生成100MHz、达到 CMN_REFCLK1_INT、并提供给串行器/解串器[/QUOT]

    从上述路径来看、串行器/解串器似乎是使用内部时钟馈送的。  

    因此、您必须对串行器/解串器使用100MHz 时钟。 使用上述共享/建议的串行器/解串器配置和串行器/解串器时钟。  

    此外、请确保在 U-boot 和 Linux 下禁用串行器/解串器配置。  

    此致、  

    Sudheer