RT1052 sdram的noncache区读取速度异常缓慢的问题

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

RT1052 sdram的noncache区读取速度异常缓慢的问题

1,223 Views
qq240997293
Contributor I

前提描述:

1.定义sdram的0x81800000开始,大小为0x00800000的区域为noncache区,在这个noncache区中,LCD的显存区域也在这个区域,一共定义了5帧数据,每帧800*480*4 byte;

2. 采用野火RT1052的配置,系统的时钟为528000000

qq240997293_0-1652447961906.png

 

SEMC外设的时钟为198000000 

qq240997293_1-1652447972711.png

 

3.MPU的配置如下:

qq240997293_2-1652447999947.png

 

问题描述:

本人采用了几种读写数据方式,测试读写速度。

1.使用memcpy,从noncache区的帧①拷贝到noncache区的帧②,耗时69.6ms;

2.使用memcpy,从cacheable区定义的一帧大小的数组拷贝到noncache区的帧①,耗时16.2ms;

3.使用memcpy,从noncache区的帧①拷贝数据到cacheable区定义的一帧大小的数组中,耗时70.0ms; 4.使用memset,将noncache区的帧①全都写成0x55,耗时5.8ms;

为什么从noncache读取数据会这么耗时呢?

我也尝试过用*(uint32_t *)和两个for循环的方式去拷贝数据,实际使用下来速度比使用memcpy更慢。

32位系统不应该按照32位读写才是最快速度吗?

因为该区域是显存区,不能使用cacheable方式去实现,因为我再测试时,虽然速度整体变快了,但是图像的显示会错乱,存在异常像素的问题。

如果使用DMA进行数据的拷贝,速度依然很慢。

附件是我目前测试sdram读写用的工程。

0 Kudos
Reply
1 Reply

1,190 Views
jingpan
NXP TechSupport
NXP TechSupport

Hi @qq240997293 ,

这里主要是因为AXI总线写SDRAM是有pipeline的,也就是写命令会存到类似buffer的结构中,自动执行。MCU发完写命令就可以执行下一步了。而读命令是没有pipeline的,MCU必须等到命令返回才能执行下一步。更多内容请参考AN12437.

 

Regards,

Jing

0 Kudos
Reply