硬汉嵌入式论坛

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

STM32F429 使用128Mbit SDRAM 問題

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2020-11-30 12:05:05 | 显示全部楼层 |阅读模式
依據標準設定與硬體定義完成,當僅是使用64Mbit時都為正常,但所容量超過64MBit則發生了SDRAM資料大亂而產生硬體故障的告警,想問是可能哪邊有問題呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-11-30 13:03:27 | 显示全部楼层
方便的话,帖子下原理图和配置,以及你使用的SDRAM型号。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2020-11-30 15:13:44 | 显示全部楼层
以下是設置SDRAM,F429 system CLK=168MHz

void SystemInit_ExtMemCtl(void)
{
        register uint32_t tmpreg = 0, timeout = 0xFFFF;
  register uint32_t index;
        __IO uint32_t tmp = 0x00;

  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface
      clock */
  RCC->AHB1ENR |= 0x000001FC;

        /* Delay after an RCC peripheral clock enabling */
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
       
  GPIOC->AFR[0]  = 0x0000000C;
  GPIOC->AFR[1]  = 0x00000000;
  /* Configure PCx pins in Alternate function mode */  
  GPIOC->MODER   = 0x00000002;
  /* Configure PCx pins speed to 100 MHz */  
  GPIOC->OSPEEDR = 0x00000003;
  /* Configure PCx pins Output type to push-pull */  
  GPIOC->OTYPER  = 0x00000000;
  /* No pull-up, pull-down for PCx pins */
  GPIOC->PUPDR   = 0x00000000;

        /*********************************************************/
       
  /* 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 100 MHz */  
  GPIOD->OSPEEDR = 0xF03F000F;  
  /* 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 100 MHz */
  GPIOE->OSPEEDR = 0xFFFFC00F;
  /* 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]  = 0x00CCCCCC;
  GPIOF->AFR[1]  = 0xCCCCC000;
  /* Configure PFx pins in Alternate function mode */   
  GPIOF->MODER   = 0xAA800AAA;
  /* Configure PFx pins speed to 100 MHz */
  GPIOF->OSPEEDR = 0xFFC00FFF;  
  /* 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]  = 0x00CC00CC;
  GPIOG->AFR[1]  = 0xC000000C;
  /* Configure PGx pins in Alternate function mode */
  GPIOG->MODER   = 0x8002080A;
  /* Configure PGx pins speed to 100 MHz */
  GPIOG->OSPEEDR = 0xC0030F0F;
  /* 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]  = 0xCC000000;
  GPIOH->AFR[1]  = 0xCCCCCCCC;
  /* Configure PHx pins in Alternate function mode */
  GPIOH->MODER   = 0xAAAAA000;
  /* Configure PHx pins speed to 100 MHz */
  GPIOH->OSPEEDR = 0xFFFFF000;
  /* 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 100MHz */
  GPIOI->OSPEEDR = 0x003CFFFF;
  /* 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;

        /* Delay after an RCC peripheral clock enabling */
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
       
  /* Configure and enable SDRAM bank2 */
       
        FMC_Bank5_6->SDCR[0] = 0x00001FE4;
  FMC_Bank5_6->SDTR[0] = 0x01135351;
  FMC_Bank5_6->SDCR[1] = 0x00001DE4;
  FMC_Bank5_6->SDTR[1] = 0x01135351;
       
  /* SDRAM initialization sequence */
  /* Clock enable command */
  FMC_Bank5_6->SDCMR = 0x00000009;
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
        timeout = 0xFFFF;
  while((tmpreg != 0) & (timeout-- > 0))
  {
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }

  /* Delay */
  for (index = 0; index<1000; index++);

  /* PALL command */
  FMC_Bank5_6->SDCMR = 0x0000000A;            
  timeout = 0xFFFF;
  while((tmpreg != 0) & (timeout-- > 0))
  {
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }

  /* Auto refresh command */
  FMC_Bank5_6->SDCMR = 0x0000006B;
  timeout = 0xFFFF;
  while((tmpreg != 0) & (timeout-- > 0))
  {
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
  }

  /* MRD register program */
  FMC_Bank5_6->SDCMR = 0x0004600C;
  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 | (0x000002AC<<1));
  //FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));

  /* Disable write protection */  
  tmpreg = FMC_Bank5_6->SDCR[0];
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFFFF);
        tmpreg = FMC_Bank5_6->SDCR[1];
  FMC_Bank5_6->SDCR[1] = (tmpreg & 0xFFFFFDFF);
          
}

SCT 設定

SCT 設定

SDRAM

SDRAM
回复

使用道具 举报

3

主题

1233

回帖

1242

积分

至尊会员

积分
1242
发表于 2020-11-30 15:53:04 | 显示全部楼层
你这纯寄存器的操作,除非有使用相同参数的网友,否则怎么核实啊哥们
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2020-12-1 10:59:01 | 显示全部楼层
感謝,我找到問題在哪了。問題出於  GPIOG->MODER   = 0x8002080A;--修改--> GPIOG->MODER   = 0x80020A0A; 即可 ,提供參考
回复

使用道具 举报

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2020-12-1 14:29:41 | 显示全部楼层
Jing_Su 发表于 2020-11-30 15:13
以下是設置SDRAM,F429 system CLK=168MHz

void SystemInit_ExtMemCtl(void)

hoho,您这代码的风格,真是厉害啊~~~
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-12-1 16:28:19 | 显示全部楼层
morning_enr6U 发表于 2020-11-30 15:53
你这纯寄存器的操作,除非有使用相同参数的网友,否则怎么核实啊哥们

他这个是启动代码里面的修改方式。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-12-1 16:28:36 | 显示全部楼层
Jing_Su 发表于 2020-12-1 10:59
感謝,我找到問題在哪了。問題出於  GPIOG->MODER   = 0x8002080A;--修改--> GPIOG->MODER   = 0x80020A0A; ...

谢谢告知最终原因。
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

积分
25
发表于 2020-12-2 08:54:47 | 显示全部楼层
Jing_Su 发表于 2020-12-1 10:59
感謝,我找到問題在哪了。問題出於  GPIOG->MODER   = 0x8002080A;--修改--> GPIOG->MODER   = 0x80020A0A; ...

太棒了。有效。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 18:37 , Processed in 0.237510 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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