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.

关于两片DSP之间测试SRIO通信的问题(急!!!)



       自己设计的原理图,2片DSP6678,分别是DSP-A和DSP-B;通过CSP1848(RAPID IO SWITCH)连接,每个DSP 4路SRIO LANE都连上了(初步跑在X1模

式),,FPGA控制DSP和CPS上电。FPGA和CPS配置是另外一种CPU控制。

    软 件环境是CCS5;

     软件例程是官网提供的.:目录是\K1_STK_v1.1\K1_STK_v1.1\SRIO 程序是SRIO_Test.c 和 SRIO_2DSP_Test.c

     测试模式:测试两个DSP之间的SRIO通信,选择测试模式是  SRIO_NO_LOOPBACK;

     参考时钟是156.25M,线速lane_rate=1.25G;

 问题:

1、修改了参考时钟输入,也修改了默认测试速度#define SRIO_DEFAULT_TEST_SPEED 1.25,不知道在哪里修改PLL啊,怎么知道是正确的倍频了呢?

2、两片DSP通过交换机连接,硬件是直接连接相应的端口,CPS这边是通过DESTID来路由每个PORT的路由表(即输出PORT),在DSP这边的程序上看不到DESTID啊,只看到的是两片DSP的BASE_ID;

#define DSP0_SRIO_BASE_ID 0xA0
#define DSP1_SRIO_BASE_ID 0xB0

CPS1848那边需要通过分析PACKET 包里的DESTID来路由到对应的端口,找了一下发现程序里面有DESITID的是SRIO_Multiple_Test_Config声明要发送的数据包有

      包类型                                      SOURCE                                           DEST                                                           SIZE

SRIO_PKT_TYPE9_STREAM,     CORE0_LL2_HOST_SIZE1_FDQ,                   DSP1_SRIO_BASE_ID+SRIO_RX_FLOW_CORE1_LL2,            4096

SRIO_PKT_TYPE_SWRITE,      ((Uint32)&packetBuffer_LL2_Size1[0][0])+0x10000000,     ((Uint32)&packetBuffer_LL2_Size1[1][0])+0x10000000, LL2_PACKET_BUFFER_SIZE1},

从这里面看了下,这个DEST是地址啊,,,,,不是CPS需要的DEST ID啊。。。。。。

3、有个大神回的  “ CSP1848是 Rapidio switch吗?需要配置 DSP上的DEVICE ID 互为SRC和DST的DEVICE ID“DSP上的DEVICE ID在哪里啊?? 急急急


谢谢了!!

  • 1. 重点看看KeyStone_SRIO_Init()和 

    KeyStone_SRIO_Serdes_init(srio_cfg->serdes_cfg, srioSerdesRegs);
    Wait_SRIO_PLL_Lock();

    KeyStone_SRIO_set_1x2x4x_Path(srio_cfg->srio_1x2x4x_path_control);

    这几个函数?

    2  传输时DESTID和SRCID的配置是通过LSU4寄存器里的DESTID 和SRCID位域进行的

    gpSRIO_regs->LSU_CMD[lsuNum].RIO_LSU_REG4=
    (transfer->intrRequest<<CSL_SRIO_RIO_LSU_REG4_INT_REQ_SHIFT)|
    (transfer->srcIDMap<<CSL_SRIO_RIO_LSU_REG4_SRCID_MAP_SHIFT)|
    (transfer->supGoodInt<<CSL_SRIO_RIO_LSU_REG4_SUP_GINT_SHIFT)|
    (transfer->dstID<<CSL_SRIO_RIO_LSU_REG4_DESTID_SHIFT)|
    (transfer->idSize<<CSL_SRIO_RIO_LSU_REG4_ID_SIZE_SHIFT)|
    (0<<CSL_SRIO_RIO_LSU_REG4_XAMBS_SHIFT)|
    (transfer->priority<<CSL_SRIO_RIO_LSU_REG4_PRIORITY_SHIFT)|
    (transfer->outPortID<<CSL_SRIO_RIO_LSU_REG4_OUTPORTID_SHIFT);

    3 就是SRIO协议规定的baseid,具体设置代码如下

    void KeyStone_SRIO_set_device_ID(
    SRIO_Device_ID_Routing_Config * device_id_routing_config,
    Uint32 uiDeviceIdNum)
    {
    int i;

    /*The TLM_SP(n)_BRR_x_PATTERN_MATCH registers hold the 15 allowable DestIDs,
    note that the first register is not used. We use the RIO_BASE_ID register
    to hold the first ID */
    gpSRIO_regs->RIO_BASE_ID= device_id_routing_config[0].idPattern| /*Large ID*/
    ((device_id_routing_config[0].idPattern&0xFF)<<16); /*small ID*/

  • 太感谢您了,谢谢 多谢