DMA可以使用带cache的内存吗?
为了分配一块内存给DMA使用,一般用这两个函数分配内存 HalAllocateCommonBuffer,AllocPhysMem。这两个都函数可同时返回物理地址和虚拟地址。但这两个函数分配的内存都是uncached。
DMA应该是不使用cache的吧。如果我能在逻辑上保证(比如读之前flush cache)始终能读到内存中的数据,那有没有可能分配一块带cache的内存给DMA使用呢?该如何操作?
DMA应该是不使用cache的吧。如果我能在逻辑上保证(比如读之前flush cache)始终能读到内存中的数据,那有没有可能分配一块带cache的内存给DMA使用呢?该如何操作?
...全文
相关推荐
Linux驱动中的DMA和Cache一致性问题
这样的背景知识包括理解Cache的工作原理、CPU流水线的特性、Linux内存管理的机制,以及Linux内核中DMA接口函数的使用方法。
STM32H743+DMA+UART+CACHE
为了解决这个问题,我们需要在DMA传输前后进行Cache的刷新或无效化操作,确保数据的一致性。接下来,我们讨论如何使用DMA与UART进行通信。
DMA和Cache一致性问题
DMA和Cache一致性问题: CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,比内存小的多但速度快。 因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间
cache存储器 DMA和cache一致性问题.doc
当CPU需要数据时,它首先查看Cache,如果数据已经存在于Cache中(命中),则直接从Cache读取,否则(未命中)就需要从主内存中获取,并可能将数据存入Cache以备后续使用。
Linux设备驱动之DMA
在DMA与高速缓存一致性方面,由于CPU通常使用高速缓存(cache)加速数据访问,当设备通过DMA读取或写入内存时,可能导致缓存中的数据与内存中的数据不一致。


