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

SRIO message

您好:

   我现在想测试一下SRIO 的message传输,我有一块Q6455板,上面有四片C6455,它们之间通过switch互联,请问通过swtich可以传输message吗?如果可以的话,它是如何转发message呢?它的转发机制是怎样的呢?

    急用,谢谢回复。

Zhan Xiang:

6455上的message是通过mailbox来传输的,属于srio中的传输层。如果要使用switch,需要通过maintenance 包来配制switch的寄存器进行端口映射,即配置一张deviceID和端口的查找表,这样凡是有匹配的deviceID发送数据到switch中,就会自动路由到对应的端口。在DSP接收时,会根据srio packet中的mailbox进行区分,使用不同的队列进行接收。

xiaoyan Bian:

回复 Zhan Xiang:

Zhan Xiang,

感谢您的回复,我现在可以通过message传输数据了,但是困惑的是,每次发送方配置descriptor的message_length=4096B(SSIZE=256B)时,接收方最多收到2304B数据,即9个segment,而message_length=2048B时,接收方可以全部接收,按理论上,可以最多传输4096B,但是我这个怎么不行呢?

xiaoyan Bian:

回复 Zhan Xiang:

还有一个问题,就是当message_length=2048B时,接收方可以全部接收,但是RX_CPPI_ICSR/TX_CPPI_ICSR没有被清除掉,当我再次重新Load程序,再执行一次传输的时候,接收方又收不到了,这是怎么回事啊?不用中断行吗?

Zhan Xiang:

回复 xiaoyan Bian:

可以采用查询机制来接收,只要保证接收队列的RX 描述符数量足够多,这样不至于接收时没有描述符。你说的那个接收数据不全,你能详细描述下么,你是怎么接收数据的,通过查询描述符的ownership?

xiaoyan Bian:

回复 Zhan Xiang:

接收数据不全指的是:发送方的描述符里的message_length=4096B,但是接收方的memory里只收到2304B。

我没有用查询机制,我就是写完QUEUE_RXDMA_HDP后就行了,我搞不太明白mailbox、queue、buffer descriptor之间的关系,我知道一个message用一个描述符,但是两个message可以用一个mailbox吗?可以用一个queue吗?

xiaoyan Bian:

回复 xiaoyan Bian:

下面是我的SRIO message初始化,不知道哪里有问题

首先是发送DSP的:

TX_DESCP0_0->TXDESC0 = 0;

TX_DESCP0_0->TXDESC1 = (int )&xmtBuff1[0];  //Buffer Pointer

TX_DESCP0_0->TXDESC2 = CSL_FMK( SRIO_TXBUFFDESC_DEST_ID, 0x8)|

CSL_FMK( SRIO_TXBUFFDESC_PRI, 0)|

CSL_FMK( SRIO_TXBUFFDESC_TT, 1)|

CSL_FMK( SRIO_TXBUFFDESC_PORT_ID, 0)|

CSL_FMK( SRIO_TXBUFFDESC_SSIZE, SSIZE_256B)|

CSL_FMK( SRIO_TXBUFFDESC_MAILBOX, 0);

TX_DESCP0_0->TXDESC3 = CSL_FMK( SRIO_TXBUFFDESC_SOP,1 )|

//CSL_FMK( SRIO_TXBUFFDESC_EOP,1 )|

CSL_FMK( SRIO_TXBUFFDESC_OWNERSHIP,1 )|

//CSL_FMK( SRIO_TXBUFFDESC_EOQ,1 )|

CSL_FMK( SRIO_TXBUFFDESC_TEARDOWN,0 )|

CSL_FMK( SRIO_TXBUFFDESC_RETRY_COUNT,0 )|

CSL_FMK( SRIO_TXBUFFDESC_CC,0 )|

CSL_FMK( SRIO_TXBUFFDESC_MESSAGE_LENGTH,MLEN_512DW );

SRIO_REGS->QUEUE_TXDMA_HDP[0] = (int )TX_DESCP0_0 ;

然后是接收DSP的:发送DSP的SRIO ID号=0x7,接收DSP的ID号=0x8

SRIO_REGS->MAP[0].RXU_MAP_L =CSL_FMK( SRIO_RXU_MAP_L_LETTER_MASK, 0)|

CSL_FMK( SRIO_RXU_MAP_L_MAILBOX_MASK, 0x0)|

CSL_FMK( SRIO_RXU_MAP_L_LETTER, 0)|

CSL_FMK( SRIO_RXU_MAP_L_MAILBOX, 0)|

CSL_FMK( SRIO_RXU_MAP_L_SOURCEID, 0x7);

   SRIO_REGS->MAP[0].RXU_MAP_H =CSL_FMK( SRIO_RXU_MAP_H_TT, 1)|

CSL_FMK( SRIO_RXU_MAP_H_QUEUE_ID, 0)|

CSL_FMK( SRIO_RXU_MAP_H_PROMISCUOUS, 1)| //0)|

CSL_FMK( SRIO_RXU_MAP_H_SEGMENT_MAPPING, 1);  //1 multi-seg

RX_DESCP0_0->RXDESC0 = 0;

RX_DESCP0_0->RXDESC1 =(int )&rcvBuff1[0];

RX_DESCP0_0->RXDESC3 =CSL_FMK( SRIO_RXBUFFDESC_SOP,1 )|

CSL_FMK( SRIO_RXBUFFDESC_EOP,1 )|

CSL_FMK( SRIO_RXBUFFDESC_OWNERSHIP,1 )|

CSL_FMK( SRIO_RXBUFFDESC_EOQ,1 )|

CSL_FMK( SRIO_RXBUFFDESC_TEARDOWN,0 );

我觉得没有问题啊,但是接收方的ownership始终不为0,。

xiaoyan Bian:

回复 xiaoyan Bian:

怎么没有人回复啊?急求指教!

xiaoyan Bian:

回复 xiaoyan Bian:

怎么没有人回复啊?急求指教!

赞(0)
未经允许不得转载:TI中文支持网 » SRIO message
分享到: 更多 (0)