硬汉嵌入式论坛

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

【STM32F429-DISCOVERY学习笔记】STM32F429驱动SDRAM(IS42S16400J)详解

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
发表于 2013-10-23 20:31:41 | 显示全部楼层 |阅读模式
       驱动SDRAM的时序比较的麻烦一些,不像驱动SRAM,非常简单,网上搜索一下,估计有非常多的FPGA驱
动SDRAM的资料,而且是各种的给你讲时序问题,现在F429/439集成了控制器以后就方便很多了,用户只需配
相应的寄存器即可,这里向大家推荐一篇文章,强烈的推荐,不懂SDRAM为何物的,一定要看看。
《高手进阶,终极内存技术指南——完整/进阶版》 http://www.armbbs.cn/forum.php?mod=viewthread&tid=1930
1.  学习SDRAM驱动前的准备工作
    学习SDRAM前搞清楚两个问题,一个是SDRAM的基本原理,还有一个就是那几个关键的参数,参数是F429
配置SDRAM的关键,这几个参数大概知道是什么意思就行了,配置的时候,根据SDRAM的手册配置一下就OK
了。在STM32F429/439的数据手册里关键参数说明,F429/439是把这几个关键的参数做到了一个存器里面
了,这些参数,手册上面有一些英文说明,但比较的笼统。
5.png
我推荐的那篇文章,建议大家一定要看,别的可以不看,这个必须得看,讲的实在太好了,我这里把一些关键的
参数摘录出来:
tRCD:
       在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS
Delay(RAS至CAS延迟),大家也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响
应时间(从一种状态到另一种状态变化的过程)所制定的延迟。tRCDSDRAM的一个重要时序参数
,可以通过主板BIOS经过北桥芯片进行调整,但不能超过厂商的预定范围。广义的tRCD以时钟周期
tCKClock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期,具体到确切的时
,则要根据时钟频率而定,对于PC100SDRAMtRCD=2,代表20ns的延迟,对于PC133则为15ns
CL(CAS Latency):
        在选定列地址后,就已经确定了具体的存储单元,剩下的事情就是数据通过数据I/O通道(DQ)输
出到内存总线上了。但是在CAS发出之后,仍要经过一定的时间才能有数据输出,从CAS与读取命令发
出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS潜伏期)。由于CL只在读取时出现,
以CL又被称为读取潜伏期(RL,Read Latency)。CL的单位与tRCD一样,为时钟周期数,具体耗时
时钟频率决定。
       数据写入的操作也是在tRCD之后进行,但此时没有了CL(记住,CL只出现在读取操作中)。
tWR:
        数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须要有一段
时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间
tWRWriteRecovery Time),这个操作也被称作写回(Write Back)。
tRP:
        在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被
称为tRP(Precharge command Period,预充电有效周期)。和tRCDCL一样,tRP的单位也是时钟周
期数,具体值视时钟频率而定。
我这里就先贴上这几个参数,其它的参数,大家可以查阅相关的资料。
2.  F429/439手册中对SDRAM的介绍
       如果你看了我在前面推荐的那个文章,现在看这个手册还是比较容易的。我这里就象征性的贴一下F429
439自带SDRAM控制器的特性和引脚,其它的大家自己看手册就行。
7.png

8.png
3.  F429/439驱动SDRAM详细过程
说明:以官方的Demonstration做例子
9.png

第一步:F429的时钟配置
        F429/439支持最高主频180Mhz,相比于407只提高了12M, 感觉劲还是不足,传说STM32F5系列将
做到250MHz,就相当的给力了。
F429配置过程和以前芯片的配置过程是一样的,我这里主要是想通过这个配置得到SDRAM的时钟频率, 先
说明一下这个开发板外接的是8MHz的晶振,通过锁相环得到180的主频。

#define PLL_SOURCE_HSE    // HSE (8MHz) used to clock the PLL, and the PLL is used as system clock source
/*  PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N  */
#if defined  (PLL_SOURCE_HSI)
#define PLL_M      16
#else
#define PLL_M      8
#endif
#define PLL_N      360
/* SYSCLK = PLL_VCO / PLL_P */  
#define PLL_P      2
/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7
由上面的公式得到 :SYSCLK = PLL_VCO / PLL_P =( (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N)/PLL_P  = 180
/* HCLK = SYSCLK / 1 = 180 */RCC->CFGR |= RCC_CFGR_HPRE_DIV1;   
/* PCLK2 = HCLK / 2 = 90 */RCC->CFGR |= RCC_CFGR_PPRE2_DIV2;  
/* PCLK1 = HCLK / 4 = 45 */RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
第二步:引脚配置
        驱动前要先搞清楚一个问题,驱动SDRAM的行选和列选的地址线是分时复用的,和SRAM不同
需要完整的地址线才可以访问各个地址空间,官方提供的原理图
10.png

关于这个芯片的特点:
13.png

标准的SDRAM一般都是4个BANK,这个芯片也不例外,芯片的总容量
1Mbitx 16-bit x 4-bank = 67,108,864 bits = 64-Mbit ,每个BANK的组成
4096rows x 256 columns x 16 bits, 这个比较重要,配置的时候要用到,也就是
12行8列。
第三步:FMC配置
这里FMC驱动SDRAM只支持两种频率,分别是
SDCLK period = 2 x HCLK periods
SDCLK period = 3 x HCLK periods
根据我们上面的配置,HCLK是180MHz,这里SDCLK就是2分频或者3分频,官方提供的
这个例子,在注释上面有误,他们是按照主频168MHz,2分频是SDCLK = 84MHz注释的,
不过不影响使用,只是注释上面是这样的。按照90MHz的话,每个时钟周期就是11.1ns
7个SDRAM关键参数的配置,下面一个一个的说。
1.  TMRD
/* TMRD: 2 Clock cycles */
FMC_SDRAMTimingInitStructure.FMC_LoadToActiveDelay = 2;
这里为什么成2,查手册, 手册上提供的是三种速度等级时提供的参数,我们这里是用
的90MHz,也取2个肯定是没问题的。
14.png

2. TXSR
/* TXSR: min=70ns (6x11.10ns) */
FMC_SDRAMTimingInitStructure.FMC_ExitSelfRefreshDelay = 7;
开发板上面用的SDRAM速度等级的7,最高工作频率时143MHz
15.png

3. TRAS
/* TRAS: min=42ns (4x11.10ns) max=120k (ns) */
FMC_SDRAMTimingInitStructure.FMC_SelfRefreshTime = 4;
16.png

4. TRC
/* TRC:  min=63 (6x11.10ns) */        
FMC_SDRAMTimingInitStructure.FMC_RowCycleDelay = 7;   
17.png

5. TWR
/* TWR:  2 Clock cycles */
FMC_SDRAMTimingInitStructure.FMC_WriteRecoveryTime = 2;  
18.png
6. TRP
/* TRP:  15ns => 2x11.10ns */
FMC_SDRAMTimingInitStructure.FMC_RPDelay = 2;
19.png

7. TRCD               
/* TRCD: 15ns => 2x11.10ns */
FMC_SDRAMTimingInitStructure.FMC_RCDDelay = 2;
20.png

时序设置好以后就是SDRAM控制器的配置。

/* 支持两个SDRAM的BANK,这里使用的是bank2  */
  FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM;
  /* 根据这个SDRAM的特性是12行,8列,在这里配置一下 */
  FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_8b;
  FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_12b;
  /* 数据位宽是16 */
  FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = SDRAM_MEMORY_WIDTH;
  /* 此芯片支持4个bank */
  FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4;
  /* 设置CAS的延迟是3 */
  FMC_SDRAMInitStructure.FMC_CASLatency = SDRAM_CAS_LATENCY;
  FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable;
  /* 配置SDCLK的时钟频率 */
  FMC_SDRAMInitStructure.FMC_SDClockPeriod = SDCLOCK_PERIOD;  
  /* 禁止读取时的突发模式 */
  FMC_SDRAMInitStructure.FMC_ReadBurst = SDRAM_READBURST;
  /* 设置ReadPipe时的延迟  */
  FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_1;
  FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAMTimingInitStructure;
第四步:SDRAM初始化

1.  使能时钟
  FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_CLK_Enabled;  
  FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank2;
  FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1;  FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0;
  /* Wait until the SDRAM controller is ready */   

  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)
  {  }
  /* Send the command */  

  FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure);
2.  插入100ms的延迟

  __Delay(10);
3.  预充电配置  
  /* Configure a PALL (precharge all) command */   
  FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_PALL;
  FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank2;  
  FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1;
  FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0;  
  /* Wait until the SDRAM controller is ready */
  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)  
  {
  }  
  /* Send the command */
  FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure);
4. 自动刷新配置
  /* Configure a Auto-Refresh command */   
  FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_AutoRefresh;
  FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank2;  
  FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 4;
  FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = 0;  
  /* Wait until the SDRAM controller is ready */
  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)  
  {
  }  
  /* Send the  first command */
  FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure);  
  /* Wait until the SDRAM controller is ready */   
  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)
  {  }
  /* Send the second command */  
  FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure);
5. 配置外部模式寄存器  
  /* Program the external memory mode register */
  tmpr = (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;  
  /* Configure a load Mode register command*/   
  FMC_SDRAMCommandStructure.FMC_CommandMode = FMC_Command_Mode_LoadMode;
  FMC_SDRAMCommandStructure.FMC_CommandTarget = FMC_Command_Target_bank2;  
  FMC_SDRAMCommandStructure.FMC_AutoRefreshNumber = 1;
  FMC_SDRAMCommandStructure.FMC_ModeRegisterDefinition = tmpr;  
  /* Wait until the SDRAM controller is ready */
  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)  
  {
  }  
  /* Send the command */
  FMC_SDRAMCmdConfig(&FMC_SDRAMCommandStructure);
6. 刷新频率设置
  /* Set the refresh rate counter */  
  /* (7.81 us x Freq) - 20 */
  /* Set the device refresh counter */  
  FMC_SetRefreshCount(683);
  /* Wait until the SDRAM controller is ready */   
  while(FMC_GetFlagStatus(FMC_Bank2_SDRAM, FMC_FLAG_Busy) != RESET)
  {  }
关于刷新频率的的数值是这么得到的,这里得详细的说一下,目前公认的标准是,存储体中电容的数据有效保存期上限是
64ms(毫秒,1/1000秒),也就是说每一行刷新的循环周期是64ms。这样刷新速度就是:行数量/64ms。我们在看内
存规格时,经常会看到4096 Refresh Cycles/64ms或8192 RefreshCycles/64ms的标识,这里的4096与8192就代表这
个芯片中每个L-Bank的行数。刷新命令一次对一行有效,发送间隔也是随总行数而变化,4096行时为15.625μs(微秒,
1/1000毫秒),8192行时就为7.8125μs。        
       SDRAM的手册上说是4096 refresh cycles every 64 ms,这里就应该是15.525us,而注释上面是按8192行计算
,郁闷,有时间得研究研究。
21.png

到这里基本就设置完了,剩下就可以像使用SRAM一样,使用SDRAM了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2013-10-23 20:50:08 | 显示全部楼层
开发板上面用的SDRAM数据手册
42-45S16400J.pdf (1.11 MB, 下载次数: 2513)
回复

使用道具 举报

5

主题

34

回帖

5

积分

新手上路

积分
5
发表于 2013-10-23 20:59:06 | 显示全部楼层
真是与时俱进····· [s:149]  这个动作太猥琐了····献给你···
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2013-10-23 21:08:29 | 显示全部楼层

回 大爹路西法 的帖子

大爹路西法:真是与时俱进····· [s:149]  这个动作太猥琐了····献给你··· (2013-10-23 20:59) 
O(∩_∩)O~
回复

使用道具 举报

0

主题

17

回帖

0

积分

新手上路

积分
0
发表于 2013-10-24 10:19:47 | 显示全部楼层
[s:151]                    好文章,走在技术的前沿~
回复

使用道具 举报

116

主题

799

回帖

1147

积分

至尊会员

积分
1147
QQ
发表于 2013-10-24 12:17:50 | 显示全部楼层
[s:151] 给力
回复

使用道具 举报

2

主题

135

回帖

2

积分

初级会员

积分
2
发表于 2013-10-25 13:44:16 | 显示全部楼层
收到了?
好啊。。
[s:151] [s:151] [s:151]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2013-10-25 16:02:02 | 显示全部楼层

回 northtiger 的帖子

northtiger:收到了?
好啊。。
[s:151] [s:151] [s:151]  (2013-10-25 13:44) 
下周到货
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2014-3-17 17:09:04 | 显示全部楼层
不错。省得我去找资料了,节约了不少时间。
回复

使用道具 举报

1

主题

27

回帖

30

积分

新手上路

积分
30
发表于 2014-5-5 16:17:40 | 显示全部楼层
期待
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2014-7-27 18:14:17 | 显示全部楼层
我现在用的是STM32F429IGT6就是176脚1Mflash的MCU+IS42S16160,是8192*512*16bit*4bank的片子,配置完了就是不工作不知道是哪里出错了,一会而我把工程传上来希望版主帮忙看一下,困扰好几天了,引脚配置是
  /** FMC GPIO Configuration  
  PF0   ------> FMC_A0
  PF1   ------> FMC_A1
  PF2   ------> FMC_A2
  PF3   ------> FMC_A3
  PF4   ------> FMC_A4
  PF5   ------> FMC_A5
  PC0   ------> FMC_SDNWE
  PF11   ------> FMC_SDNRAS
  PF12   ------> FMC_A6
  PF13   ------> FMC_A7
  PF14   ------> FMC_A8
  PF15   ------> FMC_A9
  PG0   ------> FMC_A10
  PG1   ------> FMC_A11
  PE7   ------> FMC_D4
  PE8   ------> FMC_D5
  PE9   ------> FMC_D6
  PE10   ------> FMC_D7
  PE11   ------> FMC_D8
  PE12   ------> FMC_D9
  PE13   ------> FMC_D10
  PE14   ------> FMC_D11
  PE15   ------> FMC_D12
  PH6   ------> FMC_SDNE1
  PH7   ------> FMC_SDCKE1
  PD8   ------> FMC_D13
  PD9   ------> FMC_D14
  PD10   ------> FMC_D15
  PD14   ------> FMC_D0
  PD15   ------> FMC_D1
  PG2   ------> FMC_A12
  PG4   ------> FMC_BA0
  PG5   ------> FMC_BA1
  PG8   ------> FMC_SDCLK
  PD0   ------> FMC_D2
  PD1   ------> FMC_D3
  PG15   ------> FMC_SDNCAS
  PE0   ------> FMC_NBL0
  PE1   ------> FMC_NBL1
  */
程序见附件
解压放在
..\\STM32Cube_FW_F4_V1.3.0\\Projects\\STM32F429I-Discovery\\Examples\\FMC\\就可以编译了 FMC_SDRAM1.rar (74 KB, 下载次数: 361)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2014-7-28 16:13:41 | 显示全部楼层

回 longmotto 的帖子

longmotto:我现在用的是STM32F429IGT6就是176脚1Mflash的MCU+IS42S16160,是8192*512*16bit*4bank的片子,配置完了就是不工作不知道是哪里出错了,一会而我把工程传上来希望版主帮忙看一下,困扰好几天了,引脚配置是
  /** FMC GPIO Configuration  
 &#160F0&n .. (2014-07-27 18:14) 
不好意思啊,这个帮不到你,这部分已经没啥印象了。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2014-7-28 23:37:09 | 显示全部楼层
没事的,今天搞定了,在以为最不能出问题的地方出问题了,在管脚功能复用配置上出问题了,配置IO口不能偷懒用MX图形界面那个,太坑了,有些地方配置的不对。不过仔细把SDRAM所有的细节整了几遍,算是彻底熟悉了,也算收获了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2014-7-28 23:40:01 | 显示全部楼层

回 longmotto 的帖子

longmotto:没事的,今天搞定了,在以为最不能出问题的地方出问题了,在管脚功能复用配置上出问题了,配置IO口不能偷懒用MX图形界面那个,太坑了,有些地方配置的不对。不过仔细把SDRAM所有的细节整了几遍,算是彻底熟悉了,也算收获了 (2014-07-28 23:37) 
官方新出的CubeF4和MX图形界面不行的,还在推广中,不可靠,还是用固件库好些。
回复

使用道具 举报

1

主题

5

回帖

1

积分

新手上路

积分
1
发表于 2014-11-11 10:47:40 | 显示全部楼层
按照你的配置Cube提示错误,RCDDelay至少要是3才可以,这个问题能给解释下吗
QQ图片20141111105000.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2014-11-11 15:56:21 | 显示全部楼层

回 sdbzjqr 的帖子

sdbzjqr:按照你的配置Cube提示错误,RCDDelay至少要是3才可以,这个问题能给解释下吗
 (2014-11-11 10:47) 
Cube没有用过,帮顶
回复

使用道具 举报

1

主题

5

回帖

1

积分

新手上路

积分
1
发表于 2014-11-11 17:59:35 | 显示全部楼层
QQ图片20141111175725.png

TXSR最小值是70ns,但是6 x 11.1 = 66.6 < 70ns
70ns是最小值,只能大于此数,你这样小于70ns了,此处不应该是8吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2014-11-15 20:09:21 | 显示全部楼层

回 sdbzjqr 的帖子

sdbzjqr:

TXSR最小值是70ns,但是6 x 11.1 = 66.6 < 70ns
70ns是最小值,只能大于此数,你这样小于70ns了,此处不应该是8吗?
 (2014-11-11 17:59) 
的确,所言极是
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2014-12-1 09:15:28 | 显示全部楼层
F429 DISCOVERY板子已到手,学一学这个,谢谢分享。
回复

使用道具 举报

1

主题

33

回帖

36

积分

新手上路

积分
36
发表于 2014-12-26 08:12:17 | 显示全部楼层
终于可以抛弃坑爹的SRAM了[s:151]
回复

使用道具 举报

0

主题

5

回帖

0

积分

新手上路

积分
0
发表于 2015-1-4 21:57:33 | 显示全部楼层
你好!请问可以用sdram做为emwin的数据存储吧?是要在GUIConf.c设置吗?我板子是f429-disco的,有官方的初始化程序,但是在GUIConf.c不知道要怎么样设置才能把数据放到sdram,GUI_ALLOC_AssignMemory如果不用内部RAM就总是报错。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2015-1-5 15:00:51 | 显示全部楼层

回 kings9527110 的帖子

kings9527110:你好!请问可以用sdram做为emwin的数据存储吧?是要在GUIConf.c设置吗?我板子是f429-disco的,有官方的初始化程序,但是在GUIConf.c不知道要怎么样设置才能把数据放到sdram,GUI_ALLOC_AssignMemory如果不用内部RAM就总是报错。。 (2015-01-04 21:57) 
可以使用sdram作为emWin的动态内存。
回复

使用道具 举报

7

主题

38

回帖

59

积分

初级会员

积分
59
发表于 2015-1-24 00:20:12 | 显示全部楼层

回 eric2013 的帖子

eric2013:开发板上面用的SDRAM数据手册

(2013-10-23 20:50)
亲,是出于什么因素导致我们一般在429上面用SDRAM,而较少用SRAM呢,刚从STM32F1转移过来,呵呵
回复

使用道具 举报

740

主题

1326

回帖

3546

积分

管理员

春暖花开

Rank: 9Rank: 9Rank: 9

积分
3546
QQ
发表于 2015-1-24 08:09:00 | 显示全部楼层

回 zhoulei 的帖子

zhoulei:亲,是出于什么因素导致我们一般在429上面用SDRAM,而较少用SRAM呢,刚从STM32F1转移过来,呵呵 (2015-01-24 00:20) 
SDRAM很便宜,而且容量比SRAM大很多,有SDRAM接口的话,速度比SRAM也不差。
努力打造安富莱高质量微信公众号:点击扫描图片关注
回复

使用道具 举报

8

主题

33

回帖

7

积分

新手上路

积分
7
发表于 2015-3-17 11:35:06 | 显示全部楼层
弱弱的问一下行列的12和8是怎么计算的啊
回复

使用道具 举报

6

主题

390

回帖

408

积分

高级会员

积分
408
发表于 2015-5-3 16:24:21 | 显示全部楼层
[s:151]  [s:151]  [s:151]  [s:143]  [s:143]  [s:143]
回复

使用道具 举报

3

主题

21

回帖

30

积分

新手上路

积分
30
发表于 2015-10-26 14:36:13 | 显示全部楼层
刷新频率设置 1.01改回来了
  /* Set the refresh rate counter */
    /*64ms/4096=15.62us*/
  /* (15.62 us x Freq) - 20 =1406 - 20 */
  /* Set the device refresh counter */
  FMC_SetRefreshCount(1386);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2015-10-28 16:37:28 | 显示全部楼层

回 queqiongtao 的帖子

queqiongtao:刷新频率设置 1.01改回来了
  /* Set the refresh rate counter */
    /*64ms/4096=15.62us*/
  /* (15.62 us x Freq) - 20 =1406 - 20 */
  /* Set the device refresh counter */
....... (2015-10-26 14:36) 
感谢告知。
回复

使用道具 举报

27

主题

82

回帖

163

积分

初级会员

积分
163
发表于 2016-1-19 14:55:25 | 显示全部楼层
问一下,SDRAM布板要注意那些,要走等长线吗?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2016-1-19 14:58:38 | 显示全部楼层

回 sss3s 的帖子

sss3s:问一下,SDRAM布板要注意那些,要走等长线吗?谢谢 (2016-01-19 14:55) 
不需要,不过最好离STM32走线越近越好。
回复

使用道具 举报

27

主题

82

回帖

163

积分

初级会员

积分
163
发表于 2016-1-19 15:09:17 | 显示全部楼层
谢谢[s:151]
回复

使用道具 举报

6

主题

24

回帖

6

积分

新手上路

积分
6
发表于 2016-4-22 11:42:38 | 显示全部楼层

回 wwjdwy 的帖子

wwjdwy:弱弱的问一下行列的12和8是怎么计算的啊 (2015-03-17 11:35) 
这个是由ROW Address为A0~A11共12根地址线,Column Address为A0~A7共8根地址线决定的。
所以出来行列出来12和8
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2016-9-9 18:01:05 | 显示全部楼层
1.png

注意,凡事从资料上找原由~
回复

使用道具 举报

11

主题

104

回帖

137

积分

初级会员

积分
137
发表于 2017-5-25 10:49:26 | 显示全部楼层
[s:151]  [s:151]  [s:151]
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2017-6-5 13:35:17 | 显示全部楼层
[s:151]
菩萨畏因,凡夫畏果;
回复

使用道具 举报

0

主题

29

回帖

29

积分

新手上路

积分
29
发表于 2017-6-14 08:41:45 | 显示全部楼层
都是大神[s:151] [s:151] [s:151]
回复

使用道具 举报

0

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2018-5-10 12:26:42 | 显示全部楼层
eric2013 发表于 2015-1-5 15:00
可以使用sdram作为emWin的动态内存。

我也遇到这个问题,一把动态内存设置到SDRAM就死机,调用GUI_Init()调试可以进GUI_X_Config然后就进hardfault了,调了很久都不行,有人知道原因的能指导一下吗,谢谢!
回复

使用道具 举报

0

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2018-5-10 13:30:37 | 显示全部楼层
Jalon 发表于 2018-5-10 12:26
我也遇到这个问题,一把动态内存设置到SDRAM就死机,调用GUI_Init()调试可以进GUI_X_Config然后就进hardf ...

不好意思,问题已经解决了,是我的SDRAM的一个数据引脚初始化错了。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2018-5-10 15:07:15 | 显示全部楼层
Jalon 发表于 2018-5-10 13:30
不好意思,问题已经解决了,是我的SDRAM的一个数据引脚初始化错了。。。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106738
QQ
 楼主| 发表于 2018-6-22 01:36:43 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 03:51 , Processed in 0.381145 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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