大家好:
现有6678与一片switch(IDT-cps1848)通信的的情况(6678和1848各一块单板,通过高速接插件相连,已充分做到等长等条件)。6678的参考时钟为156.25MHZ,配置为4X模式,无论使用1.25G还是3.125G波特率,srio端口均不能正常打开,死在了以下函数中。
/*———wait all enabled ports OK————-*/
for(i=0; i<SRIO_MAX_PORT_NUM; i++)
{
if(srio_cfg->blockEn.bLogic_Port_EN[i])
{
while(0==(gpSRIO_regs->RIO_SP[i].RIO_SP_ERR_STAT&
CSL_SRIO_RIO_SP_ERR_STAT_PORT_OK_MASK));
}
}
查看SPn_ERR_STAT寄存器为0x00000001,即Port Uninitialized=1。
Srio配置(主要)如下:
serdes_cfg.commonSetup.inputRefClock_MHz = 156.25;
srio_cfg.loopback_mode= SRIO_NO_LOOPBACK;
srio_cfg.device_ID_routing_config= dsp0_device_ID_routing_config;
srio_cfg.uiNumDeviceId=
sizeof(dsp0_device_ID_routing_config)/sizeof(SRIO_Device_ID_Routing_Config);
serdes_cfg.commonSetup.loopBandwidth= SERDES_PLL_LOOP_BAND_MID;
srio_cfg.serdes_cfg= &serdes_cfg;
serdesLinkSetup.txOutputSwing = 15; /*0~15 represents between 100 and 850 mVdfpp */
serdesLinkSetup.testPattern = SERDES_TEST_DISABLED;
serdesLinkSetup.rxAlign = SERDES_RX_COMMA_ALIGNMENT_ENABLE;
serdesLinkSetup.rxInvertPolarity = SERDES_RX_NORMAL_POLARITY;
serdesLinkSetup.rxTermination = SERDES_RX_TERM_COMMON_POINT_AC_COUPLE;
serdesLinkSetup.rxEqualizerConfig= SERDES_RX_EQ_ADAPTIVE;
serdesLinkSetup.rxCDR = 5;
serdesLinkSetup.txInvertPolarity = SERDES_TX_NORMAL_POLARITY;
SRIO_Interrupts_Init();
serdesLinkSetup.linkSpeed_GHz= 3.125;
srio_cfg.srio_1x2x4x_path_control= SRIO_PATH_CTL_4xLaneABCD;
srio_identify_used_ports_lanes(srio_cfg.srio_1x2x4x_path_control);
KeyStone_SRIO_Init(&srio_cfg);
由于配置为3.125G时,MPY和RATE的测试程序配置异常,故自行修改:根据KeyStone Architecture Serial Rapid IO (SRIO) User Guide的Table 3-7配置,并观察寄存器SRIO_SERDES_CFGPLL的Mpy位为10(00101000b);SRIO_SERDES_CFGRX[0-3]的RATE位为Half(0b01)。
最让人疑惑的是,寄存器SPn_CTL的Initialized Port Width位显示为0b000 – Single-lane port, lane 0,理论上应该是0b010 – Four-lane port。(查看寄存器PLM_SP(n)_PATH_CTL,PATH_CONFIG位为100 = Configuration 4 – 4 lanes, a maximum of 4 ports;PATH_MODE位为100 = Mode 4,可以发现,4X模式正常配置)
现已基本排除1848配置问题(1848与fpga通信正常)、板件和板子设计问题(srio走线充分等长)、DSP自身硬件问题(可以通过serdes的自闭环测试)、srio参考时钟问题(已用示波器观察)。
请问各位大牛,
1、在保持3.125G,4X模式的基础上,还有什么造成port初始化不通过的可能问题或配置错误?以及解决方案。(个人感觉配置错误的可能性较高)
2、port初始化不通过是否与上文和下文程序中的绿色标记处的参数有关:
/*TWPST1: Adjacent Post Cursor Tap Weight.
If trace length is 4”, start with 20 (-10%).
If trace length is between 4” and 10”, start with 27 (-27.5%).*/
(18<<SERDES_TX_CFG_TWPST1_SHIFT)|
(1<<SERDES_TX_CFG_TWPRE_SHIFT)| /*TWPRE: The settings range from 0 to -17.5% in 2.5% steps.*/
3、参考帖子:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/19854.aspx
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/64364.aspx
万分感激!!
Allen35065:
回复 user3500278:
看来还是和信号质量相关啊,Prescaler主要是配置VBUS的频率区间,看SRIO手册上有说明;
RSV暂时没有具体说明,一般都是按最新的Datasheet去处理。