深入理解sdram之基本特性的理解

本文详细解析了JZ2440平台上的SDRAM配置与工作原理,包括存储控制器介绍、SDRAM硬件结构及根据数据手册配置内存控制器等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 背景:
    本文基于jz2440讲解sdram,其文章的内容主要有
  • jz2440存储控制器介绍
  • sdram的硬件结构
  • 根据dataSheet配置内存控制器以及理解sdram工作时序方式(这里会对每个寄存器进行详细的讲解)

  • jz2440存储控制器介绍
    虽然2440是一款32位的CPU, 也就是说具有32位的地址总线(寻址范围是4G)和数据总线,但实际上,它的地址线只引出了27根, 即ADDR0~ADDR26,因此最大外设寻址空间为2^27=128M,这27根地址线连接着外设,但是这款芯片支持外设寻址1个G,也就是说27根地址线寻址可达1个G,怎么办到的呢?2440这个芯片将1G的寻址空间分为8个区域,每个区域称为一个bank,即bank0->bank7, 每个bank的最大空间为128M,此外又引出了8个片选信号nGCSx,用于区别不同的bank,截取dataSheet图如下
    这里写图片描述
    这个图网上也能搜到,确实是经典,不得不拿出来在说一下,从图中获得信息
    1.nandflash启动部分, 我们可以看到bank0的地址范围(0-128M),仅有一个SRAM(片内内存,不用初始化就能用),这个SRAM也叫Stepping stone,大小4KB, 如果开机启动是nandflash
    硬件裸机会把nandflash的前4k代码搬运到这个SRAM,之后跳转到SRAM开始运行程序,当然,从此图也可以看出,SRAM的起始地址为0
    2.bank1-bank5是只读范围
    3.bank6-bank7可接sdram(内存条)
    上面说明了外设的寻址情况,那么作为一个4G寻址空间的芯片,其余3个G的一部分未使用,还有一部分是CPU内部使用的特殊功能寄存器的地址空间, 之后用一张图比较形象的描述一下jz2440芯片的地址分布情况
    这里写图片描述
    ★图中寄存器地址是不需要地址线的
    上图中的bank6(范围128M)挂接的是sdram, 在实际jz2440中,是两片sdram(每个32M,16位)并联在一块儿,即共64M的sdram内存空间

  • sdram的硬件结构
    这里写图片描述
    SDRAM如上图,内部是一个存储阵列,阵列就如同表格一样,先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格,这就是SDRAM寻址的基本原理,这个单元格被称为存储单元,这个表格(存储阵列)就是逻辑Bank,SDRAM一般含有4个逻辑Bank, 即L-Bnak
    上面介绍了jz2440的地址分布以及sdram的结构,下面就开始动真格的了,其实对于裸机程序来讲使硬件工作其实就是配置寄存器,一般都是某硬件控制器对应具体硬件,所以sdram也有相应的内存控制器,在讲配置寄存器前必须要知道以下几点才能更好的配置
    1.硬件的工作原理,就是什么样的操作能让它动起来,实现其应有的功能
    2.硬件的时序,比如sdram,的清楚读写时序是什么样的
    3.硬件的参数,硬件的datasheet
    4.2440芯片手册,查询对应硬件的控制寄存器,清楚每个寄存器代表的意义
    我认为弄清楚以上的几点,才能配好一个寄存器,其实难度还是挺大的

  • 根据dataSheet配置内存控制器以及理解sdram工作时序方式
    首先,我们先来理解一下sdram的工作原理,看下硬件的连接情况
    这里写图片描述
    除了上图中b.的连接情况,cpu与sdram还有其他的一些信号线
    用于控制SDRAM
    ・SDRAM时钟有效信号SCKE
    ・SDRAM时钟信号SCLK0/SCLK1
    ・数据掩码信号DQM0->DQM3
    ・SDRAM片选信号nSCS0->nSCS7(nSCS0与nSCS6是同一引脚)
    ・SDRAM行地址选通脉冲信号nSRAS
    ・SDRAM列地址选通脉冲信号nSCAS
    ・写允许信号nWE(它不是专用于SDRAM的)
    如果上面没看懂的话千万别急,下面会有解释,上面描述了CPU提供给sdram的信号,下面介绍一下工作流程, 即访问SDRAM一般分为4个部分:
    这里写图片描述
    上面说了很清楚吧,有人会问为什么地址0与1不参与译码,换句话就是ADDR0与ADDR1这CPU的两根地址针就没有接出去,为什么要这样,请参考文章arm地址线的链接方式
    之后,我们开始配置寄存器
    这里写图片描述
    在讲解配置寄存器前,必须要了解sdram的一些特性,才能更好的配置寄存器

  • SDRAM的读/写时序与突发长度
    1.关于SDRAM读取操作有两种方式
    1.1.一个一个数据的读取(非突发)
    这里写图片描述
    上图的时序中,读数据的命令顺序为
    片选信号->行指令→读指令・列指令→读指令・列指令→读指令・列指令→读指令・列指令
    即读4个数据发了4次的读指令与列指令,这里注意的是(读指令与地址是同时发出的)
    1.2.多个数据一次性读取(突发, 突发长度BL=一次性读取的数据数)
    这里写图片描述
    由上面可知,只需要发一次读指令・列指令就可以读取多个数据
    这就是sdram的突发模式,这个需要配置寄存器进行模式设置,这里BL=4,即突发长度是4(一次性读4个数据),这个也需要配置寄存器
    1.3.总结
    上面两种读取的方式中,有个CAS潜伏期=2,意思就是说从开始发读数据指令到真正开始读取数据,这期间硬件(sdram)是需要反映一段时间的
    这段时间就叫做CAS,注意,只是读操作有CAS,写操作并没有
    2.关于SDRAM写操作
    sdram的写操作并没有CAS,即数据是实时写入的,但是硬件也是需要反映一段时间,即tWR
    这里写图片描述

  • SDRAM的预充电(Precharge)
    由于SDRAM的寻址具有独占性,所以进行完读写操作后,如果要对同一L-Bank的另一行进行寻址,就要将原来有效(工作)的行关闭,重新发行/列指令,L-Bank关闭现有行,准备打开新行的操作就是预充电,在发出预充电命令后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period, 预充电有效周期)
    这里写图片描述
    如上图所示,关于自动预充电什么的就不关心了,不是本次讨论重点
    这里有几个地方要说明一下:
    1.tRCD: 行地址与列地址之间要有一定的反应时间
    2.CAS潜伏期: 这个上面已经提到
    3.tRAS: 就是半行周期时间
    4.tRP:预充电时间
    5.tRC: 一次读取数据周期,即行有效时间 tRC = tRP+tRAS
    由上图要注意的是,在预充电开始时还在读数据(即两者同时进行)

  • 数据掩码
    在讲述读/写操作时,我们谈到了突发长度。如果BL=4,那么也就是说一次就传送4 X 32bit 的数据。但是,如果其中的第二笔数据是不需要的,怎么办?还都传输吗?为了屏蔽不需要的数据,人们采用了数据掩码(Data I/O Mask,简称DQM)技术。通过DQM,内存可以控制I/O 端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽,SDRAM 官方规定,在读取时DQM 发出两个时钟周期后生效,而在写入时,DQM 与写入命令一样是立即成效。
    这里写图片描述
    以上关于sdram的读写时序以及常见的特性分析完毕
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值