我是靠谱客的博主 坦率咖啡,最近开发中收集的这篇文章主要介绍相信我,SDRAM真的不难(一)----初识SDRAM写在前面1、什么是SDRAM2、Bank、Row、Column3、内存容量计算4、信号管脚5、操作指令6、操作及时序6.1、初始化7、关键参数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面

        本文是SDRAM系列文章的第一篇,旨在对SDRAM做一个初步的介绍与认识。

        其他博文链接:相信我,SDRAM真的不难----汇总篇(电梯直达)


1、什么是SDRAM

        SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器。同步、动态、随机是其性能特点的外在说明:

  • 同步(Synchronous )是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准
  • 动态(Dynamic )是指存储阵列 需要不断的刷新来保证数据不丢失
  • 随机(Random )是指数据不是线性依次存储,而是自由指定地址进行 数据读写

        SDRAM具有空间存储量大、读写速度快、价格相对便宜等优点。然而由于SDRAM内部利用电容来存储数据,为保证数据不丢失,需要持续对各存储电容进行刷新操作;同时在读写过程中 需要考虑行列管理、各种操作延时等,由此导致了其控制逻辑复杂的特点。

2、Bank、Row、Column

        简单来说,SDRAM 内部可以理解为一个存储阵列,这是 SDRAM 区别于管道式存储,实现随机地址存取的结构特点。表格中的每一个单元格可以类比为存储阵列的单个存储单元。若想要实现存储阵列中的某一存储单元的数据读写操作,我们要通过行地址(Row Address)和列地址 (Column Address)(先行后列)精确定位到这一存储单元,进而进行数据的读写操作,这就是所谓的随机地址存取

        对于 SDRAM,我们将类比于单元格的存储空间称之为存储单元,N(行列个数乘积)个存储单元构成一个存储阵列,这个存储阵列称之为一个逻辑Bank(Logical Bank,Bank)。SDRAM 内部分割为若干个 Bank。若干 Bank 的分割,原因一是基于技术、成本考量;二是由于 SDRAM 的工作原理限制,单一 Bank 可能会造成非常严重的寻址冲突。

         这样一来,在对 SDRAM 进行数据读写时,要先确定 Bank 地址,再依次确定行地址和列地址,进而进行数据的读写操作,而且一次只能对一个 Bank 的一个存储单元进行操作。

3、内存容量计算

        对SDRAM的读写是针对存储单元进行的,对SDRAM来说一个存储单元的容量等于数据总线的位宽,单位是bit。那么SDRAM芯片的总存储容量我们就可以通过下面的公式计算出来:

         SDRAM总存储容量 = L-Bank的数量×行数×列数×存储单元的容量

        

        该款SDRAM的行地址13bit,列地址9bit,4个bank,16bit数据,所以它的容量 = 4 × 2^13 × 2^9 × 16 = 4 × 4Mb × 16 = 256Mb = 32MB

4、信号管脚

        SDRAM 作为一款存储芯片,有着较为复杂的操作时序,且输入输出信号较多,下图是SDRAM 引脚示意图:

        x4、x8、x16 分别表示位宽 4bit、8bit、16bit;#符号表示信号为低电平有效;短 划线 - 表示 x8 和 x4 引脚功能与 x16 引脚功能相同。 

        SDRAM 引脚功能描述如下:

  • CLK:SDRAM工作的时钟,并且所有的输入信号都是在CLK的上升沿进行检测的,也就是说我们给SDRAM给的任何命令,一定要在CLK的上升沿保持稳定,以免SDRAM获取我们给出的命令时出现错误
  • CKE:时钟使能信号
  • CS#:SDRAM片选信号(#表示低电平有效)
  • CAS#,RAS#,WE#:这三个信号构成了对SDRAM的命令信号
  • DQM:数据输入/输出掩码,高电平有效
  • BA[1:0]:Bank地址线,
  • A[12:0]:地址线,当我们选择SDRAM某个Bank的Row地址的时候,需要到12根地址线(A0~A11);当选择Col地址的时候,只用A0~A8这9根线;A10这个信号可以用来控制Auto-precharge
  • DQ [15:0]:双向数据总线

SDRAM 内部功能框图如下:

        SDRAM 内部包含一个逻辑控制单元,内部包含模式寄存器和命令解 码器。外部通过 CS_N、RAC_N、CAS_N、WE_N 这四个信号构成命令信号以及地址总线向逻辑控制单元输入命令,命令经过命令解码器进行译码后,将控制参数保存到模式寄存器中,逻辑控制单元进而控制逻辑运行。

        外部通过地址总线输入地址信息,地址信息在逻辑控制单元进行逻辑控制时起到辅助作用,除此之外,复用的地址总线与 Bank 控制逻辑、行地址复用器、列地址计数锁存 器、列地址解码器等内部器件共同作用,精确选定存储阵列中与行列地址相对应的存储单元,进而进行数据存取操作。 

5、操作指令

        常用的 SDRAM 操作指令如下图:

5.1、禁止命令(Command Inhibit)

        禁止命令 (Command Inhibit) ,其他数据手册也称为取消设备选择命令 (Device Deselect)。不论 SDRAM 处于何种状态,此命令均可被执行;执行此命令后,SDRAM 芯片不被选择,新的命令无法写入,但已经执行的命令不受影响。

5.2、无操作命令(No-operation)

        无操作命令(No-operation),也可称为空命令、NOP命令。不论 SDRAM 处于何种状态,此命令均可被写 入,该命令给被选中的 SDRAM 芯片传递一个空操作信息,目的是为了防止 SDRAM 处于空闲或等待状态时,其他命令被写入。

5.3、配置模式寄存器命令(Load Mode Register)

         配置模式寄存器命令(Load Mode Register),也被称为 Mode Reigister Set。此命令只有所有 Bank 均处于空闲状态时才可被写入,否则配置出错,而且在执行此命令后,SDRAM 必须等待相应的响应时间 tRSC(Register Set Cycle),模式寄存器配置周期)后,才可写入新的命令。

        在写入此命令对 SDRAM 进行模式寄存器配置时,需要地址总线 A0-A11 辅助寄存器的模式设置,A0-A11 赋值不同对应寄存器配置不同模式,未使用的地址总线设置为低电平。 A0-A11 的不同赋值所对应的寄存器不同模式,具体见下图:

5.3.1、突发长度(Burst Length)

        突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Length,简称 BL)。地址总线的低三位 A0-A2 是突发长度的控制位,SDRAM 芯片的突发长度可设置为 1、2、4、8 和整页,单位为字节,整页表示一次突发传输一整行的数据量。

5.3.2、突发类型

        突发类型的设置位为 A3,可将突发类型设置为两类,顺序和隔行。一般将 A3 设置为低电平,选择顺序类型。

5.3.3、列选通潜伏期(CAS Latency)

        列选通潜伏期是指从读命令被寄存到数据总线上到出现第一个有效数据之间的时钟周 期间隔,列选通潜伏期可被设置为 2 个或 3 个时钟周期,设置位为 A6,A5,A4。

5.3.4、运行模式(Operating Mode)

        运行模式设置位为 A7,A8,SDRAM 存在标准模式、测试模式等多种模式,但对于普通用户,只开放了标准模式,在使用 SDRAM 时只需将 A7,A8 设置为低电平进入标准模式.

5.3.5、写模式

        写模式设置位为 A9,控制 SDRAM 的写模式。当 A9 为低电平时,SDRAM 的读/写操 作均采用突发方式,突发长度由突发长度寄存器(A0-A2)设定;当 A9 位高电平时, SDRAM 的读操作依然采用突发方式,突发长度由突发长度寄存器(A0-A2)设定,但 SDRAM 的写操作不在使用突发方式,每一个写命令只能写入一个数据。

5.3.6、A10-A12

        A10-A12为保留位,对模式寄存器的配置不起作用,赋值为 0 即可。 

5.4、预充电命令(Precharge)

        预充电的作用就是关闭指定的Bank 或者全部Bank 中激活的行,预充电命令执行 后,必须等待对应的等待时间 tRP(tRP(Precharge command Period),预充电命令周期),相对应的 Bank 将可以被重新操作。

        预充电命令(Precharge)命令包括两类:全部预充电(Precharge All)和指定Bank 预充电 (Precharge Bank),当 A10 为高电平发送预充电命令时,执行全部预充电命令,对所有的 Bank 进行预充电;当 A10 为低电平发送预充电命令时,只对由 BA[1:0]选定的 Bank 进行预充电。

5.5、刷新命令(Refresh)

        SDRAM 只有通过刷新操作才能保证数据的可靠性,SDRAM 的刷新操作是周期性的,在两次刷新的间隔可以进行数据的相关操作。我们在看SDRAM芯片参数时,经常会看到4096 Refresh Cycles/64ms或8192 Refresh Cycles/64ms的标识,这里的4096与8192就代表 这个芯片中每个Bank的行数。

        刷新命令一次仅对一行有效,也就是说在64ms内这两种规格的 芯片分别需要完成4096次和8192次刷新操作。这4096操作可以平均15.625μs刷新一次,也可以一次全部刷新完,却决于你的数据读写时序。

5.6、数据掩码

        如果突发长度BL=4,那么也就是说一次就传送4笔数据。 但是,如果其中的第二笔数据是不需要的,怎么办?还要传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O端口取消哪 些输出或输入的数据。为了精确屏蔽一个数据总线位宽中的每个字节,每个DQM信号线对应一个字节(8bit)。

6、操作及时序

6.1、初始化

        SDRAM 的初始化是芯片上电后必须进行的一项操作,只有进行了初始化操作的 SDRAM 芯片才可被正常使用。SDRAM 的初始化是一套预先定义好的流程,除此之外的其 他操作会导致 SDRAM 出现不可预知的后果。

        更多详细内容(概念、代码、仿真)请参考SDRAM系列博文:

相信我,SDRAM真的不难(二)----初始化操作https://blog.csdn.net/wuzhikaidetb/article/details/119973580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163275499416780269840111%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163275499416780269840111&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-4-119973580.pc_v2_rank_blog_default&utm_term=SDRAM&spm=1018.2226.3001.4450https://blog.csdn.net/wuzhikaidetb/article/details/119973580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163275499416780269840111%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163275499416780269840111&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-4-119973580.pc_v2_rank_blog_default&utm_term=SDRAM&spm=1018.2226.3001.4450

        初始化流程如图:

6.2、自动刷新 

        SDRAM 内部存储体是利用电容能够保持电荷以及可充放电的特 性制成,而电容所存储的电荷会随时间不断流失,会造成存储数据的丢失。为保证 SDRAM 中数据的可靠性,需要对 SDRAM 进行不断刷新。SDRAM 的刷新方式分为自刷新和自动刷新两种,这两种刷新方式,在实现和作用上存在差异。

  • 自动刷新模式:作用是在 SDRAM 的正常操作过程中,保证数据不丢失,自动刷新过 程需要外部时钟的参与,但刷新行地址由内部刷新计数器控制,无需外部写入。
  • 自刷新模式则主要用于休眠模式低功耗状态下的数据保存,自刷新过程无需外部时钟参与,与自动刷新相同的是,刷新行地址由内部刷新计算器控制,无需外部写入。

        两者的操作命令相同,当 CKE信号保持高电平时,写入刷新指令,进入自动刷新模 式;当CKE 信号为低电平时,写入刷新指令,进入自刷新模式。

        更多详细内容(概念、代码、仿真)请参考SDRAM系列博文:

相信我,SDRAM真的不难(三)----自动刷新操作https://blog.csdn.net/wuzhikaidetb/article/details/120038276https://blog.csdn.net/wuzhikaidetb/article/details/120038276

        自动刷新流程如图:

6.3、数据输入--写操作 

        SDRAM提供了多种数据写入方式,诸如单个写、页突发写(突发长度1、2、4、8、全页)等。

        更多详细内容(概念、代码、仿真)请参考SDRAM系列博文:

相信我,SDRAM真的不难(四)----写操作(页突发模式)https://blog.csdn.net/wuzhikaidetb/article/details/120397345https://blog.csdn.net/wuzhikaidetb/article/details/120397345        

         写操作(全页突发)流程如图:

6.4、数据输出--读操作 

        SDRAM提供了多种数据读取方式,诸如单个读、页突发读(突发长度1、2、4、8、全页)等。

        更多详细内容(概念、代码、仿真)请参考SDRAM系列博文:

相信我,SDRAM真的不难(五)----读操作(页突发模式)https://blog.csdn.net/wuzhikaidetb/article/details/120399012https://blog.csdn.net/wuzhikaidetb/article/details/120399012        

         读操作(全页突发)流程如图:

7、关键参数

7.1、tRCD

        从行选通命令到列读写命令发出之间的间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲)。广义的tRCD以时钟周期(tCK,Clock Time)数为单位,比如tRCD=2,就代表延迟周期为两个时钟周期。下图tRCD为3个时钟周期。

        

7.2、tRP

        PRECHARGE  command  period,发送预充电指令后进行下一个操作需要等待的时间。下图tRP为2个时钟周期。

7.3、CL

        相关的列地址被选中之后,将会触发数据传输,但从存储单元中输出到真正出现在内存芯片的 I/O 接口之间还需要一定的时间,时间就是 CL(CAS Latency,选通潜伏期)。CL 的数值与 tRCD 一样,以时钟周期数表示。下图CL为2个时钟周期。

最后

以上就是坦率咖啡为你收集整理的相信我,SDRAM真的不难(一)----初识SDRAM写在前面1、什么是SDRAM2、Bank、Row、Column3、内存容量计算4、信号管脚5、操作指令6、操作及时序6.1、初始化7、关键参数的全部内容,希望文章能够帮你解决相信我,SDRAM真的不难(一)----初识SDRAM写在前面1、什么是SDRAM2、Bank、Row、Column3、内存容量计算4、信号管脚5、操作指令6、操作及时序6.1、初始化7、关键参数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部