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.

[参考译文] RTOS/XEVMK2LX:PCIe 链路协商失败、采用 PHY 环回(根复合体模式)

Guru**** 2553450 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/609885/rtos-xevmk2lx-pcie-link-training-failed-with-phy-loopback-root-complex-mode

器件型号:XEVMK2LX

工具/软件:TI-RTOS

支持路径:/Product/Help、带器件选择/

我正在使用 PCIe 采样源检查 PHY 回路。

(参考文档 sprugs6d.pdf - 2.12.2 PHY 环回)

–在端口强制链接寄存器(PL_FORCE_LINK_STATE=0x2)的 LNK_STATE 字段中设置0x2 (POLL_ACTIVE 状态)。

– 将 PL_FORCE_LINK 的 FORCE_LINK 域中的0x1设置为 LINK_STATE 域指定的状态(PL_FORCE_LINK [FORCE_LINK]= 0x1)。

上述寄存器的设置有问题。 附加代码和日志。

----------------------------------------------------------------

pcieRet_e skipDetectStateIntsm (PCIe_Handle handle)

pcieRet_e 返回值;

pcieRegisters_t setRegs;
pcieRegisters_t getRegs;

pciePlForceLinkReg_t plForceLink;

memset (setRegs、0、sizeof (setRegs));
memset (getRegs、0、sizeof (getRegs));
memset (&plForceLink、0、sizeof (plForceLink));

getRegs.plForceLink =&plForceLink;

if ((RetVal = PCIe_readRegs (handle、PCIe_location_local、&getRegs))!= PCIe_RET_OK)

System_printf ("读取 plForceLink 寄存器失败!\n");
返回 RetVal;

plForceLink.lnkState = 0x2;

plForceLink.forceLink = 0x1;

PCIe_logPrintf ("getRegs Force Link lnkState:%x\n"、getRegs.plForceLink->lnkState);
PCIe_logPrintf ("getRegs Force Link forceLink:%x\n"、getRegs.plForceLink->forceLink);

setRegs.plForceLink =&plForceLink;

if ((RetVal = PCIe_writeRegs (handle、PCIe_location_local、setRegs))!= PCIe_RET_OK)

System_printf ("设置 plForceLink 失败!\n");
返回 RetVal;

CycleDelay (100);
memset (getRegs、0、sizeof (getRegs));
memset (&plForceLink、0、sizeof (plForceLink));
getRegs.plForceLink =&plForceLink;
if (PCIe_readRegs (handle、PCIe_location_local、&getRegs)!= PCIe_RET_OK)

PCIe_logPrintf ("端口强制链接寄存器失败!\n");

其他

//PCIe_logPrintf ("getRegs 端口强制链接 lpeCnt:%x\n",plForceLink.lpeCnt);
PCIe_logPrintf ("getRegs 端口强制链接 lnkState:%x\n",plForceLink.lnkState);
PCIe_logPrintf ("getRegs 端口强制链接 forceLink:%x\n",plForceLink.forceLink);
//PCIe_logPrintf ("getRegs 端口强制链接号:%x\n",plForceLink.linkNum);

返回 PCIe_RET_OK;
}/* skipDetectStateIntsm */

------------------------------------------------------------------

控制台输出内容

getRegs 强制链接 lnkState:0x02
getRegs 强制链接 forceLink: 0x01
getRegs 端口强制链接 lnkState:0x02
getRegs 端口强制链接 forceLink:0x00

------------------------------------------------------------------

我无法在 PL_FORCE_LINK 寄存器中设置 FORCE_LINK 值。

我不知道为什么。 感谢你的帮助。

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

    我已通知软件团队。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、如果看图3-179 (PL_FORCE_LINK 寄存器)、FORCE_LINK 字段是只写字段、因此您将始终读取0。