The S3C2440A memory controller provides memory control signals that are required for external memory access
Little/Big endian (selectable by a software)
— Address space: 128Mbytes per bank (total 1GB/8 banks)
— Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit)
— Total 8 memory banks
Six memory banks for ROM, SRAM, etc.
Remaining two memory banks for ROM, SRAM, SDRAM, etc .
— Seven fixed memory bank start address
— One flexible memory bank start address and programmable bank size
— Programmable access cycles for all memory banks
— External wait to extend the bus cycles
— Supporting self-refresh and power down mode in SDRAM
这里我们看到一共有1G的地址空间给memory芯片用,
但是S3C2440实际上只有
27根数据线,也就是数据线只能寻址128M,所以引入了一个叫BANK的东西解决了这个问题。
S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,
这样S3C2440最多就可以连接8个128M的存储器,只要在某一时刻只选通一个BANK就可以实现1G的寻址空间每个BANK有个地址.
对该BANK地址的访问实际上就是选通该BANK,然后发送一个地址就可以了。
然后S3C2440的储存控制器只要把该地址解释成两部分:一部分是BANK地址一部分是连接到该BANK存储器内部的地址就可以访问了。
从这个启动图中我们也看到,实际上也是规定了地址的基址--结束地址的范围。【3位 +27位 =30位 --->1GB】
而作为32位的CPU,可以使用的地址范围理论上可以达到2的32次方等于4G,除去上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。
还是从上面的图看到,我们可以通过NandFlash启动或者是其他启动。
那么JZ2440的nor_flash和sdram自然是连接到nGCS0上了。通过开关来控制。这个开关芯片手册也有介绍。
应该就是OM1 0-->1的改变吧。猜测一下。
然后我们的目标是控制一个存储芯片玩一下,那么必然我们需要做一些配置。
韦大大的书上根我们介绍了一下硬件的连法:
我们需要配置的寄存器有
1.位宽和等待寄存器BWSCON
2.BANK控制寄存器【这里有两类】
3.刷新控制寄存器
4.bank大小控制寄存器
5.sdram模式设置寄存器
我们看到sdram似乎是最复杂的,那么我们就玩一下内存好了。
我们看到这么一句话:
Remaining two memory banks for ROM, SRAM, SDRAM, etc .
只有两个bank能挂sdram,我们的板挂在6,先知道这么多,我们看看寄存器具体什么用吧。
每个bank都有4位BWSCON寄存器
ST 使用UB/LB,这个不知道是什么东西
WS 是否等到WAIT状态
DW 设置位宽,我们看到DW0比较特是用OM控制的,所以重要的东西还是有些不一样的,毕竟用来BOOT
这个控制寄存器就分成了两类
bank6/7 MT==00 时候是和BANK0-5一样的
==11的时候我们姐的就是DRAM,需要刷新的存储器
Trcd : RAS2CAS是指 ROW信号变为Clomn信号的延迟
SCAN 列地址数
刷新寄存器
REFEN 开启关闭刷新功能
TREFMD 刷新模式 0=CBR/Auto 1=Self refresh 一般在系统休眠的时候用
TRP 0j即可
Tsrc 默认值0b11即可
Refresh Counter 刷新周期
R_CNT = 2^11+1 -sdram时钟频率*刷新周期
// 8192 refresh cycles/64ms
在未使用PLL时,SDRAM的时钟频率为晶振的12M
2^11+1-12*64/8192 =1955
BURST_EN 支持/进制突发传输
SCKE_EN 使用/不使用SCKE信号令SDRAM进入省电模式
SCLK_EN 时刻/进在访问SDRAM期间发出SCLK信号
BK76MAP 设置BANK6/7大小
bank6/7大小是可以变的。以保持两个空间地址连续
前面提到BANK6/7必须相同的内存大小,虽然我们只有64M内存接在bank6上,我们还是选64/64
能修改的只有CL 是sdram 的时序,不支持1