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.

c6455 SRIO msg方式 传输过程中的问题



应用场景:

两个6455对联,通过SRio直连 , 配置成了4x 模式   MAY=20   SERDES_CFGRX/TX_CNTL 的RATE 字段选用half rate(one semple per PLL)。外部时钟为125M。

每个TX/RX Desc使用1个buff,对应1条msg,每条msg传输4096byte数据,所以在配置 TX/RX Desc时,每个 Desc  的 SOP和EOP都设置为'1'(参考手册);

EOQ 不进行配置;每个Desc的 ssize字段配为最大:256byte(32个Double_word);TX方优先级配置为 0;RX方用 mailbox0接收;每个Tx desc的 mlen 配为4096byte;

发送/接受的payload用全局变量二维数组作为缓存,eg:  u32 Txbuff0[10][1024]      u32 Rxbuff0[10][1024] 或  u8 Txbuff0[10][4096]  u8 Rxbuff0[10][4096]

调试方法:

1.仿真器在线调试(合众达seed-xds560puls)。

2 .没有采用中断的方法,即所有与 CPPI_RX/TX _interrput有关的寄存器都没去理会。在配置好 tx、rx desc之后,把第一个 tx/rx desc 的地址往

    srio-->reg-->QUEUE_RX/TXDMA_HDP[0]寄存器赋值就表示启动 TX或RX了.(RX 方和TX方都使用queue 0 来处理 DESC )

3.以最后一个TX/ RX DESC 的ownership字段被端口置0 作为发送或接受完毕为标准。 

碰到的问题:

1. 只发一条msg时(tx/rx desc 只有一个,没有组链,next buff 字段都为“0”),tx 方在发出后,ownership位始终为1,没被端口置0。但是rx 方的 ownership位在接收到数据后被端口置‘0’,但是没有收全,有时只能收到1024byte 有时只能收到2048byte,当然有时也能完整收到4096byte(此时tx方的desc 的ownership位被端口置0了 ),经多次测试以上三种现象随机发生,但只能收到1/4数据的次数出现的比较大。 最重要的一点是,当RX方收不全数据时,RX DESC的CC字段报错为:

time out on receving one of the segmengs .   是不是说明,rx 方在接收时,tx方没有连续的发送,导致在发送16个segment中的第n个segmeng发生超时或接收超时,导致之后的segment不能继续接收了?但是如果是初始化有问题或配置有问题,为什么有的时候是可以完全接收到4096byte的数据呢?

之前论坛上有个朋友 也碰到过用srio 发送1条msg只能接收一半数据问题.后来他的发现的问题是自己把PER_SET_CNTL 的bit8 置成了1,实际应为0,因为他用的也是4x模式,置0时表示 udI buffer 基于优先级而不是port。貌似他改过后问题就解决了,但是我的PER_SET_CNTL 的bit8 始终都是按正确的配置“0”来设的,问题一直如故,不知道我的问题和那位朋友是不是相同。


2 。当多条rx/tx Desc 组成链时(10个tx /rx desc),上述现象也会发生,即有时第一条msg承载的数据都发不完,有时候第一条能接完,但是第二条之后就接不到了,但是有时候能接收到5条(发送总数据量的1/2)。当出现能接收到5条的现象时,查看tx 方的 TX DESC 的CC字段,会发现每个 tx desc 的cc字段会间隔报错: desc programming error.。比如 第一条 tx 正常,对方rx也接收完全;但第二条tx 发送成功(ownership 被置0),但cc字段就会有报错反馈: desc programming error,可是在rx方 仍然正常收到了数据;第三条 tx 正常 无cc报错,对方rx 也正常;第四条的现象又和第二条一样。直到第5条之后就再也收不到数据了,当然,tx方显示的发送也不成功(ownership 始终为 1)。