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.

C6657通过SRIO像FPGA发送数据时丢失起始两个字节和最后八个字节



各位好:

        我现在用6657和Xilinx的K7系列FPGA通过SRIO进行数据交换,FPGA那边很简单,就是srio的IP核,都是流写模式,FPGA往DSP这边传输数据一切正常,但是6657这端发送数据到FPGA端,通过抓取FPGA SRIO核输出数据的几个信号可以看到,数据丢失了前两个字节,以及最后少传输了8个字节,我的初始化函数如下:数据发送函数就是调用的Keystone_SRIO_Init_drv.c里面KeyStone_SRIO_DirectIO函数进行发送的,想请问一下各位知不知道这是什么原因,或者我应该从哪个方向上去查这个问题。感谢各位。

    serdes_cfg.commonSetup.inputRefClock_MHz = 156.25;
    memset(&srio_cfg, 0, sizeof(srio_cfg));
    srio_cfg.blockEn.bBLK1_LSU_EN= 1;
    srio_cfg.blockEn.bBLK2_MAU_EN= 1;
    srio_cfg.blockEn.bBLK3_TXU_EN= 1;
    srio_cfg.blockEn.bBLK4_RXU_EN= 1;
    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;
    msg_cfg.message_map = DSP0_message_map;
    msg_cfg.uiNumMessageMap=
        sizeof(DSP0_message_map)/sizeof(SRIO_RX_Message_Map);
    msg_cfg.TX_Queue_Sch_Info= TX_Queue_Sch_Info;
    msg_cfg.uiNumTxQueue =
        sizeof(TX_Queue_Sch_Info)/sizeof(SRIO_TX_Queue_Sch_Info);
    msg_cfg.rx_size_error_garbage_Q        = SRIO_RX_SIZE_ERROR_GARBAGE_Q       ;
    msg_cfg.rx_timeout_garbage_Q           = SRIO_RX_TIMEOUT_GARBAGE_Q          ;
    msg_cfg.tx_excessive_retries_garbage_Q = SRIO_TX_EXCESSIVE_RETRIES_GARBAGE_Q;
    msg_cfg.tx_error_garbage_Q             = SRIO_TX_ERROR_GARBAGE_Q            ;
    msg_cfg.tx_size_error_garbage_Q        = SRIO_TX_SIZE_ERROR_GARBAGE_Q       ;
    msg_cfg.datastreaming_cfg= NULL;    /*use default values*/
    srio_cfg.msg_cfg= &msg_cfg;
    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);
  • 请问DSP端及FPGA端回环测试是否正常?
  • 我的工程是基于STK_C6657里面的SRIO例程来修改的,但是没有测过回环,因为我当时是为了实现FPGA往DSP发数,我们很快就调通了,FPGA往DSP的DDR直接写数,数据都是正确传输的,所以就没管过回环了,我昨天又拿这个STK_C6657的SRIO例程测试了一下,不然就是卡在SRIO_PktDM_init();这个函数里面,不然就是进了内存保护的中断里面,报以下错误:
    [C66xx_0] Event 122: DMC_CMPA CPU memory protection fault for L1D (and other memory read finally goes through the L1D controller)
    memory protection exception caused by local access at 0x290b198
    Supervisor Read violation
    Event 127: EMC_BUSERR Bus Error Interrupt for global configuration space between 0x01C00000 - 0x07FFFFFF
    CFG read status error detected
    XID (Transaction ID)= 15
    Addressing error
    NRP=0xc04cf66, NTSR=0x1400d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5080a97a
    B3=0x2, A4=0x825180, B4= 0x0, B14= 0x8253a8, B15= 0x8230d0
    Exception happened at a place can not safely return!
    我想问一下这是什么原因啊?

    另外,我看网上有人有这个SRIO例程的说明文档,但是我没找到在哪里下载,能提供一个下载地址嘛?

    感谢!
  • 是突然报错的吗?参考以下链接改一下编译版本试试。

    附件的手册看一下:

    0564.SRIO_Programming_Performance.pdf

    可以回环测一下看看,是哪一端有问题。