这个pcie调的纠结了很久了
现在有些新的问题,发上来,不知道有没有高手给以建议和解答。
我们现在大致的情况是,有一定概率能够link up上,后续的东西还没有测,至少按照mcsdk里的例程读取remote端(FPGA 为ep)的相应寄存器应该不对
现在主要在调试以是link up稳定。
对于各种寄存器进行配置(主要是使fpga和dsp两端相应的配置相同)
发现有这样几个寄存器:
1. PL_GEN2
经过了这样的配置之后(配置为5GT)
/* Setting PL_GEN2 */
memset (&setRegs, 0, sizeof(setRegs));
gen2.numFts = 0xF;
gen2.dirSpd = 0x1;//speed=gen2
gen2.lnEn = 2;
setRegs.gen2 = &gen2;
应该得到0x2020f才对,但是读出来一直是0x20f
甚至之后我在程序里加了如下内容,结果依然是0x20f:
uint32_t *pl_gen2=(uint32_t *)0x2180180c;
*pl_gen2=0x2020f;
System_printf("force pl_gen2 to 0x2020f!!!!!!!!!!!!!!! \n");
System_printf("pl_gen2 is %x\n",*pl_gen2);
2.link_ctrl2
uint32_t *link_ctrl2=(uint32_t *)0x218010a0;
/* Setting linkCtrl2 */
memset (&setRegs, 0, sizeof(setRegs));
linkCtrl2.tgtSpeed = 0x2;//0x2 5g 0x1 2.5g wander 2013.1.22
setRegs.linkCtrl2 = &linkCtrl2;
这个link_ctrl2 的tgtspeed是要配置成5g才会变成gen2么?
还是只配置pl_gen2就可以了?
我现在的情况是linkctrl2配置为5g后,如果连上,在fpga那端用chipscope抓到才有可能为5g~如果不配置这个,fpga和dsp均显示只支持2.5g,即使两端都配为5g(dsp端只配置了pl_gen2)
3.link_cap
在link_cap寄存器中,如下图:
我试图修改L1_EXIT_LAT 和L0s_exit_lat,因为在这两个field的解释力有写Writable from internal bus interface.我将其理解为,可在内部配置(虽然上图中显示R为只读),事实上,在修改PM_CTL_STAT等寄存器类似的field时,这种field的是可以改的。
但是在此寄存器中,我按照如下:
*link_cap= (uint32_t )0x0003f422;进行修改时,得到的结果却是
[C66xx_0] link_cap is 133422
也就是,L1_EXIT_LAT 和L0s_exit_lat既不是我要的7,7
也不是默认的6,5
而是6,3
好奇怪~