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

数据传输疑问

各位大侠:

    正在调试的工程里有一段是将64*640*8B的数据用edma3从ddr3的地址0x90000000搬移到msmc中,有一个奇怪的现象:

    如果msmc中的目的地址是0x0c100000和0x0c300000的话,数据全部正确。而如果msmc中的目的地址是0x0c000000和0x0c200000的话数据有错误,还不是全都错,是一段错一段对,太奇怪了。

    另外在edma3之后我用 CACHE_wbL1d ((void *)msmc中的目的地址, 64*640*2*sizeof(float)), CACHE_FENCE_WAIT); 将其writeback了。

                  CACHE_wbL2   ((void *)msmc中的目的地址, 64*640*2*((float)), CACHE_FENCE_WAIT)

是在6678le开发板上跑的,加载的是evmc6678l.gel。

请教各位专家!

Andy Yin1:

你的memory是咋分配的,有没有可能是一块memory同时存放多种数据呢。

对于cache一致性的维护,需要对源地址在搬移之前使用cacche write back,对目的地址则在搬数之前进行cache invalid。

把你的map文件及代码发上来看看,SL2的有效地址范围是0x0c000000~0x0c1FFFFF总共2MB的空间。

kai guo:

回复 Andy Yin1:

To Andy Yin1:

1. 没有一块memory同时存放多种数据

2.对于cache一致性的维护,我理解是要读一个地址前先要cache invalid以读到真实的。写一个数到地址中,写完要cacche write back,确保真的写进去而不是写到cacche里,对吗?

3.请问你说的map文件是不是设置cache的方式,我设置的是L1d,L1p全cache,L2为sram,SL2和ddr3为sram。另外SL2不是0x0c000000~0x0c3FFFFF共4MB吗?

Andy Yin1:

回复 kai guo:

关于cache一致性维护,读的时候不需要invalid;如果是Core去写,则在写完之后write back;如果是其他的如EDMA写则在启动EDMA之前可以对数据进行invalid,这样可以避免core往外刷cache把EDMA写的数据覆盖。

map是编译之后生成的文件,存放在工程debug目录下。6678的SL2是4MB.

kai guo:

回复 Andy Yin1:

to Andy Yin1:

问题解决,我之前在启动EDMA之前对数据进行invalid,进行invalidL1D和invalidL2,现在把invalidL1D去掉,仅仅invalidL2后数据正常了。

貌似invalidL1D只针对L2,而invalidL2针对SL2.

还有两个问题:1.文档好像写着invalidL2一次最多256kB,但我一次invalidL2大于256kB好像也正常。

2.现在我的应用要求多个core同时用EDMA Controller 0来从ddr3不同地址搬移数据到SL2的不同地址,不知可行否?

kai guo:

回复 Andy Yin1:

to Andy Yin1:

我是对目的地址invalid。

再问个问题:如果我的L1d配置成全部32Kcache,L2配置成全部512K都是SRAM,那么对于操作L2、SL2和DDR3中的数据只需要维护对应的L1d的一致性了,对吗?

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 数据传输疑问
分享到: 更多 (0)