OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5161|回复: 7

RT1052 SDRAM内数据拷贝太慢

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2016-8-11
在线时间
16 小时
发表于 2019-4-4 14:45:11 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 ntmusic 于 2019-4-4 14:47 编辑

        求助大家,RT1052的SDRAM在使用时有没有要注意的事项,我在用时发现访问SDRAM速度非常非常慢。在应用中,我要从Flex SPI Flash中加载一张图片的像素数据到SDRAM中,然后对这个图片像素进行一些色彩处理,使用2层For循环嵌套遍历图片中的每一个像素,简单对像素颜色判断后把值放回SDRAM中另一块区域中。结果发现在SDRAM中处理800*480像素的RGB565格式图片,居然耗时180多毫秒,简直不可思议,然后我再试一下单纯把SDRAM中一块区域中的数据也用2层For循环搬移到另一块区域,中途不做任何处理,发现居然也要130多毫秒!这完全不能接受,怀疑是我的配置有问题,于是用正点原子的开发板和例程(号令者)同样做试验:        硬件环境:正点原子RT1052核心板+转接小板+7寸RGB接口TFT
        测试程序:正点原子例程-实验19 eLCDIF(RGB屏)
        为了测试,我在原实验源码基础上,修改了以下2点:


        1、增加GPTimer1产生1ms中断用于计时
        2、增加一个SDRAM数据拷贝测试程序,放到例程中的while(1)大循环前。该测试程序主要测试:
            A:使用2层For循环搬运SDRAM中的数据,然后打印搬运用时。从地址0x80500000拷贝u16类型数据(800*480)个到地址0x805BB800。
            B:使用memcpy函数拷贝SDRAM中的数据,地址和长度同上,打印搬运用时。
            C:使用2层For循环,将Flex SPI Flash中地址0X60080000开始的数据拷贝到SDRAM中,数据类型同样为u16类型数据共(800*480)个。
            D:使用memcpy替换两层For循环嵌套再执行C的数据搬运。
        测试结果如下:
                A:132ms  B:49ms  C:12ms  D:12ms
        可以看到A确实是非常非常慢,这肯定不科学吧!!然后我发现不论是例程源码,还是官方SDK Demo,都在MPU中把SDRAM大部分空间都配置为了无Cache,无缓存,而我定义的拷贝地址正好处于这部分空间(正点例程中,MPU_Memory_Protection函数的region7仅配置了2MB SDRAM可以使用Cache和缓存)。于是我把这个region7的值改大到32M,然后再在例程中测试,发现拷贝速度有了极大的提升:
               A:16ms  B:9ms  C:12ms  D:11ms
        这速度看起来是正常的,于是我在我的项目中也修改了这个参数,但悲剧的是,显示错位了,图像处理后的数据也存在花点,完全不知道是怎么回事了。改了MPU各种参数,结果要么就是拷贝很慢,要么就是拷贝快了但花屏,请教原子哥和各位高手,到底要怎么设置才能保证SDRAM拷贝速度既快又不出错呢?
        附件是我测试用的正点的程序,直接在正点开发板上即可运行。
        注:在我的实际项目中,修改了分散加载文件,程序上电后从FlexSPI Flash中加载到ITCM中运行,运行变量在DTCM中,SDRAM主要用来做LCD显存,以及需要处理的图片数据。不知是否这样导致SDRAM速度快了然后出错?

实验19 eLCDIF(RGB屏)实验.rar

937.68 KB, 下载次数: 26

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10449
金钱
10449
注册时间
2017-2-18
在线时间
1890 小时
发表于 2019-4-4 18:22:40 | 显示全部楼层
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2019-4-6 23:46:29 | 显示全部楼层
读写都是操作SDRAM,当然慢。。。
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2016-8-11
在线时间
16 小时
 楼主| 发表于 2019-4-7 18:51:01 | 显示全部楼层
正点原子 发表于 2019-4-6 23:46
读写都是操作SDRAM,当然慢。。。

我知道肯定会慢,但不至于慢到这种地步吧,毕竟SDRAM主频也有132M,数据线也是16位,如果连拷贝速度都慢到这种地步,那大容量SDRAM基本没啥用啊,处理器再快也没意义了吧,毕竟我要处理的数据都在SDRAM
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2019-4-8 01:43:30 | 显示全部楼层
ntmusic 发表于 2019-4-7 18:51
我知道肯定会慢,但不至于慢到这种地步吧,毕竟SDRAM主频也有132M,数据线也是16位,如果连拷贝速度都慢 ...

要速度快,最好好使内部SRAM
外置的,最快是SRAM,然后才是SDRAM。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2016-8-11
在线时间
16 小时
 楼主| 发表于 2019-4-8 09:34:34 | 显示全部楼层
正点原子 发表于 2019-4-8 01:43
要速度快,最好好使内部SRAM
外置的,最快是SRAM,然后才是SDRAM。

谢谢原子哥,我想再请教一下为啥我把SDRAM配置为Cacheble后拷贝速度上去了但数据部分出错,比如我要把图片中某一种颜色过滤掉,然后显示在屏幕某一位置,所有数据都定义在SDRAM中,然后MPU配置SDRAM的32M都是有Cache和有缓存的,结果就是显示的处理后的图片存在一些花屏样的线条。如果不定义SDRAM是有Cache和有缓存的就没问题。这种现象到底能不能处理,因为从测试来看大部分数据都是正确的,只是存在小部分线条,如果能解决这个问题,那拷贝速度也是很快的,希望原子哥能指点一二
回复

使用道具 举报

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2019-1-18
在线时间
17 小时
发表于 2019-4-8 17:02:24 | 显示全部楼层
帮顶。。。。同样期待怎么能解决。。
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2019-4-9 01:47:26 | 显示全部楼层
ntmusic 发表于 2019-4-8 09:34
谢谢原子哥,我想再请教一下为啥我把SDRAM配置为Cacheble后拷贝速度上去了但数据部分出错,比如我要把图 ...

这种CACHE的问题,不好找呢,降频试试吧,如果你开启cache的话
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 19:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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