一、引脚说明
![](https://i-blog.csdnimg.cn/blog_migrate/f63d91791197fe0ef09723da6c25964b.jpeg)
可以看到两块SDRAM并行接入到开发板,一共有27条地址线,32条数据线(各16条)
(1)CLK:SDRAM工作的时钟,并且所有的输入信号都是在CLK的上升沿进行检测的,也就是说我们给SDRAM给的任何命令,一定要在CLK的上升沿保持稳定,以免SDRAM获取我们给出的命令时出现错误。
(2)CKE:时钟使能信号,高电平(激活)、低电平(无效),是用来控制SDRAM内部时钟是否工作的一个信号(在SDRAM内部也是有时钟的哦)
(3)其中地址线分出两条来选择bank,因为SDRAM中有四个bank。
(4)RAS、CAS、WE:这三根线就是用来给SDRAM发命令的,包括初始化、读、写、自动充电等命令。
(5)UDQM、LDQM:数据输入/输出掩码。
二、SDRAM的内部结构。
通常SDRAM内部会包含四个bank,每个bank就像一个表格,由横列组成一个个储存单元先指定行,再指定列,就可以准确找到所需要的存储单元 (16bit),这是内存芯片寻址的基本原理.
1.如何才能选中各自呢?
1. 首先发出一个片选信号,选中整个芯片;
2. 发出Bank地址,选择是哪一个Bank(块,即表格);
3. 发出行地址;
4. 最后发出列地址,才能选中是个格子;
三、S3C2440内存控制器的初始化
SDRAM芯片K4s5m632的行地址数为13,列地址数为9,
nSRAS信号有效时,ADDR2—ADDR14上发出是行地址信号,它对应32位地址空间的bit [23: 11]:
nSCAS信号有效时,ADDR2—ADDR10上发出是列地址信号,它对应32位地址空间的bit [10:2];
由于BANK6以32位的宽度外接DRAM,ADDR0、ADDR1恒为0,不参与译码。
因为SDRAM是由S3C2440的内存控制器所控制的,因此需要配置内存控制器的寄存器。本例的SDRAM是连接在内存控制器的bank6,和bank7.
NO1.总线宽度和等待控制寄存器 BWSCON
[31] 决定 SRAM 是否对 Bank 7 使用 UB/LB (什么是BU/LB??)
[30] 决定 Bank 7 的WAIT 状态 (是否使能)
[29:28] 决定Bank 7的数据总线宽度
注意:bank 6 同样设置
NO2.各个Bank 的控制寄存器 BANKCONn
[16:15] 决定存储器(bank 6、7)的类型
因为是SDRAM所以只设置最低4位。
[3:2] 行地址到列地址之间的延迟Trcd。因为发射行地址后需要过一段时间才能发射列地址。
[1:0] 列地址的位数
NO3.配置刷新控制寄存器REFRESH
[23] SDRAM刷新使能
[22] SDRAM刷新的模式,自动刷新和自刷新(一般在系统休眠时候使用)
[21:20] SDRAM行预刷新时间 Trp
[19:18] SDRAM半行周期时间 Tsrc
SDRAM的行周期时间 Trc
等于 Trc=Tsrc+Trp
[10:0] 刷新计数器
刷新周期=(2^11-refersh_count+1)/HCLK
假如刷新周期是7.8μs,HCLK是100MHz
refresh_count=2^11+1-100x7.8=1269
注:在SDRAM数据手册上有“64ms refresh period(8K cycle)”刷新周期=64ms/8192=7.8125 μs
NO4.配置Bank大小寄存器 BANKSIZE
[7] 使能核突发操作
[5] 0 CLK总是活跃状态
1 CLK只在访问期间活跃
[4] 通过SCKE使能掉电模式
[2:0] bank6/7内存映射,bank6/7大小可编程
NO5.配置Bank模式寄存器 MRSR
[9] 写突发长度
[8:7] 测试模式
[6:4] CAS在读数据时的延迟,写数据没有
[3] 突发类型
[2:0] 突发chang'd
四、一些概念解释