HI,TI engineers:
最近在调试6678的PCIE和外部芯片通信,在调试demo代码的时候无法正常运行。调试的代码路径为:
C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_16\packages\ti\drv\exampleProjects\PCIE_exampleProject
在并未修改demo代码的时候运行到
/*Enable link training*/pcieLtssmCtrl(handle, TRUE)) ;
/* Wait for link to be up */
pcieWaitLinkUp(handle);
此处后就无法再往下运行了。阅读代码后发现函数里面是是一个wait for link to be up 的while死循环,而这部分代码在RC和EP外,
感觉和RC和EP没有关系。
死循环里是等待ltssmState== pcie_LTSSM_L0(0x11)。但是在代码上半部已经做了enable link了,但是程序并未跳出while循环。
请问还需要设置其他参数和配置么?能否请TI工程师看下demo可否正常运行?谢谢
chunlei gan:
我自己先顶一下吧
Thomas Yang1:
回复 chunlei gan:
chunlei
exmaple code 在2片Shannon EVM板之间是可以正常运行的。在你的例子中,DSP是作为EP还是RC?请检查PCIE时钟是否初始化正常,PSC PCIE是否打开,对端芯片的lane number 配置。
chunlei gan:
回复 Thomas Yang1:
hi yang,
想问下pcieWaitLinkUp(handle);就是等待RC连接上么?使RC和EP连接上,因为程序里是读ltssmState== pcie_LTSSM_L0(0x11) 。但是手册里面没有细讲。(我做的是EP)
谢谢
Thomas Yang1:
回复 chunlei gan:
Hi chunlei
是的,link training的状态需要是0x11,才能保证RC和EP物理通路正常,你可以参考如下的状态机表格
目前你的ltssmstate是哪种呢
0x01 DETECT_ACT
0x02 POLL_ACTIVE
0x03 POLL_COMPLIANCE
0x04 POLL_CONFIG
0x05 PRE_DETECT_QUIET
0x06 DETECT_WAIT
0x07 CFG_LINKWD_START
0x08 CFG_LINKWD_ACEPT
0x09 CFG_LANENUM_WAIT
0x0A CFG_LANENUM_ACEPT
0x0B CFG_COMPLETE
0x0C CFG_IDLE
0x0D RCVRY_LOCK
0x0E RCVRY_SPEED
0x0F RCVRY_RCVRCFG
0x10 RCVRY_IDLE
0x11 L0
0x12 L0s
0x13 L123_SEND_EIDLE
0x14 L1_IDLE
0x15 L2_IDLE
0x16 L2_WAKE
0x17 DISABLED_ENTRY
0x18 DISABLED_IDLE
0x19 DISABLED
0x1A LPBK_ENTRY
0x1B LPBK_ACTIVE
0x1C LPBK_EXIT
0x1D LPBK_EXIT_TIMEOUT
0x1E HOT_RESET_ENTRY
0x1F HOT_RESET
chunlei gan:
回复 Thomas Yang1:
HI ,Yang ,
我在EP侧读出来的是 ltssmState = 3 也就是POLL_COMPLIANCE,是不是硬件上没连接上RC呢?
lieying fan:
回复 chunlei gan:
我们用DSP通过PCIE接口连接FPGA,也出现了这个问题, ltssmState = 3,死在循环里面,过不去,请问,可能是FPGA时钟的问题呢,还是DSP软件配置的问题呢,PCIE使能过了……
minglang tang:
回复 lieying fan:
你好,我也遇到您出现的问题,请问现在解决掉了吗?请赐教,谢谢。
lieying fan:
回复 minglang tang:
我们的工程师是在增加相邻卡槽上的fpga时出现这个问题的,修改了相邻卡槽上的fpga部分代码,结果没这个问题了,怀疑是卡槽上底层管脚的输入输出影响了pcie,但若是你们只有这一个调试设备,还请再检查一次管脚配置是否冲突。逐一排除试试
zixuan he:
回复 lieying fan:
您好?请问您这里提到的管脚配置能具体说下有可能是那些管脚配置呢?我这里也遇到了,刚接触还不太理解。谢谢