SDRAM工作原理及S3C2410 SDRAM控制器配置方法
初始化状态 | |||
ST6 | 27 | 这个位决定SRAM在Bank6上是否采用UB/LB | 0 |
WS6 | 26 | 这个位决定Bank6的WAIT状态 | 0 |
DW6 | 25~24 | 这2位决定Bank6的数据总线宽度 | 0 |
2、BANKCONn寄存器的设置
S3C2410X有8个BANKCONn寄存器,分别对应着Bank0~Bank7。由于Bank6~Bank7可以作为FP/EDO/SDRAM等类型存储器的映射空间,因此与其他bank的相应寄存器有所不同,其中MT位定义了存储器的类型。BANKCONn寄存器在Bank6和Bank7上的位定义如表4-2所示。
表4-2 BANKCONn寄存器在Bank6和Bank7上的位定义
BANKCONn | 位 | 描述 | 起始状态 |
MT | 16~15 | 这2位决定了Bank6和Bank7的存储器类型 | 11 |
MT的取值又定义该寄存器余下几位的作用。当MT=11(即SDRAM型存储器)时,BANKCONn寄存器余下的几位定义如表4-3所示。
表4-3 BANKCONn寄存器在MT=11时的相关位定义
Trcd是从行使能到列使能的延迟,根据S3C2410X的HCLK频率(100M)及HY57V561620T-H的特性(见下图),此项取01,即3CLKS。SCAN为列地址线数量,此项根据HY57V561620特性取01,即9位(A0~A8)。
3、REFRESH寄存器
REFRESH寄存器是DRAM/SDRAM的刷新控制器。位定义如表4-4所示。
表4-4 REFRESH寄存器位定义
4.BANKSIZE寄存器
表4-5 BANKSIZE寄存器定义
BANKSIZE | 位 | 描述 | 初始状态 |
BURST_EN | [7] | ARM 内核猝发操作使能 | 0 |
保留 | [6] | 不使用 | 0 |
SCKE_EN | [5] | SCKE 使能控制 | 0 |
SCLK_EN | [4] | 只有在SDRAM访问周期期间,SCLK才使能,这样 | 0 |
保留 | [3] | 未用 | 0 |
BK76MAP | [2:0] | BANK6/7的存储空间分布 | 010 |
初始化时,BURST_EN可以取0或1,为了提高效率,最好设置为1。SCKE_EN设置为1。SCLK_EN设置为1。BK76MAP设置为2。
5、MRSR寄存器
MRSR寄存器有2个,分别对应MRSRB6和MRSRB7,对应着Bank6和Bank7。见表4-6。
表4-6 MRSRn寄存器定义
此寄存器S3C2410只允许CL可以设置,参照HY57V561620T-H手册,取011,即3CLKs。
猝发长度的具体值在程序中没有给出,根据后面触发时序猜测应该是8,HY57V561620T支持1、2、4、8、page猝发长度。
参照前面的HY57V561620命令表,写Mode寄存器用的是Mode register命令。其中的OP CODE参照下图:
注意:当代码在SDRAM中运行时,绝不能够重新配置MRSR寄存器。
五、SDRAM的控制时序分析
下面列出SDRAM的状态机及几种SDARM控制命令的时序。大家掌握了以后可以试着分析其它的命令时序。
1、SDRAM的状态机
SDRAM的完整状态机由多个状态构成,且状态转移是非随机的(如图5-1所示)。
正是如此众多的状态及其复杂的转换关系,导致SDRAM的控制较为复杂。通常FPGA开发人员在设计SDRAM控制器IP时需要详细了解这些状态机的过程。而一般开发人员以了解为主。
图5-1 SDRAM状态机
下面将结合上图及SDRAM的指令来分析SDRAM的控制时序
2、SDRAM single模式读时序
SDRAM初始化主要是由设置S3C2410 SDRAM控制器的模式寄存器(MRSR)完成的。主要设定了SDRAM的burst长度、CAS延时时间、突发类型等。然后就可以进行读写操作了。
下图是S3C2410以single方式读SDRAM时的时序。
对照HY57V5620的命令表,列出single read 命令实现过程。
CLK | SCKE | A10/AP | nGCSx | nSRAS | nSCAS | nWE | 命令 | 备注 |
1 | 1 | X | 1 | 1 | 1 | 1 | 空操作(NOP) | |
2 | 1 | 0 | 0 | 0 | 1 | 0 | 预充电选定bank(PRE) | Trp=2 |
3 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
4 | 1 | X | 0 | 0 | 1 | 1 | Bank激活命令(ACT) | Trcd=2 |
5 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
6 | 1 | 0 | 0 | 1 | 0 | 1 | 读操作(READ) | Tcl=3 |
7 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
8 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
9 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | 数据有效 |
3、SDRAM burst模式读时序
对照HY57V5620的命令表,列出burst read 命令实现过程。
CLK | SCKE | A10/AP | nGCSx | nSRAS | nSCAS | nWE | 命令 | 备注 |
1 | 1 | X | 1 | 1 | 1 | 1 | 空操作(NOP) | |
2 | 1 | 0 | 0 | 0 | 1 | 0 | 预充电选定bank(PRE) | Trp=2 |
3 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
4 | 1 | X | 0 | 0 | 1 | 1 | Bank激活命令(ACT) | Trcd=2 |
5 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | |
6 | 1 | 0 | 0 | 1 | 0 | 1 | 读操作(READ) | Tcl=2 |
7 | 1 | 0 | 0 | 1 | 0 | 1 | 读操作(READ) | |
8~13 | 1 | 0 | 0 | 1 | 0 | 1 | 读操作(READ) | 数据有效 |
14~15 | 1 | X | 1 | 1 | 1 | 1 | 空操作 | 数据有效 |
4、SDRAM Self Refresh时序
SDRAM 的Self Refresh功能在电源电源管理时经常使用,如:在主控器进入sleep状态时,会先让SDRAM工作在Self Refresh状态。下图为S3C2410发出Self Refresh命令时的时序图。
对照HY57V5620的命令表,列出进入Self Refresh的过程。
CLK | SCKE | A10/AP | nGCSx | nSRAS | nSCAS | nWE | 命令 | 备注 |
1 | 1 | X | 1 | 1 | 1 | 1 | 空操作 |
SDRAMS3C2410控制器配 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)