初学SDRAM笔记1--SDRAM的初始化过程

2019-04-14 18:27发布

 2017年的9月份我学习了怎么操作SDRAM,然而仅仅过了三个月,现在就忘的一干二净了,又得从头来起。这个元件目前在工作中用不到,所以平时不接触就忘的快了。          这次我再次来操作SDRAM,把学习的经过记录下来,而且写的尽量详细一些。这样下个月、下下个月再要用它的时候,只要翻翻这些笔记就行了吧。   首先要了解的SDRAM的初始化流程:          SDRAM并不是上电后就立即开始读写数据的,它需要按步骤初始化,对存储矩阵进行预充电、刷新并设置模式寄存器。 初始化流程图如下:
该流程的说明如下: a、给SDRAM上电,并提供稳定的时钟,至少100us b、发送“空操作”(NOP)命令 c、发送“预充电”命令,控制所有BANK进行预充电,并等待tRP的时间          tRP表示预充电和其他命令之间的延时 d、发送至少2个“自送刷新”命令,每个命令后需等待tRC时间  tRC表示自送刷新时间 e、发送“加载模式寄存器”命令,配置SDRAM的工作参数,等待tMDR时间          tMDR表示加载模式寄存器命令与行有效或刷新命令之间的延时 f、初始化流程完毕,可以开始读写操作 上面的几个延时时间和具体的SDRAM型号有关,要查询数据手册才能获知。我这里用的SDRAM型号是:IS42-45S16400J
STM32F429的FMC可以直接操作SDRAM,它的库函数有个结构体是专门控制SDRAM的各种时序的,上面讲到的三个延时都包含在里面。它的结构体如下:
1、tMRD:加载模式寄存器命令后的延迟。查询数据手册得知,tMRD的值是2个时钟周期。它的时序图如下:(手册上的图很多,要找tMDR直接看每张时序图的command行有没有LOAD MODE REGISITER,我在第38页找到了这张图)
2、tRC 自动刷新时间          继续翻数据手册,查找这个tRC的值。在PDF里面查找“RC”,然后会看到关于它的介绍和一个表格。这个tRC在55到63ns之间

3、tRP预充电和其他命令之间的延时          在上图中,我们可以看到tRP是15ns          到这里初始化要用到的3个延时时间就搞清楚了。   可是为什么要预充电呢?下面来看一下专业的解释:         SDRAM的寻址具有独占性,所以在进行完读写操作后,如果要对同一个Bank的另一行进行寻址,就要将原来有效(ACTIVE)的行关闭,重新发送行/列地址。Bank关闭当前工作行,准备打开新行的操作就是预充电。          预充电可以通过独立的命令控制,也可以在每次发送读写命令的同时使用“A10”线控制自动进行预充电。实际上,预充电是一种对工作中所有存储阵列进行数据重写,并对行地址进行复位,以准备新行的工作。   那为什么又要“自动刷新”呢?          SDRAM要不断的进行刷新才能保留住数据,因此它是DRAM最重要的操作。预充电是对一个或所有Bank中的工作行的操作,并且不定期;而刷新具有固定的周期,依次对所有的行进行操作,以保证那些久久没被访问的存储单元数据正确。          刷新操作分两种:“自动刷新”和“自我刷新”。发送命令后CKE时钟为有效时(低电平),使用自动刷新操作,否则使用自我刷新操作。          不论使用何种刷新方式,都不需要外部提供地址信息,因为这个是内部操作。                   对于“自动刷新”,SDRAM内部有一个行地址生成器(也称刷新计数器)用来自动地依次生成行地址,每收到一次命令刷新一行。在刷新过程中,所有的Bank都停止工作,而每次刷新所占用的时间为N个时钟周期。刷新结束后才可进入正常的工作状态,也就是说在这N个时钟期间内,所有工作指令只能等待而无法执行。一次次的按行刷新,刷新完所有行后,将再一次对第一行重新进行刷新操作,这个对同一行刷新操作的时间间隔,成为SDRAM的刷新周期,通常为64ms。显然,刷新会对SDRAM的性能造成影响,但这是SDRAM的特性决定的,也是SDRAM相对于SRAM取得成本优势的同时所付出的代价。          “自我刷新”则主要用于休眠模式低功耗状态下的数据保存,也就是说即使外部控制器件不工作了,SDRAM都能自己确保数据正常。在发出“自我刷新”命令后,将CKE置于无效状态(低电平),就进入自我刷新模式。此时不再依靠外部时钟工作,而是根据SDRAM内部的时钟进行刷新操作。在自我刷新期间,除了CKE之外的所有外部信号都是无效的,只有重新使CKE有效才能退出自我刷新模式并进入正常操作状态。