硬汉嵌入式论坛

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

[SPI/QSPI] OSPI内存映射+DMA2D传输

[复制链接]

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2026-1-23 18:11:27 | 显示全部楼层 |阅读模式
当CPU和DMA2D同时访问OSPI如果MPU不开共享就会出了异常,当时开了共享那么CPU的cache加速就基本没效果,显示效果会更差。有什么解决方案吗
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121126
QQ
发表于 2026-1-24 09:55:50 | 显示全部楼层
这个是OSPI接了个RAM? 还有两种玩法
1、可以做个WT透写,即关闭写Cache,仅开读Cache看下性能怎么样。如果可以话,DMA2D后手动做Cache无效化即可
2、也可以直接开Cache最高性能,DMA2D写操作前做Cache clean操作,DMA2D读操作后做Cache 无效化。

这两种方法性能都比直接关闭Cache强。

性能配置方法。
使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最高性能和最低性能配置
https://forum.anfulai.cn/forum.p ... 9322&fromuid=58
(出处: 硬汉嵌入式论坛)




回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-26 11:03:11 | 显示全部楼层
SDRAM作为显存,使用FREERTOS,数据存在外部NORflash里面,用OSPI做内存映射,目前就是当DMA2D访问OPSI拷贝绘制一个地方,使用DMA2D中断,然后CPU也去访问OSPI绘制另一个地方,这样导致直接就异常了
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121126
QQ
发表于 2026-1-27 09:51:33 | 显示全部楼层
monuo 发表于 2026-1-26 11:03
SDRAM作为显存,使用FREERTOS,数据存在外部NORflash里面,用OSPI做内存映射,目前就是当DMA2D访问OPSI拷贝 ...

也可以按照我二楼方法配置下这个内存映射地址区的MPU Cache属性试试。
回复

使用道具 举报

4

主题

161

回帖

173

积分

初级会员

积分
173
发表于 2026-1-27 11:43:41 | 显示全部楼层
monuo 发表于 2026-1-26 11:03
SDRAM作为显存,使用FREERTOS,数据存在外部NORflash里面,用OSPI做内存映射,目前就是当DMA2D访问OPSI拷贝 ...

OSPI是NORflash,应该只读吧,DMA2D去访问OSPI干嘛呢?读资源的话,不应该是DMA2D去读吧?
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-27 16:50:32 | 显示全部楼层
eric2013 发表于 2026-1-27 09:51
也可以按照我二楼方法配置下这个内存映射地址区的MPU Cache属性试试。

两个方案都试过了,都不行,直接就卡住了
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-27 16:51:35 | 显示全部楼层
turnip 发表于 2026-1-27 11:43
OSPI是NORflash,应该只读吧,DMA2D去访问OSPI干嘛呢?读资源的话,不应该是DMA2D去读吧?

OSPI做内存映射,DMA2D去映射的地址拷贝数据到SDRAM做显示
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-27 18:19:42 | 显示全部楼层
当前的测试状态,是这样的。
1.png
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121126
QQ
发表于 2026-1-28 09:52:35 | 显示全部楼层
monuo 发表于 2026-1-27 16:51
OSPI做内存映射,DMA2D去映射的地址拷贝数据到SDRAM做显示

测试下这个空间控制支持MDMA不,如果支持,可以让MDMA拷贝,性能更强,看看正常不
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-28 17:41:25 | 显示全部楼层
eric2013 发表于 2026-1-28 09:52
测试下这个空间控制支持MDMA不,如果支持,可以让MDMA拷贝,性能更强,看看正常不

MDMA目前测试通过改变OSPI的映射模式,不修改MPU(TEX:1,S:0,C:1,B:1),映射模式修改为READ_CFG可以进行传输,传输结束后,映射模式修改WRAP_CFG这个,这样虽然可以正常,但是必须要等MDMA传输完成才可以修改模式,本来是想着CPU和MDMA可以同时渲染提高帧率,但是这样子操作相当于CPU也是在等待,反而显示的帧率更低了
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2026-1-28 18:50:39 | 显示全部楼层
monuo 发表于 2026-1-28 17:41
MDMA目前测试通过改变OSPI的映射模式,不修改MPU(TEX:1,S:0,C:1,B:1),映射模式修改为READ_CFG可以进 ...

目前测试MDMA在READ_CFG模式下传输,要773ms,这个WRAP_CFG模式下使用memcpy拷贝相同的数据只要68ms。挺奇怪的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 15:20 , Processed in 0.082176 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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