TI中文支持网
TI专业的中文技术问题搜集分享网站

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);
Nancy Wang:

请问DSP端及FPGA端回环测试是否正常?

,

user4257905:

我的工程是基于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 0x290b198Supervisor Read violationEvent 127: EMC_BUSERR Bus Error Interrupt for global configuration space between 0x01C00000 – 0x07FFFFFFCFG read status error detectedXID (Transaction ID)= 15Addressing error
NRP=0xc04cf66, NTSR=0x1400d, IRP=0x0, ITSR=0x0, TSCH= 0x0, TSCL= 0x5080a97aB3=0x2, A4=0x825180, B4= 0x0, B14= 0x8253a8, B15= 0x8230d0
Exception happened at a place can not safely return!
我想问一下这是什么原因啊?

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

感谢!

,

Nancy Wang:

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

附件的手册看一下:

0564.SRIO_Programming_Performance.pdf

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

赞(0)
未经允许不得转载:TI中文支持网 » C6657通过SRIO像FPGA发送数据时丢失起始两个字节和最后八个字节
分享到: 更多 (0)