- 背景:
本文基于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的读写时序以及常见的特性分析完毕
深入理解sdram之基本特性的理解
最新推荐文章于 2024-05-01 21:45:41 发布