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.

6678的srio配置为4X模式初始化不成功(与switch相连)



大家好:

现有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、参考帖子:

www.deyisupport.com/.../19854.aspx

www.deyisupport.com/.../64364.aspx

万分感激!!

  • 一般是CSR/CAR寄存器配置不对造成的;

    你可以试试 

    1. 1X模式通不通?

    2. 两边的地址是否一致(8 or 16)?

    3. PER_SET_CTNL里的Prescaler配的值是否正确?

    4. 两边的波特率是否一致?

  • 您好!非常感谢您的回答!

    问题已经解决。主要是以下2个问题导致:

    1、6678在硬件配置时,有1,2个推荐悬空的RSV的管脚没有悬空;

    2、srio的走线虽然做到等长和阻抗匹配,但过孔较多(单路有6个过孔)、接插件板布线间隔非常有限(只能从孔间隙间走线),导致信号噪声严重(用示波器看眼图基本没眼,但可能和没有差分探头有关)。

    现将速率降到2.5GHz即可正常通信。

    虽然问题解决了,但还有几个问题:

    1、Prescaler配置是用来改变什么参数的?

    2、RSV悬空管脚明显和外设功能相关,能否在数据手册中具体说明?

    3、self test kit中srio工程配置时,速率配为3.125GHz时的MPY和RATE值不对,能否修正?

    谢谢!

  • 看来还是和信号质量相关啊,Prescaler主要是配置VBUS的频率区间,看SRIO手册上有说明;

    RSV暂时没有具体说明,一般都是按最新的Datasheet去处理。