试验了一下,如果将HPI接口的缓存放置在内部RAM,则所有的操作均正确,如果将HPI的缓存放置在外部SDRAM中,如果不禁用cache,无论采用查询方式还是中断方式则读取数据和写数据会出错,明明HOST端修改了内容,就是读不到,不修改程序,仅仅禁用cache则数据正确。
HPI使用的是EDMA,ti资料spru609b中原话是这样的:
Notice that the hardware ensures that accesses by the CPU and EDMA to
internal SRAM addresses are coherent, but external addresses are not.
Software must ensure external addresses accessed by the EDMA are not held in cache when the EDMA accesses them.
我现在遇到的问题是在打开cache,将HPI的缓存放置在外部SDRAM中时,即使采用CACHE_flush和CACHE_clean来维护cache与SDRAM的内容一致,读到的结果也不对,请教一下,哪里操作错了
Andy Yin1:
CPU侧写数据后需要进行cache flush保证数据刷到外部ram,读数据前进行cache invalid,保证cpu读到外部ram更新的数据。外部buffer需要保证起始地址及长度cache line对齐。