OpenEdv-开源电子网

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

stm32f429主频大于160MHz时,sdram数据不稳定

[复制链接]

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
发表于 2014-11-28 10:50:57 | 显示全部楼层 |阅读模式
5金钱
stm32f429主频为180MHz, sdramz做lcd缓存时,刷完一帧图片,部分像素点颜色发送了变化,如下图。但将主频设置为160MHz时图片显示又很稳定,后来测试了一下sdram,发现主频大于160M,并且随着主频的增大,sdram的数据越不稳定。而160M时数据又很稳定,有没有人遇到这样的问题呢?会不会是sdram的布线不好引起的?
sdram配置如下:
[mw_shl_code=c,true]/* FMC SDRAM Bank configuration */ /* Timing configuration for 90 Mhz of SD clock frequency (180Mhz/2) */ /* TMRD: 2 Clock cycles */ FMC_SDRAMTimingInitStructure.FMC_LoadToActiveDelay = 2; /* TXSR: min=70ns (7x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_ExitSelfRefreshDelay = 7; /* TRAS: min=42ns (4x11.11ns) max=120k (ns) */ FMC_SDRAMTimingInitStructure.FMC_SelfRefreshTime = 4; /* TRC: min=70 (7x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_RowCycleDelay = 7; /* TWR: min=1+ 7ns (1+1x11.11ns) */ FMC_SDRAMTimingInitStructure.FMC_WriteRecoveryTime = 2; /* TRP: 20ns => 2x11.11ns */ FMC_SDRAMTimingInitStructure.FMC_RPDelay = 2; /* TRCD: 20ns => 2x11.11ns */ FMC_SDRAMTimingInitStructure.FMC_RCDDelay = 2; /* FMC SDRAM control configuration */ FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM; /* Row addressing: [7:0] */ FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_8b; /* Column addressing: [11:0] */ FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_12b; FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = SDRAM_MEMORY_WIDTH; FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4; FMC_SDRAMInitStructure.FMC_CASLatency = SDRAM_CAS_LATENCY; FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable; FMC_SDRAMInitStructure.FMC_SDClockPeriod = SDCLOCK_PERIOD; FMC_SDRAMInitStructure.FMC_ReadBurst = SDRAM_READBURST; FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_1; FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAMTimingInitStructure;[/mw_shl_code]






最佳答案

查看完整内容[请看2#楼]

/*  ******************************************************************************  *函数:void SDRAM_Init(void)  *输入:none  *输出:none  *描述:SDRAM 初始化。  ******************************************************************************  */ void SDRAM_Init(void) {   FMC_SDRAMInitTypeDef  FMC_SDRAMInitStructure;    ...
专注一件事情并做到极致>>> https://shop275468129.taobao.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-11-28 10:50:58 | 显示全部楼层
/*
 ******************************************************************************
 *函数:void SDRAM_Init(void)
 *输入:none
 *输出:none
 *描述:SDRAM 初始化。
 ******************************************************************************
 */
void SDRAM_Init(void)
{
  FMC_SDRAMInitTypeDef  FMC_SDRAMInitStructure;
  FMC_SDRAMTimingInitTypeDef  FMC_SDRAMTimingInitStructure; 

  SDRAM_GPIOInit();
   
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FMC, ENABLE);

  FMC_SDRAMTimingInitStructure.FMC_LoadToActiveDelay = 3;      
  FMC_SDRAMTimingInitStructure.FMC_ExitSelfRefreshDelay = 8;  
  FMC_SDRAMTimingInitStructure.FMC_SelfRefreshTime = 4; 
  FMC_SDRAMTimingInitStructure.FMC_RowCycleDelay = 7; 
  FMC_SDRAMTimingInitStructure.FMC_WriteRecoveryTime = 4;
  FMC_SDRAMTimingInitStructure.FMC_RPDelay = 3; 
  FMC_SDRAMTimingInitStructure.FMC_RCDDelay = 3; 


  FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM;
  FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_9b;
  FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_13b;
  FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = FMC_SDMemory_Width_16b;
  FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4;
  
  FMC_SDRAMInitStructure.FMC_CASLatency = FMC_CAS_Latency_3; 
FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable;
  FMC_SDRAMInitStructure.FMC_SDClockPeriod = FMC_SDClock_Period_2;  
  FMC_SDRAMInitStructure.FMC_ReadBurst = FMC_Read_Burst_Enable;
  FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_0;
  FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAMTimingInitStructure;
  FMC_SDRAMInit(&FMC_SDRAMInitStructure);

  SDRAM_Initsquence();

}
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-11-28 11:56:36 | 显示全部楼层
SDRAM走等长线了么?
开往春天的手扶拖拉机
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2014-11-28 12:06:13 | 显示全部楼层
我也是这样,不过我的是在0xd0000000-0xD0070000处很正常,超过就和你一样了,我的数据线基本等长,差距不超过20mil,但地址线之间未等长,大概差了150mil
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-11-28 13:58:50 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
 板子是淘宝上买的,线路不好看,不知道等不等长,过几天有空再自己画个板试试
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-11-28 14:42:17 | 显示全部楼层
回复【3楼】wangxipeng:
---------------------------------
你的降低主频就正常吗?
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2014-11-28 14:46:25 | 显示全部楼层
回复【5楼】麦田稻草:
---------------------------------
这个没测试过,不过我是自己做的板子,sdram也不一样,所以我一直以为是没初始化好。
回复

使用道具 举报

44

主题

186

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1260
金钱
1260
注册时间
2012-9-1
在线时间
67 小时
发表于 2014-11-29 17:46:13 | 显示全部楼层
官方版子stm32f429 discovery也会出现这个问题,官方驱动,我测试过,是写入错误,
只要每个数据连续写2或3次在读就不会出错,只写一次(>160mhz)必出错,不知道是什么原因
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-11-30 03:11:26 | 显示全部楼层
回复【7楼】ye781205:
---------------------------------
我测试过写入然后马上读出来没问题,过一段时间读出来部分数据就变了,现在只能降低sdram的时钟,主频180M,sdram时钟设置为主频的3分频(官方例程为2分频),这样sdram数据就没有出错了,如果要用lcd控制器,还要将sdram的TRP(预充电有效周期)改小点,还有lcd的时钟也改小点,不然屏幕会抖动,至于为什么sdram时钟大于80M数据就不稳定,暂时还没有找到原因
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

40

主题

177

帖子

0

精华

高级会员

Rank: 4

积分
921
金钱
921
注册时间
2013-10-23
在线时间
94 小时
发表于 2014-11-30 13:16:31 | 显示全部楼层
调增SDRAM的时钟相位试试
http://xiaomeige.taobao.com。做最用心的FPGA学习板和教程资料
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-11-30 15:03:16 | 显示全部楼层
回复【9楼】小梅哥:
---------------------------------
在哪里设置的呢,不是很明白
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-2 11:25:12 | 显示全部楼层
降低了sdram的时钟,高速缓存数据时整个屏幕都在抖动,这个用得也太郁闷了
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-12-2 13:01:19 | 显示全部楼层
回复【11楼】麦田稻草:
---------------------------------
F429这么不给力?
之前ST宣讲会看别人的驱动,还挺好啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2014-12-2 16:43:45 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
回复【11楼】麦田稻草:
---------------------------------
我怀疑还是初始化的时序没弄好,我现在只能用前8M,剩下的用也会出现屏幕出现错位和乱跳,我是运行在90M上,降频也是这样,但我的sdram的datasheet在时序上讲的很简略,我也不知道该怎么弄,可惜了32M的sdram了
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-12-4 17:27:56 | 显示全部楼层
1.调整sdram配置参数  2 把sdram 换成-6的
回复

使用道具 举报

6

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-8-12
在线时间
32 小时
发表于 2014-12-5 10:15:42 | 显示全部楼层
我的429不挂SDRAM,系统时钟开到180M,就死掉,降到168M就很好
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 15:33:54 | 显示全部楼层
回复【14楼】simms01:
---------------------------------
sdram配置参数调过了,也不行,第二句话是什么意思呢,-6tli?
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 15:34:48 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
可能是我的板子问题吧
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 15:36:25 | 显示全部楼层
回复【13楼】wangxipeng:
---------------------------------
准备自己画一块板再测试了
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 15:37:24 | 显示全部楼层
回复【15楼】heitu103:
---------------------------------
不会吧,我的超频到240M都没问题呀
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-12-5 16:15:43 | 显示全部楼层
我也是 用-6的sdram 超频到了240M  完全正常 呵 

我外界晶体是24M
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 17:17:23 | 显示全部楼层
回复【13楼】wangxipeng:
---------------------------------
你的sdram是HY57V561620FTP-H?
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2014-12-5 17:22:52 | 显示全部楼层
回复【20楼】simms01:
---------------------------------
是IS42S16400J-6tli?用自己的板子吗?可不可以分享一下你的sdram配置?
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

10

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2014-3-8
在线时间
11 小时
发表于 2014-12-5 22:12:47 | 显示全部楼层
回复【21楼】麦田稻草:
---------------------------------
K4S561632,三星的片子
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-12-6 13:49:46 | 显示全部楼层
华邦 W9825G6JH-6 拆机片  1.6元/片 呵  参数设置偏保守 见下楼
回复

使用道具 举报

8

主题

102

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1004
金钱
1004
注册时间
2014-11-19
在线时间
360 小时
 楼主| 发表于 2015-1-17 15:41:54 | 显示全部楼层
刚打样了stm32f429iit6的板子,回来后测试SDRAM的频率也只能上到85M,新帖在这里:
http://www.openedv.com/posts/list/45430.htm
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复

使用道具 举报

6

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-8-12
在线时间
32 小时
发表于 2016-1-29 17:28:03 | 显示全部楼层
麦田稻草 发表于 2014-12-5 15:37
回复【15楼】heitu103:
---------------------------------
不会吧,我的超频到240M都没问题呀

后来找到问题了 100309o1yi6me2az6ad7m0.png.thumb.jpg
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-1-30 10:32:29 | 显示全部楼层

小白求问,这是什么问题啊?
回复

使用道具 举报

6

主题

73

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-8-12
在线时间
32 小时
发表于 2016-1-30 15:39:42 | 显示全部楼层
yyx112358 发表于 2016-1-30 10:32
小白求问,这是什么问题啊?

我的429不挂SDRAM,系统时钟开到180M,就死掉,降到168M就很好,至于为什么把22pf换成2.2uf就可以跑到180M,就等高手解答了。
回复

使用道具 举报

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2011-8-18
在线时间
5 小时
发表于 2016-11-28 15:30:26 | 显示全部楼层
simms01 发表于 2014-11-28 10:50
/*
 ******************************************************************************
 *函数 ...

我现在在调429配W9825G6EH-6.试了一下你的配置也不行,我想看看你的squence()函数内容,我在调试中发现FMC_SDRAM_CMD_PALL一配置我的系统会出现异常.
static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command)
{
  __IO uint32_t tmpmrd =0;
  /* Step 3:  Configure a clock configuration enable command */
  Command->CommandMode                          = FMC_SDRAM_CMD_CLK_ENABLE;
  Command->CommandTarget                  = FMC_SDRAM_CMD_TARGET_BANK2;
  Command->AutoRefreshNumber          = 1;
  Command->ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);


  /* Step 4: Insert 100 ms delay */
  HAL_Delay(500);
   
  /* Step 5: Configure a PALL (precharge all) command */
  Command->CommandMode                          = FMC_SDRAM_CMD_PALL;
  Command->CommandTarget              = FMC_SDRAM_CMD_TARGET_BANK2;
  Command->AutoRefreshNumber          = 1;
  Command->ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);  

  /* Step 6 : Configure a Auto-Refresh command */
  Command->CommandMode                          = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
  Command->CommandTarget                  = FMC_SDRAM_CMD_TARGET_BANK2;
  Command->AutoRefreshNumber          = 4;
  Command->ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
  
  /* Step 7: Program the external memory mode register */
  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_2          |
                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |
                     SDRAM_MODEREG_CAS_LATENCY_3           |
                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |
                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
  
  Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
  Command->CommandTarget                  = FMC_SDRAM_CMD_TARGET_BANK2;
  Command->AutoRefreshNumber          = 1;
  Command->ModeRegisterDefinition = tmpmrd;

  /* Send the command */
  HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
  
  /* Step 8: Set the refresh rate counter */
  /* (15.62 us x Freq) - 20 */
  /* Set the device refresh counter */
  HAL_SDRAM_ProgramRefreshRate(hsdram, REFRESH_COUNT);
}
是从样列中截的.
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-11-28
在线时间
3 小时
发表于 2016-11-30 23:12:41 来自手机 | 显示全部楼层
可能是电容小啦,过滤高频吧
回复

使用道具 举报

8

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2016-10-1
在线时间
117 小时
发表于 2022-3-18 17:33:30 | 显示全部楼层
heitu103 发表于 2016-1-30 15:39
我的429不挂SDRAM,系统时钟开到180M,就死掉,降到168M就很好,至于为什么把22pf换成2.2uf就可以跑到180 ...

这个电容是稳定电压的,22pf太小了,稳不住电压,换成2.2uf,电容容量大了,电源稳住了,主频就可以跑高了。主频高消耗的电流也大,需要电源电压稳定。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-6 14:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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