你(们)好
我们使用的是 Sitara AM3359处理器。 处理器连接到外部 SDRAM 芯片。 为了允许高速缓存和非高速缓存访问 SDRAM、SDRAM 控制器被配置为 SDRAM 芯片内存的两倍大小。 最高地址位未连接到芯片、因此最高位不用于构建到芯片的访问地址。 使用此配置、配置的地址空间的下半部分包含与配置的地址空间的上半部分相同的内容。 MMU 配置为缓存已配置地址空间的较低者。 不缓存对较高地址的访问。
内存测试(galpat)使用未缓存的较高地址来测试内存。 为了防止测试期间发生内存操作、当测试被执行时、中断被关闭。
遗憾的是、即使在关闭中断的情况下、测试也会在执行期间检测内存操作。 我们的第一个想法是 DMA、但是、没有 DMA 用于访问测试地址空间中的地址。 下一个想法是、高速缓存在测试期间会写出一些行。 为了防止这种情况发生、我们确保在中断关闭后但在测试开始之前将测试的地址写回 RAM (清除)。 这样、测试过程中发生的机械操作会减少。 但是、操作仍在发生。 通过对缓存中测试的地址进行写回(清除)、它仍然大约在24小时内发生一次。
我们使用函数 CP15DCacheCleanBuff (tStartAddress_p、u32Size_p)清理测试的地址。 该函数位于 TI 库中。
我们的问题是、回写(清理)是否保证所有刷新的线路都写入 SDRAM 存储器? 现有的高速缓存写入缓冲区如何?
在上述测试中,高速缓存策略是回写的:
MMU_MEMTYPE_NORMAL 非可共享(MMU_cache_WB_WA、MMU_cache_WB_WA)
我们还尝试了内置缓存池的缓存策略写入:
MMU_MEMTYPE_NORMAL 非可共享(MMU_cache_WT_nowa、MMU_cache_WB_WA)
这似乎解决了在测试执行期间不需要的存储器访问的问题。 我们不知道为什么这会解决这个问题。 它是否会停用高速缓存的写入缓冲器? 写入缓冲区是否会导致我们的问题?
是否有介绍 AM3359处理器缓存及其写入缓冲区的文档?
感谢您的回答。