SDRAM工作原理和初始化参数

       近期编译AT91sam9260的UBOOT,由于开发板是NorFLash方式直接启动,没有使用官方的bootStrap+Uboot模式引导,所以得自己写lowlevel_init.S文件,此文件主要完成对时钟和SDRAM的初始化,用ARM 汇编编写。现在必须要搞清楚SDRAM的原理才能coding,下面把我的理解和大家分享一下。

      SDRAM(Synchronous DRAM),因为Synchronous,所以所有信号都是和时钟信号同步。可以把SDRAM看成是EXCEL电子表格,通过行地址和列地址就唯一的锁定了一个单元格的内容,一般的SDRAM都有2个或者两个以上的Bank,就像一个EXCEL文档有2个或者两个以上的sheet,每个sheet又由行号和列号锁定单元格内容。

     在实际工作中,bank地址和行地址一起发出,这个命令叫做行激活(Row Active),此后列地址和操作指令(读或写)也一起发出,这两组信号之间有个延迟。根据行业标准,定义此时间为从行有效到读/写命令发出之间的间隔tRCD,即RAS to CAS DelayRASCAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲)。这是SDRAM一个很重要时序参数,Uboot初始化时候要配置。在列地址被选中后,数据传输过程被触发,但在这之前有个数据准备时间,即CLCAS Latency),它也是一个重要的SDRAM参数,但该时间只是针对读操作,写操作没有这一时延。

      SDRAM的数据传输基本上都是连续的,所以SDRAM中有突发传输的概念,突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL),在初始化之前要通过寄存器定义。 在进行突发传输时,只要指定起始列地址与突发长度,SDRAM就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。

   在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,SDRAM芯片将进行预充电(precharge)的操作来关闭当前工作行。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRPRow Precharge command Period,行预充电有效周期)。

  

   实例分析:以我所LC用的AT91sam9260ek系列ARM9开发板为例:

   板载SDRAM型号为MT48LC16M16A2,为4M*16*4bank,行寻址线(A0-A12)8K,列寻址(A0-A8)512,Bank寻址(BA0-BA1)4,数据位宽为16,所以 8K*512*16*4=256Mbit=32MB。   Trcd=20ns,Tcl=2.5ns,Trp=20ns,Tref=64ms,Trc=60ns,时钟100MHZ,有了这些参数,就可以用汇编配置SDRAM控制器了。

你可能感兴趣的:(工作,汇编,Excel,command,Tcl,delay)