STM32H7 cache dtcm itcm 正确的CACHE管理方式

TCM为紧密耦合内存。特点是与Core运行同频,访问速度快,可以实现0等待访问;而SRAM至少需要等待1 cycle(不同频),Flash就更慢了。缺点是部分DMA没办法访问。

Cache为L1层缓存,访问 sub 0-cycle(比0等待更快),实测会RAM+CACHE比使用DTCM快一丢丢。

最佳配置是RA+WBWA,读分配+写回分配。

简单展开讲讲WB跟WT(直写)的区别。

WB是cpu仅与cache交换数据,cache中数据暂时不同步到sram中;等合适时机(比如操作外设)是再写入sram中。假设对同一变量多次操作,这样可以避免来回在sram中写入数据的延迟(时间局限性)

WT是写的时候同时写cache和sram。效率更低,但没有一致性的问题。

一致性:

多Host情况下会产生cache一致性的问题。例如Core和DMA主机。具体有2种情况:

1,变量a同时位于sram和cache中,配置为WB模式。此时Core修改变量a的值,还未写入sram。若DMA搬运sram中a的地址,则会产生一致性的问题(SRAM数据比较老)。需要在搬运前CleanCache,同步sram;并在逻辑上结束前禁止修改变量a

2. 变量a同时位于sram和cache中,配置为WB模式。此时DMA从外设搬运一值到a,还未同步到cache。此时CPU访问变量a(从cache),会造成一致性的问题(cache数据较老)。需要在搬运后InvalidCache,抛弃现有cache数据,从sram中访问。

各位可以品一下区别。一般来讲,DMA搬出需要clean;搬入需要invalid。

更新:

这里不赘述设备ram、sram、mmio等mpu相关的知识。

除了上面2点,还需要考虑到2点:
1. 当cache满后,cache内的内容会随机回写到ram中。这个会破坏dma接收缓冲区

2. 当接收缓冲区附近的数据被cache时,有一定概率会加载cache缓冲区内的数据(尤其是访问uint8变量时,可能导致旁边的数据被一起cache) 空间局限性

故此,对于接收缓冲区:

需要在传递DMA之前就Invalid Cache;同时之后也需要Invalid Cache。
最简单的办法当然是dma区域禁止cache。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值