硬汉嵌入式论坛

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

[FMC] SDRAM读写速度疑问

[复制链接]

34

主题

83

回帖

185

积分

初级会员

积分
185
发表于 2017-1-11 18:29:08 | 显示全部楼层 |阅读模式
CPU使用STM32F7主频216M,SDRAM数据总线16位,利用FMC驱动16位SDRAM时钟108M,定义了一个大数组重复读写数据,每读或写成功一次后IO反转,利用逻辑分析仪测试的IO反转速度,目前测试结果:


UINT8 pbuf[len];  //定义8位数组
写速度:20MB/S
读速度:7MB/S


UINT16 pbuf[len];  //定义16位数组
写速度:38MB/S
读速度:11MB/S

UINT32 pbuf[len];//定义32位数组

写速度:75MB/S
读速度:22MB/S


UINT64 pbuf[len];//定义64位数组

写速度:120MB/S
读速度:45MB/S


8位模式比16位模式读写速度相对慢一些能理解,因为毕竟是16位总线,不过为什么32位和64位模式时,读写速度基本上都是比16位翻倍了,按理说16位模式已经是最大速度了?是不是因为SDRAM的突发模式造成的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2017-1-11 18:48:20 | 显示全部楼层
如果你是16位SDRAM的话,而且你是用的for循环测试的,这个for循环极其影响性能,你将U16测试展开就能看到速度提升了。
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2017-1-11 18:51:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:如果你是16位SDRAM的话,而且你是用的for循环测试的,这个for循环极其影响性能,你将U16测试展开就能看到速度提升了。 (2017-01-11 18:48) 
嗯,有道理,相当于写一次就执行一个for循环!谢谢你,我在测试一次看看结果
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2017-1-11 19:54:57 | 显示全部楼层

回 eric2013 的帖子

eric2013:如果你是16位SDRAM的话,而且你是用的for循环测试的,这个for循环极其影响性能,你将U16测试展开就能看到速度提升了。 (2017-01-11 18:48) 
又从新测试了写速度,这次是展开的方式,结果:

16位数组写:51.6MB/S
32位数组写:102.8MB/S
64位数组写:183MB/S

8MB的SDRAM,定义8M的数组,重复写8次8M数据,每写一次IO输出反转,最后进行数据比较结束.
回复

使用道具 举报

34

主题

83

回帖

185

积分

初级会员

积分
185
 楼主| 发表于 2017-1-11 19:59:31 | 显示全部楼层

回 eric2013 的帖子

eric2013:如果你是16位SDRAM的话,而且你是用的for循环测试的,这个for循环极其影响性能,你将U16测试展开就能看到速度提升了。 (2017-01-11 18:48) 
int main()
{
  System_ClkConfig(12,216);
  SysTick_Init(216);
  LED_Init();
  SDRAM_Init();
  mem_init();
  GPIOD ->ODR &=~(1<<7);

  
  p=pp =mem.get(&mem_sdram,8388608);
  if(p==null)
  {
    GPIOD ->ODR |=1<<7;
    while(1);
  }
  
  for(n=0;n<8;n++)
  {
    p=pp;
    for(i=0;i<1048576;) //64位模式,写1048576次,32位模式,写1048576*2次,16位模式写1048576*4次,每循环一次执行512次写操作.
    {
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
      *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++; *p++ =i++;
    }
   
    if(GPIOD ->IDR &(1<<7))GPIOD ->ODR &=~(1<<7);
    else                   GPIOD ->ODR |=1<<7;
  }
  
  p=pp;
  GPIOD ->ODR &=~(1<<7);
  for(i=0;i<1048576;i++) //64位模式数据比较,错误则LED亮
  {
    if(p !=i)
    {
      GPIOD ->ODR |=1<<7; //LED ON
      while(1);
    }
  }
  while(1)
  {
  }
}
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2022-8-16 20:36:59 | 显示全部楼层
mark一下  之后我试一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 03:06 , Processed in 0.194969 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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