工具与软件:
专家、您好!!
我已经经历了一些奇怪的行为,我想问你任何类型的提示,在哪里看.
我在 DDR 存储器中有一个缓冲器、该缓冲器由 A15 (Linux)写入并由 C66x (TI-RTOS)异步读取。 C66x 在大多数情况下读取的数据是正确的、但有时(如果 C66x 在被 A15写入后短时间读取缓冲区)它会碰巧有错误的数据。 我已经看到它完全损坏,部分损坏(大小的损坏的部分的16字节)或权利。
我们实现了从 C66x 到 IPU1 (TI-RTOS)的通知、以检查 C66x 正在读取的同一存储器地址、我们发现 IPU1看到数据与 C66x 一样错误、但如果我们几秒钟后让 IPU1再次读取相同的存储器位置、结果似乎是正确的。
我们认为 DMA 可能存在某种问题、因此我们在缓冲区前后添加了健全签名(每次读取缓冲区时 A15都会写入/更新新值、不是详细的哈希)、并且我们看到大多数情况下两个签名都正常、有时其中一个签名未正确更新、在极少数情况下、没有签名。
我们也认为内存可以在 Linux-A15端缓存、但/dev/mem (与 mmap 一起使用)似乎没有缓存。 这是真的还是在/dev/mem?上有任何形式的纪念
C66x (MAR 寄存器)和 IPU1 (Ammu)均不高速缓存缓冲区所在的内存区域。
所以,最后的 somersault 是将缓冲区从 DDR 移动到 OCMC ,它的工作是完美的!
您是否愿意告诉我任何我可以检查/调查的东西、以了解为什么它在 OCMC 上工作、但在 DDR 上不工作? 有基准吗? 有什么想法吗? Cach é? DMA? 其他? 我应该重点关注 EMIF-DDR 和 OCMC 之间的哪些差异?
感谢你 indadvanced 任何帮助!