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 RTOS 0806
当我将 loopbacken 设置为 true [将端口2设置为 SGMII]时、按所示
您好!
团队的一部分正在度假.. 请预计下周早些时候作出回应。
此致、
基尔西
我发现死区环路。
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); ENETTRACE_ERR_IF(status != ENET_SOK, "Port %u: Failed to get ENET_CTRL: %d\n", portId, status); if (status == ENET_SOK) { enetLayer = mii.layerType; enetSublayer = mii.sublayerType; if (enetLayer == ENET_MAC_LAYER_GMII) { if (enetSublayer == ENET_MAC_SUBLAYER_SERIAL) { /* We have link status in CPSW subsystem regs as well as in SGMII regs, * check SGMII regs as link status in CPSW subsystem regs is only for * QSGMII link status */ macPortInArgs.macPort = macPort; ENET_IOCTL_SET_INOUT_ARGS(&prms, &macPortInArgs, &sgmiiLink); status = EnetMod_ioctl(hMacPort, CPSW_MACPORT_IOCTL_GET_SGMII_LINK_STATUS, &prms); ENETTRACE_ERR_IF(status != ENET_SOK, "Port %u: Failed to get SGMII link state: %d\n", portId, status); *linked = sgmiiLink; printf("ZD goto ... func %s macPort %d ...Cpsw_isPortLinkUp IOCTL done sgmiiLink %d\n",__func__,macPort,sgmiiLink); } else if ((enetSublayer == ENET_MAC_SUBLAYER_QUAD_SERIAL_MAIN) || (enetSublayer == ENET_MAC_SUBLAYER_QUAD_SERIAL_SUB)) {
输出日志:
[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 相同
然后我改变了:
您好!
[报价 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 中 、我找到了此配置:
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); } EnetAppUtils_clkRateSet(moduleId, clkId[i], clkRateHz); } EnetAppUtils_setDeviceState(moduleId, TISCI_MSG_VALUE_DEVICE_SW_STATE_ON, 0U); }
那么我是否应该更改 val "uint32_t clkParId[]={}"? 它应该设置什么值?
I 测试 val:
日志。
[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 !!!
谢谢
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 晶体振荡器。从上述路径来看、串行器/解串器似乎是使用内部时钟馈送的。
因此、您必须对串行器/解串器使用100MHz 时钟。 使用上述共享/建议的串行器/解串器配置和串行器/解串器时钟。
此外、请确保在 U-boot 和 Linux 下禁用串行器/解串器配置。
此致、
Sudheer