硬汉嵌入式论坛

 找回密码
 立即注册
查看: 963|回复: 10
收起左侧

[MPU] DMA不会触发Cache,故应无效而非Clean

[复制链接]

10

主题

247

回帖

282

积分

高级会员

积分
282
发表于 2022-2-21 09:50:14 | 显示全部楼层 |阅读模式
我将IRAM3的Cache关掉,用DMA传输ADC数据到IRAM3,串口再从IRAM3读数据。
在DMA传输完成,SCB_CleanDCache_by_Addr后,串口发出的数据,前部80字节都是0,需要使用SCB_InvalidateDCache_by_Addr才能正常。

后来想了想,Cache在CPU核和总线桥之间,DMA是不会触发Cache的,如果Clean,就把Cache中的数据覆盖到DMA传输的数据上了,而此时Cache
中的数据是CPU初始化buf时写入的0,所以串口读出的buf前部是0.
这里应该无效,使CPU直接从RAM中读数据。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2022-2-21 10:00:41 | 显示全部楼层
总结来说就是,DMA传输前,需要将数据刷到实际缓冲地址,需要Clean操作。

DMA传输后,需要读取最实际缓冲地址最新数据,需要无效化操作。
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2022-2-21 12:36:26 | 显示全部楼层
可以看看 管理基于 CortexM7 的 MCU 的高速缓存一致性.pdf 里面有例子有图
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
 楼主| 发表于 2022-2-21 15:10:18 | 显示全部楼层
eric2013 发表于 2022-2-21 10:00
总结来说就是,DMA传输前,需要将数据刷到实际缓冲地址,需要Clean操作。

DMA传输后,需要读取最实际缓 ...

传输前,如果CPU对BUF进行初始化,就需要Clean,如果没操作,那就不必要。
DMA不会触发Cache。
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
 楼主| 发表于 2022-2-21 17:17:18 | 显示全部楼层
cctv180 发表于 2022-2-21 12:36
可以看看 管理基于 CortexM7 的 MCU 的高速缓存一致性.pdf 里面有例子有图

能把文档传上来么?谢谢o( ̄▽ ̄)d
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106834
QQ
发表于 2022-2-21 17:25:47 | 显示全部楼层
fengxin32 发表于 2022-2-21 15:10
传输前,如果CPU对BUF进行初始化,就需要Clean,如果没操作,那就不必要。
DMA不会触发Cache。

准确的说是将CPU写到Cache里面的最新数据刷到实际地址空间。CPU得这部分数据有更新,就刷,没更新不用刷。
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2022-2-22 09:26:56 | 显示全部楼层
你已经关闭了SRAM3的D-Cache,不应该有楼主说的的逻辑,可能配置有点问题。
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2022-2-22 09:28:06 | 显示全部楼层
参考文档:AN4839 Level 1 cache on STM32F7 Series and STM32H7 Series
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
 楼主| 发表于 2022-2-22 15:47:41 | 显示全部楼层
emwin 发表于 2022-2-22 09:26
你已经关闭了SRAM3的D-Cache,不应该有楼主说的的逻辑,可能配置有点问题。

哦,描述有点问题,AD数据是DMA到AXI,程序把数据塞到IRAM3的串口BUF
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2022-2-22 19:03:53 | 显示全部楼层
fengxin32 发表于 2022-2-21 17:17
能把文档传上来么?谢谢o( ̄▽ ̄)d

[Cache] TB3195管理基于 CortexM7 的 MCU 的高速缓存一致性
https://www.armbbs.cn/forum.php?mod=viewthread&tid=110577
早就传过了,有中英文版本,demo 我也写过
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
 楼主| 发表于 2022-2-23 10:08:07 | 显示全部楼层
cctv180 发表于 2022-2-22 19:03
[Cache] TB3195管理基于 CortexM7 的 MCU 的高速缓存一致性
https://www.armbbs.cn/forum.php?mod=viewt ...

谢谢,(●'◡'●)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 00:40 , Processed in 0.181025 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表