现象:L1设置为cache,L2设置成sram。两个C6678通过srio的dio方式通信,从DSP0的ddr发送到DSP1的ddr中,DSP1收到doorbell后,先使用cachewbInvallL1(),再使用memcpy(),将DDR中的数据拷贝到L2 sram中。cachewbInvallL1后,DDR中的数据正常,单步执行memcpy后,发现DDR中的数据变成了cache里的数据,导致拷贝错误。试了几个cache函数,没有解决问题,后来用edma方式可以将DDR的数据正确搬到L2 sram中。
问题:1,C66X的edma有没有经过cache?
2,为什么使用使用了cachewbInvallL1再使用memcpy的时候还会出现cache一致性冲突?怎么才能正常使用memcpy?
Andy Yin1:
dio及EDMA搬移的数据读不会经过cache,你这里建议在memcpy之前使用cache Invalid,并不需要writeback。
SRIO接收的数据可以直接放到LL2,不需要经过再次数据搬移浪费时间。
Enoeht lea:
回复 Andy Yin1:
srio接收的数据放在DDR是应用需求。
使用cache invalid ALL程序好像会卡死。