你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F439外扩SDRAM

[复制链接]
11qiaoqi 提问时间:2015-3-23 16:07 /
最近做一个项目,采用STM32F439外扩SDRAM做内存,现在发现外扩SDRAM可以运行,但是程序运行速率比较慢,实测了下大概有40多MHZ执行速率,求大虾帮忙分析是怎么回事?外扩是否能够达到90MHZ吗?
附SDRAM配置:
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
#if defined (DATA_IN_ExtSDRAM)
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
  register uint32_t index;

  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface
      clock */
  RCC->AHB1ENR |= 0x000000F8;
  
  /* Connect PDx pins to FMC Alternate function */
  GPIOD->AFR[0]  = 0x000000CC;
  GPIOD->AFR[1]  = 0xCC000CCC;
  /* Configure PDx pins in Alternate function mode */  
  GPIOD->MODER   = 0xA02A000A;
  /* Configure PDx pins speed to 50 MHz */  
  GPIOD->OSPEEDR = 0xA02A000A;
  /* Configure PDx pins Output type to push-pull */  
  GPIOD->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PDx pins */
  GPIOD->PUPDR   = 0x00000000;

  /* Connect PEx pins to FMC Alternate function */
  GPIOE->AFR[0]  = 0xC00000CC;
  GPIOE->AFR[1]  = 0xCCCCCCCC;
  /* Configure PEx pins in Alternate function mode */
  GPIOE->MODER   = 0xAAAA800A;
  /* Configure PEx pins speed to 50 MHz */
  GPIOE->OSPEEDR = 0xAAAA800A;
  /* Configure PEx pins Output type to push-pull */  
  GPIOE->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PEx pins */
  GPIOE->PUPDR   = 0x00000000;

  /* Connect PFx pins to FMC Alternate function */
  GPIOF->AFR[0]  = 0xCCCCCCCC;
  GPIOF->AFR[1]  = 0xCCCCCCCC;
  /* Configure PFx pins in Alternate function mode */   
  GPIOF->MODER   = 0xAA800AAA;
  /* Configure PFx pins speed to 50 MHz */
  GPIOF->OSPEEDR = 0xAA800AAA;
  /* Configure PFx pins Output type to push-pull */  
  GPIOF->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PFx pins */
  GPIOF->PUPDR   = 0x00000000;

  /* Connect PGx pins to FMC Alternate function */
  GPIOG->AFR[0]  = 0xCCCCCCCC;
  GPIOG->AFR[1]  = 0xCCCCCCCC;
  /* Configure PGx pins in Alternate function mode */
  GPIOG->MODER   = 0xAAAAAAAA;
  /* Configure PGx pins speed to 50 MHz */
  GPIOG->OSPEEDR = 0xAAAAAAAA;
  /* Configure PGx pins Output type to push-pull */  
  GPIOG->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PGx pins */
  GPIOG->PUPDR   = 0x00000000;
  
  /* Connect PHx pins to FMC Alternate function */
  GPIOH->AFR[0]  = 0x00C0CC00;
  GPIOH->AFR[1]  = 0x00000000;
  /* Configure PHx pins in Alternate function mode */
  GPIOH->MODER   = 0x000008A0;
  /* Configure PHx pins speed to 50 MHz */
  GPIOH->OSPEEDR = 0x000008A0;
  /* Configure PHx pins Output type to push-pull */  
  GPIOH->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PHx pins */
  GPIOH->PUPDR   = 0x00000000;
  
//  /* Connect PIx pins to FMC Alternate function */
//  GPIOI->AFR[0]  = 0xCCCCCCCC;
//  GPIOI->AFR[1]  = 0x00000CC0;
//  /* Configure PIx pins in Alternate function mode */
//  GPIOI->MODER   = 0x0028AAAA;
//  /* Configure PIx pins speed to 50 MHz */
//  GPIOI->OSPEEDR = 0x0028AAAA;
//  /* Configure PIx pins Output type to push-pull */  
//  GPIOI->OTYPER  = 0x00000000;
//  /* No pull-up, pull-down for PIx pins */
//  GPIOI->PUPDR   = 0x00000000;
  
/*-- FMC Configuration ------------------------------------------------------*/
  /* Enable the FMC interface clock */
  RCC->AHB3ENR |= 0x00000001;
  
  /* Configure and enable SDRAM bank1 */
  FMC_Bank5_6->SDCR[0] = 0x000019D4;
  FMC_Bank5_6->SDTR[0] = 0x01113121;      
  
  /* SDRAM initialization sequence */
  /* Clock enable command */
  FMC_Bank5_6->SDCMR = 0x00000011;
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  while((tmpreg != 0) && (timeout-- > 0))
  {
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }

  /* Delay */
  for (index = 0; index<1000; index++);
  
  /* PALL command */
  FMC_Bank5_6->SDCMR = 0x00000012;           
  timeout = 0xFFFF;
  while((tmpreg != 0) && (timeout-- > 0))
  {
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }
  
  /* Auto refresh command */
  FMC_Bank5_6->SDCMR = 0x00000073;
  timeout = 0xFFFF;
  while((tmpreg != 0) && (timeout-- > 0))
  {
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }

  /* MRD register program */
  FMC_Bank5_6->SDCMR = 0x00046014;
  timeout = 0xFFFF;
  while((tmpreg != 0) && (timeout-- > 0))
  {
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }
  
  /* Set refresh count */
  tmpreg = FMC_Bank5_6->SDRTR;
  FMC_Bank5_6->SDRTR = (tmpreg | (0x00000569<<1));
  
  /* Disable write protection */
  tmpreg = FMC_Bank5_6->SDCR[0];
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);

收藏 1 评论12 发布时间:2015-3-23 16:07

举报

12个回答
拼命三郎 回答时间:2015-3-23 19:22:21
顶顶顶顶顶顶顶顶顶大大大.jpg
11qiaoqi 回答时间:2015-3-23 19:34:37
自己顶下
kqh1120 回答时间:2015-3-23 19:39:31
学习了 14.gif
小蚂蚁快溜跑 回答时间:2015-3-23 20:34:37
学习。。
wu1169668869 回答时间:2015-3-24 00:25:36
没试过这么高端的东西
木木鱼 回答时间:2015-3-24 08:39:26
不懂帮顶!
stary666 回答时间:2015-3-24 09:50:49
顶一下。。。。。。。。。。
11qiaoqi 回答时间:2015-3-25 13:59:57
经过几天的测试,现总结下测试情况,STM32F439外扩SDRAM(16bit)运行效率等同于在45MHZ效率,即使外扩SDRAM(32BIT)运行效率也达不到90MHZ,所谓180MHZ主频,在外扩方面根本就没法发挥芯片的性能。
上述测试,无论外扩内存或者是用内部内存,只要使用的变量定义在外扩SDRAM内,运行的结果都是一样的。看来FMC功能真的没法发挥想象的中的效率。
nocoyou 回答时间:2015-3-28 19:30:04
帮忙顶一下
GHOST-JP 回答时间:2016-10-1 02:47:00
11qiaoqi 发表于 2015-3-25 13:59
经过几天的测试,现总结下测试情况,STM32F439外扩SDRAM(16bit)运行效率等同于在45MHZ效率,即使外扩SDRA ...

大哥,你GPIO设置的速度都才50M的嘛。。。。
zbber 回答时间:2016-10-1 09:31:54
经过几天的测试,现总结下测试情况,STM32F439外扩SDRAM
ynwscfsfi 回答时间:2016-10-1 13:18:10
093005q7ij347qmdqxln3x.jpg
sdfhreeq.png
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版