这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 高手留步!!!ARM 开cache问题请教!

共5条 1/1 1 跳转至

高手留步!!!ARM 开cache问题请教!

菜鸟
2005-03-02 18:48:21     打赏

CPU:S3C3410B

语音芯片dsp:奥科(audiocode)

现象:当使能cache时,dsp下载失败;对其他外设操作操作均正常,只有dsp读写操作失败;于是当对dsp进行读写操作前,关闭cache,操作后再打开cache,则dsp可以下载成功,但声音不正确,是十分嘈杂的声音,也无法检测dtmf;

1,对外设操作(如flash,dsp)时,若使能cache,是否必须设置其地址在非cache区域?对flash进行读写操作时,若地址在cache区域,则读写失败。使用非cache区域,应该是从内存中取数据而不是从cache中取数据,那么是否必须使用cacheDmaMalloc函数,当对flash操作进行内存分配时?

2,MMU主要是对实际物理地址与虚拟地址间建立映射关系,对于S3C4510B此款无MMU的cpu,非cache区域是否也可以理解为实际物理地址与虚拟地址间的映射关系?

3,对于上述现象,是否是cache中的数据与内存中的数据不一致造成的?有什么建议?




关键词: 高手     留步     cache     问题     请教    

菜鸟
2005-03-04 03:34:00     打赏
2楼
怎么每人回呀?

菜鸟
2005-03-04 04:09:00     打赏
3楼

转贴:

Cache的一致性问题: 很多时候在我们开发板卡驱动程序的时候我们对分配的内存带的cache会产生迷惑,我们什么时候应该分配带cache的内存,有 cache有什么好处,应该要注意哪些问题,有可能会出现哪些问题等等太多的问题不明确,所以我们在这里就简单介绍一下有关的cache问题。 首先cache的最大的好处是,解决CPU与内存之间的瓶颈,我们现在使用的SDRAM的速度一般都在3ns~10ns左右,而CPU的速度已经到了1G,甚至十几G或几十G的速度,很明显这样的速度差异会导致CPU在存取内存时经常要等待数据在内存上的操作,这将致命地影响系统的性能。所以人们引进了cache机制,因为造价及物理上的限制cache通常都不大只有256K或512K,但是速度很快,它的位置一般在CPU与内存之间,它有一些列的快速算法来保证下次CPU存取内存的数据在cache内的高机率。这样CPU在存取数据如果数据在cache内则直接对cache进行存取而无须与缓慢的内存打交道。 为板卡开发的driver必须保证cache的一致性,即cache中的数据必须与内存中的数据保持同步,因为在使用异步方式读取内存时有可能产生内存与cache失步。数据cache是为了减少存取内存的次数,而加快系统的性能,数据cache通常有两种放式:writethrough和copyback。Writethrough是指在写内存时同时也往cache中写。保证cache的在输出上一致,但不保证在输入时一致。Copyback仅将数据写到cache中,它保证数据在输入和输出时都一致。 当CPU写一个DMA设备上的内存时,数据首先被写到cache中,当DMA设备从RAM中传输数据时,不保证内存中的数据与cache中的数据一致。这样输出到设备的数据也许不是最新的,最新的数据应该在cache内。可以在数据传输到DMA设备之前将cache数据刷新到内存中。 当CPU读一个DMA设备上的内存时,数据读可以来自cache的buffer而不是从设备传输到内存的数据,可以确保cache buffer已经被标记(屏蔽)来解决读出的数据来自内存而非cache. Driver可以通过分配无cache buffers(使用cacheDmaMalloc())或刷新和使cache无效来解决CPU与设备之间数据传输的cache一致性问题。分配无cache buffers常用于分配静态buffers,它需要MMU的支持。无cache buffers频繁地被动态分配和释放将导致大量的内存被标记为无cache.一个择中的方法来使用动态无cache buffer是人为地刷新(使用cacheFlush()函数)和屏蔽cache (使用cacheInvalidate( )).注意在设备读数据之前用cacheFlush( )保证数据一致,而在设备写内存后用cacheInvalidate( )保证将cache和内存数据的一致。


菜鸟
2005-03-04 04:24:00     打赏
4楼

1,Writethrough是指在写内存时同时也往cache中写。保证cache的在输出上一致,但不保证在输入时一致。这句话怎么理解?

2,当CPU写一个DMA设备上的内存时,数据首先被写到cache中,当DMA设备从RAM中传输数据时,不保证内存中的数据与cache中的数据一致。 这句话是说,CPU对DMA设备进行写操作,数据虽写到cache中,但却是从ram中取的数据。cpu如何控制从cache取数据还是从ram取数据?


菜鸟
2005-03-07 18:49:00     打赏
5楼

如果CACHE中已经有RMA数据的映像,那么CPU就会从RAM中取数据,虽然有可能这时CACHE和RAM中的数据已经不一致了;反之,CPU会从RAM中取数据,如果这快RAM是CACHEABLE的,那么CPU会把一块数据都取到CHCHE中。

还有外设和FLASH的地址空间不能设置承WRITE BUFFERABLE,外设的地址空间也不能设置成CACHEABLE的,

但FLASH的地址空间可以设置成READ CACHEABLE,无论是DATA还是INSTRUCTION,但FLASH的地址空间千万不能设置成WRITE CACHEABLE,那样的话FLASH的操作都是不能完成。

对于没有MMU的CPU,要使能CAHCE,必须配置MPU,MPU很简单,就是对不同的内存区域给予不同的读写权限和缓冲机制,更具体的可以看看ARM的资料,在ARM的网站上就有。


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]