大家好!
我的板子上有两片6678和一片switch(IDT-cps1848),在调试SRIO时,使用1.25G和2.5G波特率,srio x4模式,通过switch两片6678收发数据正确。
但是使用3.125G和5G波特率时,srio端口不能打开。
我的程序是基于论坛keystone_srio的程序更改的:
板子srio参考时钟用的是156.25MHz,以3.125Gbps为例
serdes_cfg.commonSetup.inputRefClock_MHz = 156.25;
serdesLinkSetup.linkSpeed_GHz=3.125; //使用3.125Gbps
srio_cfg.srio_1x2x4x_path_control=SRIO_PATH_CTL_4xLaneABCD; //使用4xsrio
在Keystone_SRIO_HyperLink_Serdes_init(srio_cfg->serdes_cfg, srioSerdesRegs);函数中更改srio速率的配置:
按照srio_userGuide手册中page 2-12到2-20配置SRIO_SERDES_CFGPLL的MPY(RefClk=156.25MHz,DataRate=3.125Gbps,so MPY=10,Rate=Half(0b01))
pllMpy= 10;
serdesRegs->CFGPLL = 1| /*ENPLL*/
(serdes_cfg->commonSetup.loopBandwidth<<11)|
(vcoRange<<9)|
((Uint32)(pllMpy*4)<<1);
serdesRegs->link[i].CFGRX= 0x440495; //RATE=0b01
if(i==0)
serdesRegs->link[i].CFGTX= 0x180795;
else
serdesRegs->link[i].CFGTX= 0x080795;
将switch的端口配置成3.125Gbps模式后,运行程序最后开在这了
for(i=0; i<SRIO_MAX_PORT_NUM; i++)
{
if(srio_cfg->blockEn.bLogic_Port_EN[i])
{
while(0==(srioRegs->RIO_SP[i].RIO_SP_ERR_STAT&
CSL_SRIO_RIO_SP_ERR_STAT_PORT_OK_MASK));
}
}
按照上面的方式,使用1.25G和2.5G可以正确收发数据,但是3.125G和5G就不行了,请各位大牛工程师帮我看看哪里有问题?谢谢
(PCB上的srio lane差分线长度误差最大有10mil,应该属于正常范围)