专家好!
本人最近想提供SRIO实现两块C6678 DSP间的数据环路通信,程序是在TI官方提供的SRIO例程上修改得到的,软件版本号5.3.0,其中遇到了一些问题,望解答!
1、在例程中的uiSrc其为发送数据的源地址,是不是不能赋给它DDR3的地址,为什么?
2、现在两边数据通信时,首先DSP1采用乒乓操作,分别循环给两块地址发数,在DSP2的doorbell服务函数里根据doorbell值分别进行DMA搬移,等全部数据接收完后,该DSP2再将该段数据以同样方式发送回去,DSP1也以同样方式接收,只是地址不同而已。现在的问题是当我两端程序跑起来后,偶尔会出现DSP1给DSP2数能发送完,可是在DSP2端,doorbell响应次数少2次,而且一定为第1包和第3包数;或者DSP1能给DSP2发数,DSP2也能正确接收,当DSP2给DSP1发回去时,又出现少两包情况,也是第1包和第3包。
然后我就怀疑是不是DSP发数太快,导致第一包被2包冲掉了,第3包被第4包冲掉了,所以我试着在两端DSP程序的第1次和第2次发数间都加了延时,结果环路数据是能正确传了,但是把循环次数加大,又会出现上述问题,是不是在程序里我需要修改些参数,毕竟加延时影响性能,求解答!!!
下面就是我修改后的程序,标题中的256M表示我发数65536次,每次4096B,此时能实现数据环路传递,次数改大就不行,希望专家能给我看看,哪里出现了问题,需要怎么修改?
谢谢!
Zhan Xiang:
1. 发送数据源可以采用DDR3,没有限制。DDR3可以通过MSMC上的SES单元进行地址转换,你需要注意的是你填入的地址是否是转换过的,要和DSP软件的配置保持一致。
2. 你可以试试用带响应的写操作发送数据,然后再产生doorbell,用来判断是否是由于doorbell在数据没有完成前就发送到对端。
3. 另外你完全可以利用doorbell来触发EDMA,通过EDMA对SRIO寄存器操作,从而达到自动搬移数据的目的。
qian cui:
回复 Zhan Xiang:
你好,我用6678测试SRIO接口,速率3.125G,包的ftype=5,ttype=4,有时候会出现LSU_REG6_FULL现象,这样程序就会一直检测这个状态,其他数据就发送不出去了,这个是什么引起的?怎么解决?
还有如果我要配置成5G速率,除了要改SERDES_CFGPLL里的倍频数据外还有啥要改的?3.125G和5G参考时钟是一样的156.25,都是half rate。
偶尔还会出现SRIO的port_ok没有置位,代码和板子都是同一个。怎么解决或者验证?
谢谢