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

【STM32f769I-DISC SDRAM试验】

[复制链接]
andeyqi 发布时间:2018-7-24 12:08
本帖最后由 andeyqi 于 2018-10-12 09:33 编辑

STM32f769I-DISC开发板板载了128Mbit的SDRAM芯片,一直只是了解SDRAM原理,并未进行深入的了解,手头的开发板硬件资源丰富可以有机会研究下。片上SDRAM框图如下:

sdram.PNG
从图中可以看出,SDRAM的行地址宽度和列地址宽度分别为12bit和8bit,正好和demo的配置吻合。
  1. hsdram.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_8;
  2. hsdram.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;
复制代码

由于技术、成本等原因,不可能只做一个全容量的 L-Bank,而且最重要的是,由于 SDRAM 的工作原理限制,单一的 L-Bank 将会造成非常严重的寻址冲突,大幅降低内存效率。所以人们在 SDRAM 内部分割成多个L-Bank,较早以前是两个,目前基本都是 4 个,这也是 SDRAM 规范中的最高 L-Bank
数量。根据上面的图示可以知道,板子上的Lbank数量为4。
  1. hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
复制代码


根据上面的芯片框图,芯片的控制引脚大致分为,时钟信号线,地址线,数据线,控制线这三类。
时钟信号线:
CLK:时钟信号线
CKE:时钟使能信号线
地址线:
A0-A11 12根地址线
BA0,BA1:SDRAM bank选择信号
数据线:
DQ0-DQ31 32根数据线
控制线:
CS#:片选信号线
WE#:SDRAM写使能信号
CAS#:列地址选择信号线
RAS#:行地址选择信号线
DQM0-DQM3:SDRAM输入输出掩码控制信号
FMC结构框图如下:

FMC_框图.PNG
硬件连线图:

SDRAM硬件连接图.PNG
FMC外部引脚.PNG
FMC_BANK.PNG
FMC模块使用的时钟为HCLK,试验代码配置200MHZ(The AHB clock (HCLK) is the reference clock for the FMC.)

硬件相关的初始化如下:

  1.   /*##-1- Configure the SDRAM device #########################################*/
  2.   /* SDRAM device configuration */
  3.   hsdram.Instance = FMC_SDRAM_DEVICE;

  4.   SDRAM_Timing.LoadToActiveDelay    = 2;
  5.   SDRAM_Timing.ExitSelfRefreshDelay = 6;
  6.   SDRAM_Timing.SelfRefreshTime      = 4;
  7.   SDRAM_Timing.RowCycleDelay        = 6;
  8.   SDRAM_Timing.WriteRecoveryTime    = 2;
  9.   SDRAM_Timing.RPDelay              = 2;
  10.   SDRAM_Timing.RCDDelay             = 2;

  11.   hsdram.Init.SDBank             = FMC_SDRAM_BANK1;
  12.   hsdram.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_8;
  13.   hsdram.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;
  14.   hsdram.Init.MemoryDataWidth    = SDRAM_MEMORY_WIDTH;
  15.   hsdram.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
  16.   hsdram.Init.CASLatency         = FMC_SDRAM_CAS_LATENCY_2;
  17.   hsdram.Init.WriteProtection    = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
  18.   hsdram.Init.SDClockPeriod      = SDCLOCK_PERIOD;
  19.   hsdram.Init.ReadBurst          = FMC_SDRAM_RBURST_ENABLE;
  20.   hsdram.Init.ReadPipeDelay      = FMC_SDRAM_RPIPE_DELAY_0;

  21.   /* Initialize the SDRAM controller */
  22.   if(HAL_SDRAM_Init(&hsdram, &SDRAM_Timing) != HAL_OK)
  23.   {
  24.     /* Initialization Error */
  25.     Error_Handler();
  26.   }
复制代码

SDRAM命令发送方法如下:

command.PNG
SDRAM的时钟分频系数设置可设为2和3(SDRAM clock can be HCLK/2 or HCLK/3  ),demo代码设置为2即CLK为100M,周期10ns。
#define SDRAM clock can be HCLK/2 or HCLK/3
hsdram.Init.SDClockPeriod      = SDCLOCK_PERIOD;

SDRAM相关时间参数的设置:
芯片手册上TRCD的时间描述如下,最小值为20ns.
TRCD_MIN.PNG
SDRAM_TIME.PNG
根据SDRAM Timing registers 寄存器的描述,Bits 27:24 TRCD[3:0]: Row to column delay 此处可以设为1~16来设置最小值,demo设置的为2(30ns) > 最小值20ns符合芯片时序要求。
SDRAM_Timing.RCDDelay             = 2;
SDRAM_TIME_PARAMETERS.PNG

芯片手册的TRRD时间最小值为14ns
TRR.PNG

代码配置为3个时钟周期,30ns满足芯片的最小时间要求。
SDRAM_Timing.RPDelay              = 2;

CAS 根据手册的描述指的是,模式寄存器中的 CASLatency 是指列地址选通延迟,简称 CL。在发出读命令(命令同时包含列地址)后,需要等待几个时钟周期数据线 DQ 才会输出有效数据,,手册上描述支持1,2,3(Supports CAS latency of 1, 2, and 3)个周期,769的FMC控制器支持CAS latency of 1,2,3三种配置,demo中配置的为2。

  hsdram.Init.CASLatency   = FMC_SDRAM_CAS_LATENCY_2;改参数设置的为SDRAM的模式寄存器的CASLatency位。


mode.PNG

CAS.PNG
refresh time.PNG

tXSR  (These bits define the delay from releasing the Self-refresh command to issuing the Activate command in number of memory clock cycles. )自刷新命令后,可以执行Active command 的时间间隔芯片手册描述最小为(70ns)。

refresh time.PNG

SDRAM_Timing.ExitSelfRefreshDelay = 6; demo中设定为70ns
tRAS (These bits define the minimum Self-refresh period in number of memory clock cycles.)刷新周期,刷新率,手册要求最小值为42ns.

SDRAM_Timing.SelfRefreshTime      = 4;demo中设定为50ns满足要求
tMRD 设定load mode 命令和 active 指令之间的时间间隔,手册上最小值为2个时钟周期

Bits 3:0 TMRD[3:0]: Load Mode Register to Active
These bits define the delay between a Load Mode Register command and an Active or Refresh
command in number of memory clock cycles.
0000: 1 cycle
0001: 2 cycles
....
1111: 16 cycles

  SDRAM_Timing.LoadToActiveDelay    = 2;demo中设置为3个时钟周期满足芯片要求  
tRC(ACTIVE to ACTIVE command period) 芯片手册描述的为70ns,代码中设置为70ns

SDRAM_Timing.RowCycleDelay        = 6;
tWR:WRITE recovery time( Auto precharge mode only )芯片手册描述为1CLK+7ns,针对本demo为17ns,demo代码的SDRAM_Timing.WriteRecoveryTime    = 2; 30ns符合要求。

twr.PNG
769文档上对这个几个时间有此要求:TWR ≥ TRAS - TRCD and TWR ≥TRC - TRCD - TRP

TWR=30ns ,TRAS = 50ns,TRCD = 30ns,TRC = 70ns ,TRP = 30ns


时间参数满足上述要求。下图为SDRAM初始化流程图。

SDRAMINIT.PNG

该流程说明如下:
(1) 给 SDRAM 上电,并提供稳定的时钟,至少 100us;
(2) 发送“空操作” (NOP)命令;
(3) 发送“预充电” (PRECHARGE)命令,控制所有 Bank 进行预充电,并等待 tRP 时间,tRP 表示预充电与其它命令之间的延迟;
(4) 发送至少 2 个“自动刷新” (AUTO REFRESH)命令,每个命令后需等待 tRFC 时间, tRFC表示自动刷新时间;
(5) 发送“加载模式寄存器” (LOAD MODE REGISTER)命令,配置 SDRAM 的工作参数,并等待 tMRD时间, tMRD表示加载模式寄存器命令与行有行或刷新命令之间的延迟;
(6) 初始化流程完毕,可以开始读写数据。
SDRAM读写时序.PNG

(1) 发送“行有效” (ACTIVE)命令,发送命令的同时包含行地址和 Bank 地址,然后等待 tRCD时间, tRCD表示行有效命令与读/写命令之间的延迟;
(2) 发送“读/写” (READ/WRITE)命令,在发送命令的同时发送列地址,完成寻址的地址输入。对于读命令,根据模式寄存器的 CL 定义,延迟 CL 个时钟周期后,SDRAM 的数据线 DQ 才输出有效数据,而写命令是没有 CL 延迟的,主机在发送写命令的同时就可以把要写入的数据用 DQ 输入到 SDRAM 中,这是读命令与写命令的时序最主要的区别。图中的读/写命令都通过地址线 A10 控制自动预充电,而 SDRAM 接收到带预充电要求的读/写命令后,并不会立即预充电,而是等待tWR 时间才开始, tWR 表示写命令与预充电之间的延迟;
(3) 执行“预充电” (auto precharge)命令后,需要等待 tRP 时间, tRP 表示预充电与其它命令之间的延迟;
(4) 图中的标号处的 tRAS,表示自刷新周期,即在前一个“行有效”与 “预充电”命令之间的时间;
(5) 发送第二次“行有效” (ACTIVE)命令准备读写下一个数据,在图中的标号处的tRC,表示两个行有效命令或两个刷新命令之间的延迟。
其中 tRCD、 tWR、 tRP、 tRAS 以及 tRC 等时间参数跟具体的 SDRAM 有关,可查阅其数据手册获知, STM32 FMC 访问时配置需要这些参数。

=======================参考资料=========================
MT48LC4M32_DataSheet.pdf (1.25 MB, 下载次数: 3)
收藏 2 评论4 发布时间:2018-7-24 12:08

举报

4个回答
zero99 回答时间:2018-8-1 15:11:29
学习下
wolfgang2015 回答时间:2018-8-1 15:16:48
很到位,内存的使用熟悉了,下次可以了解FLash了
andeyqi 回答时间:2018-8-1 16:09:09

感谢破总捧场
andeyqi 回答时间:2018-8-1 16:10:13
wolfgang2015 发表于 2018-8-1 15:16
很到位,内存的使用熟悉了,下次可以了解FLash了

只是理解了下demo程序,有些东西还是没有理解透彻,在慢慢学习理解。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版